TCP 연결 단계의 3번째 단계인 connection termination 에 대해 정리하고자 한다
connection termination 에는 2가지 종류 가 존재한다
1. Three-Way Handshaking

1. client process 로부터 close 명령을 받은 뒤 client TCP 는 FIN flag 가 set 되어있는 FIN segment 를 보내게 된다
2. server TCP 는 FIN segment 를 받고나서 클라이언트로 부터 FIN segment 를 잘 받았다는 확인시키기 위해 동시에 server 쪽 connection을 닫는 다는 것을 알리기 위해 FIN+ACK segment 를 보낸다
3. client TCP 는 FIN segment를 TCP server로 부터 잘 받았다는 것을 알리기 위해 ACK segment 를 보낸다
2. Half-Close
한 쪽이 보내는 것을 중지하고 받는 것은 열어두는 것이다 (client 또는 server 모두 가능)
예를 들어 server가 data를 sort하기 전에 모든 data가 필요한 경우 Half-Close 종료가 일어날 수 있다

1. client는 sorting 에 필요한 모든 data를 보내고 나서 FIN segment 를 보내면서 half-close 된다 (보내는 것은 중지, 받는 것은 열어둠)
2. server는 half-close 를 ACK segment 를 보내면서 받아들인다
3. 하지만 server는 여전히 data를 sorting 해서 보내야 하므로 sorting을 하고나서 processed data를 보낸다. 후에 client로부터 acknowledgement 받게 됨
4. server는 FIN segemnt 를 보낸다
5. client는 ACK segment 를 보낸다
알게 된점
ACK와 FIN를 왜 따로 보내는지 궁금했는데 어떤 data를 가공해서 보내야 하는 경우 server에서의 시간 소요를 위해 필요한 부분이었다는 것을 알게 되었다
참조
Data Communications and Networking 5E