컴퓨터통신#5

LeeMir, 30 March 2021

3장 - Transport Layer(이어서)


TCP Segment Structure
  • Sequence Numbers
    • Segment의 첫번째 Data의 순서 번호
  • Acknowledgements(ACKs)
    • 수신측에서 기다리는 Data의 번호
    • Cumulative
      • “ACK 1” => 0번까지 잘 수신했고 1번이 필요하다는 뜻
      • 잘 받았을 경우 받은 SN의 다음 번호를 ACK로 보냄
  • SN과 AN은 Segment 단위가 아니라 Byte 단위로 표시
    • TCP는 ByteStream이기 때문
  • 송신 윈도우 크기는 변하지 않음
    • 송신측에서의 전송 속도를 제어
    • 링크 효율을 결정
TCP Round Trip Time, Timeout
  • EstimatedRTT = (1 - α) * EstimatedRTT + α * SampleRTT
    • Exponential Weighted Moving Average (EWMA)
    • 평균을 내는 게 아니라, 가중치(α)를 부여
TCP Reliable Data Transfer
  • IP라는 Unreliable Service를 이용해 Reliable한 서비스를 만들어야함
    • Pipelined(Sliding Window) Segments
    • Cumulative ACKs
    • 재전송 Timer
  • 재전송(Retransmissions) 조건
    • Timeout
    • Duplicate ACKs
TCP Sender Events
  • Event 1 : 상위 계층(Application Layer)으로부터 전송 요청이 옴
    • Seq #(Sequence Number)를 넣어서 Segment를 만듦
    • Start Timer(재전송 타이머)
      • 가장 오래된, ACK를 받지 않은 Segment에 대한 타이머
  • Event 2 : 재전송 타이머 타임아웃
    • Segment(Timeout을 야기한)를 재전송
    • 타이머를 Restart
  • Event 3 : ACK 수신
    • ACK를 수신하면 Sliding Window를 이동
TCP ACK Generation(Receiver)
  • Event 1 : Segment가 순서대로(Seq #) 도착
    • ACK를 바로 재전송하지 않고, 500ms정도 기다리면서 보낼 Segment가 생기면 ACK와 같이 보냄
    • Segment가 없으면 별도의 ACK를 만들어 보냄(Without Data, Only Head)
  • Event 2 : 다른 보낼 Segment가 생김
    • ACK와 같이 보냄
  • Event 3 : Segment가 순서대로 도착하지 않음
    • Gap 발생
    • Duplicate ACK(내가 받아야하는 Segment가 뭔지)를 전송함
TCP Fast Retransmit
  • 경험론적으로 3개의 Duplicate ACKs가 도착했을 경우 Timeout이 되지 않았더라도 즉시 재전송함
    • 실질적으로 도착한 ACK는 4개가 겹침
TCP Flow Control
  • Sender가 Receiver의 Buffer에서 Overflow(Loss)가 발생하지 않게 조절
  • Recieve Buffer의 Size는 OS에서 정하며, 일반적으로 4096 Bytes임
  • 수신측에서 Free Buffer Space를 TCP Segment Header의 Receive Window 필드에 기록해서 송신측에 전송해 송신측이 이를 넘어서 보내지 않도록 방지함
  • rwnd = RcvBuffer - [ LastByteRcvd - LastByteRead ]
TCP : Connection Management
  • TCP는 연결 설정을 해야함 => “Handshake”
    • Connection Parameters를 정함
  • 3-way Handshake
    • 2-way Handshake는 무수한 단점이 존재
      • 예상치 못한 Delay 발생
      • Message Loss에 의해 재전송되는 Message 발생
      • 송수신측이 서로를 볼 수 없음(잘 받았는지 확인 불가능)
    • 연결 요구 => 응답 => 응답에 대한 응답의 3-way가 완성돼야 연결을 완성할 수 있음
      • 연결 요구 => 응답의 2-way는 정확하지 않음
    • SYNbit : 연결을 하자고 요청하는 bit