2021. 10. 17. 11:55ㆍ카테고리 없음
네트워크를 4계층으로 나눌때 network interface 계층, internet계층, transport계층 과 application계층으로 나눠집니다.
TCP는 이 4계층중 transport 계층의 대표적인 protocol인 TCP와 UDP중 하나입니다.
TCP란
웹이나 email같이 데이터가 정확하게 전달되어야 하는 통신에서 사용됩니다.
연결지향 protocol즉, 통신을 맺고 끊는 과정에서 client와 server 간의 확인 절차를 거칩니다.
3 way hand shake
연결 성립(Connection Establishment)
커넥션을 맺을때 3단계로 진행됩니다.
1. Client는 Server에 접속 요청을 하는 sync패킷을 보냅니다.
2. 이후 서버는 요청 수락을 하고 server는 sync_received 상태가 됨
3. Client는 서버에 수락확인(ack)을 보내는 서버는 established상태가 됩니다.
4 way hand shake
연결해제 (Connection Termination)
커넥션을 해제할때는 4단계로 진행됩니다.
1. 클라이언트가 연결을 종료하겠다는 Fin Flag를 전송합니다. 그러면 클라이언트는 종료신호를 기다리는 상태인 fin_wait1 상태가 됩니다.
2. 서버는 일단 확인했다는 (ack)메시지를 보내고 자신의 통신이 끝날때까지 기다리게합니다. 그리고 서버는 close wait상태, 클라이언트는 종료신호를 기다리겠다는 fin_wait2상태로 전환합니다.
3. 서버가 통신이 끝나면 이제 종료해도 된다는 Fin flag를 클라이언트에 전달. 서버는 last_ack상태로 전환, 클라이언트는 time_wait상태로 전환됩니다.
4. 클라이언트는 연결종료를 확인했다는 ack플래그를 보내고 server상태는 closed 됩니다. 하지만 client는 아직 서버로부터 받지 못한 데이터가 있을것을 대비해 일정한 시간동안 session을 남겨놓고 패킷을 기다립니다. (time_await)
TCP Header
CodeBit(Flag Bit)라는 부분이 존재합니다. 총 6bit로 이루어 져있고 각각 1bit들에 의미를 갖고 있습니다.
urg-ack-psh-rst-syn-fin
syn 을 000010으로 나타내고 fin은 000001로 나타낼 수 있습니다.
urg(urgent):긴급데이터
ack(acknowledge):응답
상대로부터 패킷을 받았다는 것을 알려주는 패킷이다.
psh(push):밀어넣기
rst(reset):재 연결 종료
syn(synchronization):동기화
tcp에서 세션 성립시 가장 먼저 보내는 패킷
fin(finish): 연결 종료 요청