전공/네트워크

[네트워크] #13 TCP (개념, 기술 전략)

Campus Coder 2023. 10. 20. 19:30
728x90
반응형

목차

  1. Overview
  2. TCP 세그먼트 구조
  3. TCP 시퀀스 번호, ACK
  4. RTT(rount trip time), timeout
  5. TCP 신뢰성 있는 데이터 전송
  6. TCP fast retransmit
  7. TCP flow control
  8. TCP Connection Management
  9. Syn Flood Attack

1. Overview


2. TCP segment structure


3. TCP 시퀀스 번호, ACK

데이터 스트림의 첫 번째 바이트는 0

TCP가 데이터 스트림에서 500개의 세그먼트 구성

첫 번째 세그먼트에는 시퀀스 번호 0이 할당

두 번째 세그먼트에는 시퀀스 번호 1000이 할당

 

MMS, MTU:

MSS: Maximum Segment Size

MTU: Maximum Transmission Unit

 

시퀀스 번호:

첫 번째: 초기 시퀀스 번호

두 번째 ~: 초기 시퀀스 번호 + 전송 바이트 수

 

ACK:

다른 쪽에서의 다음 바이트 시퀀스 번호

 

누적 ACK:

호스트 A는 호스트 B로부터 바이트 0~535를 포함하는 세그먼트 하나와 바이트 900~1000을 포함하는 세그먼트 하나를 받았음

어떤 이유로 A는 바이트 536~899를 수신하지 못했음

호스트 A는 B의 데이터 스트림을 다시 생성하기 위해 바이트 536(그리고 그 이후)을 기다리고 있음

따라서 B의 다음 세그먼트에는 ack 번호 필드에 536이 포함됨

 

TCP는 스트림에서 첫 번째 누락된 바이트 전까지만 바이트를 승인(누적 ack)

 

Example


4. RTT(rount trip time), timeout

타임 아웃을 설정하기 위해 RTT를 측정해야 함

SampleRTT: 세그먼트 전송 후 ACK 수신까지의 측정 시간

EstimatedRTT: 샘플 RTT의 과거 누적 평균

safety margin: 예상 RTT의 편차에 비례

타임 아웃 간격: EstimatedRTT + safety margin


5. TCP 신뢰성 있는 데이터 전송

TCP는 IP의 신뢰할 수 없는 서비스 위에 rdt 서비스를 만듦

  • 파이프라인 세그먼트
  • 누적 ack
    - 송신자는 돌아온 ACK에 맞추어 데이터를 보냄
    - 수신자는 올바른 데이터를 받을 때마다 ACK를 누적해서 더함
  • 단일 재전송 타이머
    - 타임 아웃 발생
    - 중복 ack

 


6. TCP fast retransmit

TCP fast retransmit 전략: 호스트 A가 중복 ack를 3개 이상 받을 경우 Timeout이 일어나기 전이라도 데이터를 재전송함

 


7. TCP flow control

상대방이 데이터를 받을 수 있는지 없는지를 판단하여 데이터를 보내는 전략

receive window 필드를 활용하여 flow control을 제공함

 

송신자가 큰 파일을 수신자에게 TCP 커넥션을 통해 보낸다고 가정

수신자는 RcvBuffer에 커넥션을 할당함

수신자는 데이터를 받을 때마다 RcvBuffer에 대한 상태를 송신자에게 알림

송신자는 수신자의 버퍼 상태에 맞추어 데이터를 보냄


8. TCP Connection Management

handshake: TCP를 시작하기 위한 통신

3-way handshake

  1. 클라이언트가 서버한테 커넥션 요청을 보냄
  2. 서버가 커넥션에 대한 ACK를 보냄
  3. 클라이언트가 다시 ACK를 보냄

 

FIN: 커넥션 종료

  1. 종료를 원하는 쪽에서 FIN을 보냄
  2. FIN을 받은 쪽에서 ACK로 응답

9. Syn Flood Attack

커넥션을 활용한 공격

  1. 공격자가 봇넷(공격자에 의해 좀비화된 디바이스)에게 서버와 커넥션을 맺으라는 요청을 보내도록 함
  2. 타겟 서버는 TCP 커넥션을 승인하기 위한 SYN-ACK을 보냄
  3. 봇넷에서는 서버가 보낸 SYN-ACK 패킷에 대한 ACK를 보내지 않음
  4. 서버는 반쯤 열린 커넥션이 계속 많아지고 리소스가 가득 차게 됨
  5. 실질적인 클라이언트가 서버를 이용하고자 할 때 서버는 리소스가 남지 않아서 클라이언트의 요청을 받아줄 수 없음
728x90
반응형