Yozzang의 해킹일기 💻
article thumbnail
Published 2022. 6. 11. 00:51
TCP Networking
728x90

이번 포스트에서는 TCP에 대해 다루겠다.

 

TCP의 특징 : 

  • Point-to-point (점대점): 데이터의 시작점과 끝점 사이의 연결을 관리한다.
  • Reliable, in-order byte stream: 신뢰성 보장, 순서대로 온 것만 애플리케이션 레이어로 올려준다.
  • Full duplex data: 양방향 통신, 최대로 보낼 수 있는 세그먼트가 사이즈(MSS)가 정해져 있다.
  • Cumulative ACKs: ACK(10) - 9번까지 잘 받았으니 이제 10번 보내달라는 뜻이다. 페이로드 없고 헤드(20바이트) 부분만 존재한다.
  • Pipelining: 파이프라이닝 방식 사용한다.
  • Connection-oriented (연결 지향): 3-way handshaking으로 연결하고 4-way handshaking으로 연결 종료한다.
  • Flow control: 흐름 제어
  • Congestion control: 혼잡 제어

TCP 세그먼트 구조 :

  • source port: 발신지 포트
  • dest port: 목적지 포트
  • sequence number: 세그먼트의 일련번호를 저장하는 공간
  • acknowledgement number: ACK의 일련번호를 저장하는 공간
  • ACK: 지금 보내는 세그먼트가 ACK 세그먼트인지 아닌지를 구별한다.
  • checksum: 비트 에러 체크
  • receive window: 흐름 제어

TCP Sequence Numbers :

TCP Sequence Numbers

  • 10바이트의 메시지가 있고 3개의 세그먼트로 쪼개서 보낸다고 가정할 때, 각 세그먼트의 시퀀스 넘버는 다음과 같다.
  • 첫 번째 세그먼트: 맨 앞에 있는 Byte number인 0
  • 두 번째 세그먼트: 맨 앞에 있는 Byte number인 4
  • 세 번째 세그먼트: 맨 앞에 있는 Byte number인 8
  • 단, 실제로 Byte number같은 경우에는 랜덤으로 구성되어 있으며 서로간의 관계만 나타낼 수 있으면 된다.

TCP Retransmission 시나리오 :

  • Seq 92와 Seq 100을 전송한다.
  • ACK 100이 중간에 loss 됐다.
  • ACK 120이 타임아웃 되기 전에 잘 도착했다.
  • Seq 120부터 전송한다.

TCP Fast Retransmit :

  • Seq 92와 Seq 100을 전송한다.
  • Seq 100이 중간에 loss 됐다.
  • Receiver 쪽에는 계속 100번을 달라고 요청한다.
  • 똑같은 ACK이 3번 도착하면(triple duplicate) 타임아웃 끝내기 전에 재전송한다. (맨 위에 있는 ACK 100은 duplicate가 아님)

3-way handshaking(연결) :

  • 클라이언트가 헤더(20바이트)만 존재하는 세그먼트를 보낸다(시퀀스 넘버 포함).
  • 서버는 시퀀스 넘버인 X부터 시작한다는 것을 알고 그에 대한 응답을 한다. 이때 ACK 번호는 x(클라이언트 시퀀스 넘버)+1(SYNbit 크기)이다.
  • 클라이언트 측이 서버가 보낸 SYN 메시지를 잘 받았으면 이에 대한 ACK 메시지(y+1)를 전송하여 연결을 시작한다.(이때 바로 메시지를 전송해도 된다.)

(3-way handshaking 이후 sender는 receiver한테 첫 번째 세그먼트의 시퀀스 넘버를 알려줘야 한다.)

 

4-way handshaking (종료) :

  • 클라이언트 측이 종료를 뜻하는 FINbit를 보낸다.
  • 서버 측은 이를 수락하여 ACKbit를 보낸다.
  • 서버가 더 보낼 데이터가 남아 있거나, 전송 중인데 도착하지 않는 데이터가 존재할 수 있으므로 잠깐의 딜레이 후에 연결을 끊는다.
  • 잠깐의 딜레이 후에 서버가 다시 클라이언트 측으로 FINbit를 보낸다.
  • 클라이언트 측은 이를 수락하여 ACKbit를 보낸다.
  • ACKbit도 loss될 수 있으므로 잠깐의 타임아웃 후에 연결을 완전 종료한다.

'Networking' 카테고리의 다른 글

혼잡 제어 (TCP)  (0) 2022.06.15
연결 관리 및 흐름 제어 (TCP)  (0) 2022.06.14
Go-Back-N & Selective Repeat  (0) 2022.06.04
Reliable Data Transfer (RDT)  (0) 2022.05.26
Transport Layer (전송 계층)  (0) 2022.05.06
profile

Yozzang의 해킹일기 💻

@요짱

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!