profile image

L o a d i n g . . .

TCP 3-way handshake, 4-way handshake을 이해하기 위해서는 TCP 헤더 정보에 무엇이 있고 어떻게 쓰이는지 알아야 한다.

TCP 헤더 구조

TCP 헤더 구조
TCP 헤더

TCP 프로토콜은 TCP 헤더의 Sequence number, acknowledgement number 등을 활용해 신뢰성있는 데이터전송(데이터 순차 전송, 데이터 유실시 데이터 재전송)을 지원한다.

ACK, SYN, FIN flag bit를 통해 연결 설정(3-way handshake), 연결 해제(4-way handshake)를 지원한다.

TCP 헤더 정보

Sequence number

  • SYN 플래그가 (1)로 설정된 경우, 이것은 초기 시퀀스 번호가 된다. 실제 데이터의 최초 바이트 값과 그에 상응하는 ACK 번호는 이 값에 1을 더한 값이 된다.
  • SYN 플래그가 (0)으로 해제된 경우, 이것은 현재 세션의 이 세그먼트 데이터의 최초 바이트 값의 누적 시퀀스 번호이다.

Acknowledgement number

ACK 플래그가 설정된 경우 이 필드의 값은 수신자가 예상하는 다음 시퀀스 번호이다. 이것은 모든 선행하는 바이트들(존재할 경우)에 대한 수신에 대한 확인응답이 된다. 한쪽이 보낸 최초의 ACK는 반대쪽의 초기 시퀀스 번호 자체에 대한 확인응답이 되며, 데이터에 대한 응답은 포함되지 않는다.

Window size

  • 버퍼 사이즈

Maximum segment size

  • 수용 가능한 최대 데이터 세그먼트 크기

SYN flag

  • 동기화 시퀀스 번호. 양쪽이 보낸 최초의 패킷에만 이 플래그가 설정되어 있어야 한다.
  • 연결 수립 요청을 위한 플래그 (SYN = 1, 연결 요청)

ACK flag

  • Acknowledgment 필드의 값이 유효함을 나타낸다. 클라이언트가 보낸 최초의 SYN 패킷 이후에 전송되는 모든 패킷은 이 플래그가 설정되어 있어야 한다.
  • 연결 수립 과정에서 SYN에 응답을 위한 플래그 (ACK = 1, SYN에 응답)

FIN flag

  • 남은 송신측 데이터 없음. 연결 종료를 위한 플래그 (FIN = 1, 연결 종료)

TCP 3-way handshake (연결 수립)

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

TCP 헤더

연결 수립 과정 (3-way handshake)

1. 클라이언트는 서버로 연결 요청

클라이언트에서 SYN flag를 1로 하여 서버에 연결을 요청한다. 위의 그림에서 Sequence number는 m으로 설정되었다.  
(SYN 비트를 1로 설정해 패킷 송신)

2. 서버는 클라이언트의 연결 요청에 응답 / 클라이언트로 연결 요청

서버가 SYN 요청을 받고 SYN + ACK를 한 패킷에 보낸다. ACK flag를 1로 설정해 클라이언트에 보낸다. acknowledgement number는 sequence number(m) + 1이다.  
SYN flag도 1이다. 이때 seq은 클라이언트에서 보낸 요청 때 숫자와 다른 숫자이다. 위의 그림에서 서버가 클라이언트에 보낸 Sequence number는 n으로 설정되었다. 이 단계에서 **클라이언트에서 서버로 연결이 수립**된다.  

(SYN, ACK 비트를 1로 설정해 패킷 송신)

3. 클라이언트는 서버의 연결 요청에 응답

클라이언트가 SYN 요청을 받고 ACK를 보낸다. ACK flag를 1로 설정하여 서버에 보낸다. acknowledgement number는 seq(n)+1이다. SYN flag는 0이다. 
이 단계에서 **서버에서 클라이언트로 연결이 수립**된다. 양쪽의 max segment size 중 더 작은 값이 데이터 전송 시 사용된다.  
(ACK 비트를 1로 설정해 패킷 송신)

참고) seq에 랜덤 숫자를 사용하는 이유

  1. TCP 연결에 포트 넘버는 수가 제한적이어서 seq이 없을 시 다른 연결의 전송과 혼동될 수 있기 때문에 seq이 필요하다
  2. 다른 연결 간 seq 충돌을 피하기 위해 랜덤 숫자를 사용한다
  3. seq이 예측 가능하면 보안 문제가 발생할 수 있다. ie) TCP seq prediction attack

TCP 4-way handshake (연결 해제)

4-way handshake

연결을 해제하는 과정

1. 서버로 데이터 송신을 완료한 클라이언트가 FIN 송신

2. 서버가 이를 받고 클라이언트에게 ACK 송신

3. 서버에서 클라이언트에 마저 보내야하는 남은 패킷들을 송신(일정 시간 대기)

4. 서버도 보내야 하는 데이터 다 보냈으면, FIN 송신

5. 클라이언트가 ACK 송신

TCP 통신 예시

일반 데이터 통신

1. 클라이언트가 패킷 송신

2. 서버에서 패킷을 받은 이후 ACK 플래그 송신

3. 클라이언트가 ACK을 수신하지 못하면 재전송

연결 수립부터 해제까지 과정 예시

위는 앞서 살펴본 TCP 연결 수립과 해제까지 클라이언트와 서버가 주고받는 정보 예시이다.

1 - 3: 연결 수립
7 - 10: 연결 해제

UDP 헤더

UDP
UDP 헤더

전송 방식

1. 클라이언트가 서버로 패킷 송신

이게 끝!

참조

https://mangkyu.tistory.com/15?category=762469
https://jsonsang2.tistory.com/17
https://gyoogle.dev/blog/computer-science/network/흐름제어 & 혼잡제어.html
https://mindnet.tistory.com/entry/네트워크-쉽게-이해하기-22편-TCP-3-WayHandshake-4-WayHandshake [Mind Net]
https://en.wikipedia.org/wiki/TCP_sequence_prediction_attack
https://velog.io/@sangmin7648/TCP의-연결과-해제
https://ko.wikipedia.org/wiki/전송_제어_프로토콜
우테코 테코톡
https://steffen-lee.tistory.com/31

복사했습니다!