3-way-handshake & 4-way-handshake

해연·2023년 7월 3일
0

네트워크

목록 보기
6/16

3-way-handshake는 TCP의 연결을 초기화(연결 성립), 4-way-handshake는 세션을 종료하기 위해 수행되는 절차

  • SYN(Synchronize Sequence Numbers) : 연결설정, Sequence Number를 랜덤으로 설정하여 세션을 연결하는데 사용 -> 초기에 Sequence Number 전송 / Connection을 생성할 때 사용하는 플래그
  • ACK(Acknowledgement) : 응답확인 / 패킷을 받았다는 것을 의미
  • FIN : 세션 연결을 종료시킬 때 사용 / 더이상 전송할 데이터 없음

3-way-handshake

TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정

  • 사용자가 인터넷을 탐색할때마다 클라이언트측의 웹 브라우저와 서버 간의 통신을 지원한다.

1. 서버와 클라이언트 간의 연결이 성립된다.

클라이언트와 서버 간의 연결이 설립되므로, 대상 서버는 새 연결을 승인하고 시작할 수 있는 열린 포트를 가지고 있어야 한다. 클라이언트 노드는 IP 네트워크를 통해 동일한 서버 네트워크나 외부 네트워크에 SYN 패킷을 보낸다.
SYN는 클라이언트가 통신에 사용하고자 하는 랜덤 시퀀스 번호이다. 이 패킷의 목적은 서버가 새 연결을 열지 안열지 묻거나 추론하는 것이다.

2. 서버는 클라이언트로부터 SYN 패킷을 받는다.

서버가 클라이언트로부터 SYN을 받으면 SYN/ACK을 응답한다. 이 패킷은 두 시퀀스 넘버를 포함한다. 첫 번째는 ACK인데, 서버가 클라이언트로부터 받은 시퀀스 번호보다 하나 이상으로 설정한다. 두 번째는 서버에 의해 전송되는 SYN인데 또 다른 랜덤 시퀀스 번호이다. 이 시퀀스는 서버가 클라이언트 패킷을 올바르게 승인했고, 이 패킷도 승인되도록 전송하고 있음을 나타낸다.

3. 클라이언트는 서버로부터 SYN/ACK을 받고 ACK 패킷을 응답한다.

각 측은 수신된 시퀀스 번호를 하나씩 증가하면서 승인해야한다. 이제 시퀀스 넘버에 하나를 추가하여 서버의 패킷을 승인하고 서버에 재전송을 할 차례이다.
이 과정이 완료됨에 따라, 연결은 만들어지고 호스트와 서버는 통신할 수 있다.
이러한 모든 단계는 양쪽에서 발생한 일련번호를 확인하고 연결의 안정성을 보장하는데 필요한다.
두 호스트는 다른 쪽의 연결 파라미터를 인식해야 하기때문에, 실제 데이터 전송 과정이 초기화 되기 전에 누락과 순서 외의 세그먼트가 빨리 감지될 수 있다.

4-way-handshake

세션을 종료하기 위해 수행되는 절차

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

Q1. 서버에서 FIN을 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생한다면?

A : 이 패킷은 Drop되고 데이터는 유실된다.

Q2. 초기 Sequence Number인 ISN을 0부터 시작하지 않고 왜 난수를 생성해서 설정할까?

A : 연결을 맺을 때 사용하는 포트는 유한 범위 내에서 사용하고 시간이 지남에 따라 재사용한다. 따라서 두 통신 호스트가 과거에 사용된 포트 번호 쌍을 사용하는 가능성이 존재한다.
서버 측에서는 패킷의 SYN을 보고 패킷을 구분하는데 난수가 아닌 순차적인 Number가 전송된다면 이전의 연결로부터 오는 패킷으로 인식한다.
따라서 이런 문제가 발생할 가능성을 줄이기 위해서 난수로 ISN을 설정한다.


출처
https://www.techopedia.com/definition/10339/three-way-handshake
http://asfirstalways.tistory.com/356

profile
물음표를 느낌표로 바꾸며 성장하는 예비 백엔드 개발자입니다.

0개의 댓글