CS

CS_네트워크_3-Way HandShake & 4-Way HandShake

99duuk 2024. 6. 3. 02:58

 Internet 프로토콜은 두 호스트 사이에서 데이터를 주고 받는 프로토콜이다.

다른 목적지 호스트로 보내는데 전송만 하면 된다.

 

하지만 인터넷 프로토콜은 데이터가 유실될 수도 있고 순서가 보장되지 않는다. 

즉, 신뢰할 수 없다.

 

그러나 프로세스 간의 통신에는 

데이터를 안정적으로 주고 받을 수 있어야 한다. 

=> TCP 프로토콜


■  TCP(Transmission Control Protocol)

TCP는 연결 지향적 프로토콜로, 데이터의 신뢰성과 순서를 보장한다.

송신자와 수신자 사이에 안정적인 연결을 설정하여 데이터가 올바르게 전달되도록 한다.

주로 파일 전송, 이메일, 웹 브라우징 등에서 사용한다. 

 

 

 

 

 이때 사용하는 프로세스 간의 안정적이고 논리적인 통신 통로가 Connection이다. 

        → connection을 열고, 데이터를 주고 받고, connection을 닫는다.

 

<-------------------------------------------------------------->

                         connection을 열고 -> 3way handshake

 

                          데이터를 주고 받은 뒤, 

 

                         connection을 닫는다. -> 4way handshake

<-------------------------------------------------------------->

 


 플래그 정보 

 TCP 헤더에는 CONTROL BIT(플래그 비트, 6bit)가 존재하며, 각각의 bit에는 "URG-ACK-PST-SYN-FIN"의 의미를 가진다.

        → SYN (Synchronize Sequence Number/00010) : 연결 설정, 시퀀스 넘버를 랜덤으로 설정하여 세션을 연결하는 데 사용하며, 초키게 시퀀스 넘버를 전송한다. 

        → ACK (Acknowledgment/010000) :  응답 확인, 패킷을 받았다는 것을 의미한다.

        → SYN (Finish/000001) : 연결 해제, 세션 연결을 종료시킬 때 사용되며, 더 이상 전송할 데이터가 없다는 것을 의미한다.

 

 

 

3-Way HandShake [TCP 연결 성립 과정]

 

- 데이터를 전송하기 위해 네트워크 연결을 설정하는 과정이다.

- 양측 모두 데이터를 전송할 준비가 되어있다는 것을 보장하고,

   실제로 데이터 전달이 시작하기 전 한 쪽이 다른 한쪽이 준비가 되었다는 것을 알 수 있도록 해야 한다.

             

 

          SYN (Synchronize): 클라이언트가 서버에 연결 요청을 보낸다.

                                                   이때 SYN 플래그가 설정된 패킷을 전송한다.

                                                   클라이언트 -> 서버: SYN

 

          SYN-ACK (Synchronize-Acknowledge) : 서버는 클라이언트의 요청을 수신하고 이를 승인한다.

                                                   서버는 SYN과 ACK 플래그가 설정된 패킷을 클라이언트에게 전송한다.

                                                   서버 -> 클라이언트: SYN-ACK

 

          ACK (Acknowledge) : 클라이언트는 서버의 응답을 수신하고 연결이 성립되었음을 확인한다.

                                                  클라이언트는 ACK 플래그가 설정된 패킷을 서버에게 전송한다.

                                                   클라이언트 -> 서버: ACK

 

 

 

 

 

4-Way HandShake [TCP 연결 해제 과정]

 

          FIN (Finish): 클라이언트 또는 서버 중 연결을 종료하고자 하는 쪽에서 FIN 플래그가 설정된 패킷을 보낸다.

                                                  클라이언트 -> 서버: FIN

 

          ACK (Acknowledge): 상대방은 FIN 플래그를 수신하고 이를 승인하는 ACK 플래그가 설정된 패킷을 전송한다.

                                                  (모든 데이터를 보내기 위해 CLOSE_WAIT 상태가 된다)

                                                  서버 -> 클라이언트: ACK

 

          FIN (Finish): 서버도 연결을 종료하고자 할 때, FIN 플래그가 설정된 패킷을 클라이언트에게 전송한다.

                                              아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT을 통해 기다린다.

                                                  서버 -> 클라이언트: FIN

 

          ACK (Acknowledge): 클라이언트는 FIN 플래그를 수신하고 이를 승인하는 ACK 플래그가 설정된 패킷을 전송한다.

                                                  서버는 ACK를 받은 이후 소켓을 닫는다. (Closed)

                                                 TIME_WAIT을 받은 이후 소켓을 닫는다 (Closed)

                                                  클라이언트 -> 서버: ACK

 

 

 


 

 

포트 상태 정보

Connection을 할 때 필요한 통로가 port이다.

        → CLOSED : 포트가 닫힌 상태

        → LISTEN : 포트가 열린 상태, 연결 요청 대기 중

        → SYN_RCV : 요청을 받고 상대방의 응답을 기다리는 중

        → ESTABLISHED : 포트 연결 상태