[네트워크] TCP 3-way handshake과 4-way handshake

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): 연결 종료 요청