본문 바로가기

Computer Science/Network

[Network] 3-way-handshake & 4-way-handshake

728x90
반응형

3-way-handshake : 연결 성립(Connection Establishment)

  1. 클라이언트는 서버에 접속을 요청하는 SYN(x) 패킷을 보낸다.
  2. 서버는 클라이언트의 요청인 SYN(x)을 받고 클라이언트에게 요청을 수락했다는 ACK(x+1)와 SYN(y)이 설정된 패킷을 보낸다.
  3. 클라이언트는 서버의 수락 응답인 ACK(x+1)와 SYN(y) 패킷을 받고 ACK(y+1)을 서버로 보내면 연결이 성립된다.

 

4-way-handshake

  1. 클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다.
  2. 서버는 클라이언트의 요청인 FIN을 발고 알겠다는 확인 메세지로 ACK를 보낸다.
    1. 데이터를 모두 보낼 때까지 TIME_OUT이 된다.
  3. 데이터를 모두 보내고 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN 플래그를 전송한다.
  4. 클라이언트는 FIN 메세지를 확인했다는 ACK을 보낸다.
  5. 클라이언트의 ACK 메세지를 받은 서버는 소켓 연결을 close한다.
  6. 클라이언트는 아직 서버로부터 받지 못한 데이터가 있을 것을 대비해 일정 시간동안 세션을 남겨놓고 잉여 패킷을 기다린다. (TIME_OUT)

 

SYN 패킷과 ACK 패킷

  • SYN : synchronize sequence number
  • ACK : acknowledgement

TCP 헤더에는 Code Bit라는 부분이 존재한다. 총 6비트로이루어져 있으며 각 비트들은 의미를 갖고 있다. 순서대로 Urg-Ack-Psh-Rst-Syn-Fin이며 해당 위치의 비트가 1이면 해당 내용을 담고 있다는 의미이다.

 

연결을 성립하려면 서로 통신이 가능한지 파악해야한다. 이를 위해 패킷을 먼저 주고 받는다. 요청과 응답 패킷을 활용한다.

 

처음 클라이언트에서 SYN 패킷을 보낼 때 Sequence Number에는 랜덤한 숫자가 담겨진다. 초기 Sequence Number를 ISN라고 한다. ISN은 0부터 시작하지 않고 난수로 생성한다. Connection을 맺을 때 사용하는 포트는 유한 범위 내에서 사용하고 시간이 지남에 따라 재사용된다. 따라서 두 통신 호스트가 과거에 사용된 포트 번호 쌍을 사용할 가능성이 있다. 서버 측에서 패킷의 SYN을 보고 패킷을 구분하는데 난수가 아닌 순차적인 숫자가 전송된다면 이전의 connection으로 부터 오는 패킷으로 인식할 수 있다. 이러한 문제가 발생할 가능성을 낮추기 위해서 ISN을 난수로 설정한다.

728x90
반응형

'Computer Science > Network' 카테고리의 다른 글

[Network] Protocol - OSI 7 계층, TCP/IP  (0) 2022.01.27
[Network] GET vs POST  (0) 2022.01.22