TCP 통신을 진행하기 위해서는 각 노드가 4가지를 선제적으로 알고 있어야 한다.

바로 send buffer size, receive buffer size , 자신의 seq#, 상대의 seq# 이다.

 

이것은 그 유명한 3way-handshake 과정에서 세팅된다.

 

3way-handshake 과정

tcp header 중 syn bit값을 넣는 필드가 있다. syn은 tcp handshake과정에서만 1bit로 설정되는 필드이다.

  1. client는 server에게 syn bit = 1, 자신의 seq#=x를 담은 빈 세그먼트를 보낸다.
  2. server는 client에게 syn bit = 1, 자신의 seq#=y, ack=1, acknum=x+1을 담은 빈 세그먼트를 보낸다.
  3. client는 server에게 ack=1, acknum=y+1을 담은 세그먼트를 보낸다.

3번 과정에서의 패킷 안에는 http request가 함께 포함되어서 갈 수 있다.

 

연결 끊는 과정

  1. client는 server에게 FIN을 보낸다. 이때 client는 더이상 데이터를 보내지 않는다. (client close)
  2. server는 client에게 ACK를 보낸 후 자신이 미처 보내지 못한 데이터들을 모두 보낸다.
  3. 그 후 server는 client에게 FIN을 보낸다.
  4. client는 server에게 FIN에 대한 ACK을 보낸다.

 

timed wait

4번 과정 이후 client는 timed wait을 가지면서 자신이 통신과정에서 사용했던 데이터들을 버리지 않고 기다린다. 이는 만약 4번의 ACK가 유실되었을 경우 ACK를 받지 못한 server가 client를 향해 무한 FIN을 보낼 수 있기 때문이다. 데이터를 일정시간(timeout value와 유사한)동안 갖고 있어야지 FIN에 대한 대처가 가능하다.

+ Recent posts