221220 3-Way Handshake

Jongleee·2022년 12월 20일
0

TIL

목록 보기
134/576

3-Way Handshake

  • TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정(Connection Establish) 하는 과정
  • 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터 전달이 시작하기 전에 한 쪽이 다른 쪽이 준비되었다는 것을 알 수 있도록 함
  • TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정

기본매커니즘

TCP 통신은 PAR (Positive Acknowledgement with Re-transmission) 을 통해 신뢰적인 통신을 제공

PAR을 사용하는 기기는 ack을 받을 때까지 데이터 유닛을 재전송

  • 수신자가 데이터 유닛(세그먼트)이 손상된것을 확인하면(Error Detection에 사용되는 transport layer의 checksum을 활용), 해당 세그먼트를 제거

  • sender는 positive ack이 오지 않은 데이터 유닛을 다시 보내야한다.

⇒ 이 과정에서 클라이언트와 서버 사이에서 3개의 Segment가 교환되는 것이 3-way handshake

작동 방식

  • Client는 Server와 연결하기 위해 3-way handshake를 통해 연결 요청
  • 연결 요청을 먼저 시도한 요청자를 Client, 연결 요청을 받은 수신자를 Server라고 함
  • SYN(Synchronization) : 연결요청, 세션을 설정하는데 사용되며 초기에 시퀀스 번호를 보냄
  • ACK(Acknowledgement) : 보낸 시퀀스 번호에 TCP 계층에서의 길이 또는 양을 더한 것과 같은 값을 ACK에 포함하여 전송
  • 동기화 요청에 대한 답변 : Client의 Sequence Number+1을 하여 ACK로 반환

1. 클라이언트는 서버와 커넥션을 연결하기 위해 SYN을 전송

  • 송신자가 최초로 데이터를 전송할 때 Sequence Number를 임의의 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트를 전송
  • PORT 상태
    • Client : CLOSED- SYN_SENT 로 변함
    • Server : LISTEN

2. 서버가 SYN을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN 패킷을 보냄

  • 접속요청을 받은 서버가 요청을 수락하고 클라이언트도 포트를 열어달라는 메세지를 전송 (SYN-ACK signal bits set)
  • ACK Number필드를 Sequence Number + 1 로 지정하고 SYN과 ACK 플래그 비트를 1로 설정한 새그먼트 전송
  • PORT 상태
    • Client : CLOSED
    • Server : SYN_RCV

3. 클라이언트는 서버의 응답으로 ACK와 SYN 패킷을 받고, ACK를 서버로 보냄

  • 마지막으로 클라이언트가 수락 확인을 보내 연결을 맺음 (ACK)
  • 이때, 전송할 데이터가 있으면 이 단계에서 데이터를 전송가능
  • PORT 상태
    • Client : ESTABLISED
    • Server : SYN_RCV ⇒ ACK ⇒ ESTABLISED

full-duplex 통신의 구성

  • 1, 2에서는 클라이언트→서버 방향에 대한 연결 파라미터(시퀀스 번호)를 설정하고 이를 승인한다.
  • 2, 3에서는 서버→클라이언트 방향에 대한 연결 파라미터(시퀀스 번호)를 설정하고 이를 승인한다.
    ⇒ full-duplex 통신이 구축됨

0개의 댓글