컴퓨터통신#4

LeeMir, 23 March 2021

3장 - Transport Layer(이어서)


RDT2.0 : Fatal Flaw
  • ACK / NAK가 전송 도중 에러가 날 수 있음
    • 실제 ACK였는데 NAK인줄 알고 재전송을 하게 되면 수신자가 중복된 데이터를 받을 수 있음
    • 이를 해결하기 위해 송신자가 Packet에 순서 번호를 붙여서 보냄
  • Stop and Wait 방식
RDT2.1 : Handles Garbled ACK / NAKs
  • RDT2.0과 동일하나 송신자가 보낼 때 패킷에 순서 번호를 붙여서 보냄
    • sndpkt = make_pkt(0, data, checksum)에서 0이 순서(0 또는 1, 1개의 bit만 사용)
  • ACK와 NAK에 대해서도 Error를 Check해줌
  • 수신자가 중복된 번호를 수신했을 때에는 송신자에게 ACK를 보내지만 상위 Layer로 data를 전달하지 않고 자체적으로 discard해버림
RDT2.2 : a NAK-Free Protocol
  • RDT2.1과 동일하나 ACK만 사용함
  • NAK 대신 가장 최근에 보냈던 ACK를 재전송함으로써 뭔가 문제가 있다고 알림
  • 송신자는 보내서 ACK를 기다리고 있는 Packet의 번호가 아닌 다른 번호가 오면 재전송
RDT3.0 : Channels With Errors And Loss
  • RDT2.2에서는 ACK를 중복 수신하면 데이터를 재전송하였으나, RDT 3.0에는 Timer라는 개념이 도입
  • Packet을 보낼 때 Timer가 작동하고, Timeout되면 Packet Loss가 발생했다고 판단해 재전송함
    • ACK가 Loss될 경우에도 Timeout이 발생해 재전송
    • ACK를 중복 수신했을 경우에는 재전송하지 않고, 아무 행동도 취하지 않음
      • 조기 Timeout이나 ACK가 Delay돼 혼잡해져도 중복 수신했을 때 No-Action을 취하므로 잘 정리됨
  • Stop and Wait 방식이기 때문에 Propagation Delay가 길수록 효율이 매우 떨어짐
Pipelined Protocols
  • 전송했지만 아직 ACK를 받지 못한 Packet들을 여러개를 한번에 묶어서 전송함(Sliding Window)
  • Packet 순서 번호에 사용하는 Bits가 2 Bits 이상임
  • Stop and Wait 방식에 비해 링크의 효율이 Packet의 수만큼 비례해 증가
  • Go-back-N 방식
    • ACK 받지 않고 최대 N개까지 전송 가능
    • 오류가 난 부분부터 그 이후 부분까지 재전송
    • 수신자는 몇 번 Packet까지 잘 수신했다고 ACK를 보냄
    • 가장 처음에 보낸(ACK가 아직 오지 않은) Packet에 대해 Timer가 존재함
      • Timer가 expire되면 모든 unacked packet을 재전송함
  • Selective Repeat 방식
    • 오류가 난 부분만 재전송
    • 재전송된 부분을 재조립해야하므로 수신자에게 버퍼가 필요함
      • 각 Packet 순서 번호에 해당하는 버퍼 공간이 있어서 오류가 난 부분은 비워뒀다가 재전송되면 채워서 조립함
    • 수신자는 각 Packet에 대해 개별적으로 ACK를 보냄
    • 각 unacked packet에 대해 개별적으로 Timer가 존재함
TCP: Overview
  • Point-to-point
    • 1대1 방식
  • Reliable, In-order Byte Stream
    • Message의 Boundaries가 존재하지 않음
    • Segment 단위가 아닌 Byte를 단위로 사용함
    • Application 층에서 내려온 Byte 단위의 데이터를 임의의 Segment로 나눈 후 Network 층으로 내려보냄
  • Pipelined(Sliding Window)
    • TCP는 Congest control과 Flow control을 송신 window 크기를 가변적으로 바꿔서 제어함
  • Full Duplex(전이중) Data
    • 동시에 송신, 수신 가능
    • MSS : Segment의 Data에 들어갈 수 있는 최대 바이트 수
      • 2계층의 Data Frame의 최대 크기에 영향을 받음
      • Data Frame에서 각 Layer의 Header를 빼면 남는 부분이 MSS
  • Connection-Oriented
    • Handshaking
      • 송신자와 수신자가 데이터를 주고 받기 전 Control Msg를 주고 받아서 연결 설정을 함
      • 보통 3-way handshake 방식을 사용함
  • Flow Controlled
    • 송신자는 송신 윈도우 크기를 조절해서 송신하는 속도를 제어함