TCP 3-way handshake, 4-way handshake

parkhr·2022년 4월 20일
0

TCP

목록 보기
1/1

TCP는 Transmission Control Protocol의 약자로 신뢰할 수 있는 방식으로 데이터를 전송합니다.

TCP 3-way handshake를 통해 두 호스트간의 연결을 설정합니다.

TCP Header

  1. Sequence Number : 시퀀스 번호는 32비트로 이루어져 있는 랜덤 번호입니다.
  2. Acknowledgement Number : 받은 시퀀스 번호보다 1이 큽니다.
  3. Window Size : 버퍼 크기입니다. 데이터를 수신할 수 있는 최대 용량입니다.
  4. Maximum Segment Size : 허용되는 각 데이터 세그먼트의 최대 크기입니다.
  5. SYN Flag : 동기화를 나타냅니다. SYN이 1이면 장치가 연결을 설정하려는 것 입니다.
  6. ACK Flag : ACK는 SYN의 응답입니다. ACK가 1이면 장치가 SYN 메시지를 수신하고 이를 승인한 것 입니다.

TCP 3-way handshake

  1. 클라이언트에서 서버로 SYN을 보냅니다.

    클라이언트가 서버에 연결하려는 경우 SYN(=1), 메시지를 서버로 보냅니다.
    메시지에는 sequence number, ack(=0), window 크기, 최대 segment 크기가 있습니다.
    예를 들어, window 크기가 2000bit 이고, 최대 세그먼트 크기가 200bit인 경우 최대 10개의 세그먼트를 전송할 수 있습니다.

  1. 서버는 클라이언트가 보낸 데이터를 확인하고 SYN, ACK로 응답합니다.

    이때 ACK는 1로 설정하여 클라이언트에 확인했다는 의미를 보냅니다. ACK의 acknowledgement 번호는 클라이언트로부터 받은 sequence 번호보다 1 큽니다.

    예를 들어, 클라이언트로부터 SYN(= 1), sequence 번호(= 10000) 를 받았다면 서버는 ACK(= 1), acknowledgement 번호(= 10001)를 전송합니다.

    또한 서버쪽에서도 연결할 경우 SYN(= 1), window 크기와 최대 세그먼트 크기를 클라이언트에 전송합니다.
    이 단계를 완료한 후 클라이언트에서 서버 측으로의 연결이 설정됩니다.

  2. 마지막으로 클라이언트는 서버의 응답을 받은후, ACK(= 1), acknowledgement 번호(서버의 sequence number + 1)를 서버로 전송합니다.
    SYN는 0으로 유지됩니다.
    이 단계에서 서버에서 클라이언트 측으로의 연결이 설정됩니다.
    연결이 설정되면 데이터 전송을 위해 클라이언트의 maximum segment size와 서버의 maximum segment size를 비교하여 최소값으로 설정됩니다.


TCP는 두가지 타입의 연결을 지원합니다.

1 Graceful connection : TCP에서 4way-handshake를 정상으로 마쳐 연결이 종료되는 방식

TCP 4-way handshake란?


클라이언트가 TCP 종료한다고 가정하겠습니다.

  1. 클라이언트가 FIN(= 1) 를 서버로 전송합니다.
  2. 서버가 클라이언트로부터 FIN(= 1) 를 수신하면 서버는 ACK를 전송합니다.
  3. 클라이언트는 서버가 보낸 ACK 를 보고, 서버가 FIN를 보낼때까지 대기합니다.
  4. 서버는 다시 클라이언트에게 FIN를 전송합니다.
  5. 클라이언트가 서버로부터 FIN를 수신하면, 연결을 해제합니다.

2. Abrupt connection : 갑작스럽게 연결을 해제하는 방식

RST 세그먼트가 전송될 때 연결 해제됩니다. 아래와 같은 케이스일 시, RST 세그먼트를 보낼 수 있습니다.

  • 연결되어있지 않은 상태인데 SYN이 아닌 세그먼트가 수신된 경우
  • 잘못된 헤더가 있는 세그먼트가 수신될 때
  • 연결되어있는걸 끊어야할때 RST 세그먼트를 전송합니다.
    • 새로운 연결을 위한 리소스가 부족할 때
    • 원격 호스트가 응답을 중지했을 때

출처

profile
기록만이 살길이다.

0개의 댓글