컴퓨터통신#3

LeeMir, 16 March 2021

3장 - Transport Layer


Transport Layer Services
  • 서로 다른 host에서 돌아가고 있는 App Processes에게 Logical Communication을 제공함
  • Transport Protocols는 end systems에서 기능함
    • send side : Application Layer로부터 Message를 받아 Segment로 나눠줌(TCP)
    • receive side : Segments들을 Message로 재조립해 Application Layer로 올려줌
  • Transport Protocol의 종류는 무수히 많으나, 인터넷에서는 TCP와 UDP을 사용함
    • Application을 제작할 때에는 하나만 선택해야함
Transport Layer vs Network Layer
  • Network Layer : End host들 간의 Logical Communication(IP)
  • Transport Layer : Application Processes간의 Logical Communication
  • 상대적으로 낮은 계층인 Network Layer가 Transport Layer에 서비스를 제공해야함
Internet Transport-Layer Protocols
  • TCP : 전송 순서에 맞게 Application으로 전송함 (reliable, in-order)
    • 하는 일이 많음
    • flow control
    • congestion control
    • connection setup(연결 지향형)
  • UDP : 전송 순서 신경쓰지 않고 Application으로 전송 (unreliable, unordered)
    • 단순한 일을 함
    • IP 또한 unreliable, unordered의 특성을 가짐
    • “Best-Effort” : unreliable, unordered하므로 Router에서는 단지 FIFO로 데이터를 전송함
  • Services Not Available :
    • Delay Guarantees (시간성 요구사항)
      • 모든 Packet은 평등함 (어떤 Packet도 우선순위를 갖지 않음) => unreliable, unordered한 IP를 쓰기 떄문
    • Bandwidth Guarantees
    • Router의 Queue Scheduling이 중요함
Multiplexing / Demultiplexing
  • 송신(Sender)측에서 Multiplexing을, 수신(Receiver)측에서 Demultiplexing을 해줌
    • Multiplexing : Application과 Transport 사이에 여러 개의 Socket이 존재하는데, 이 Socket의 Port 번호를 데이터의 Header에 추가해 Segment로 나눔
    • Demultiplexing : Segment를 재조립하면서 Header를 읽어 맞는 Socket으로 보냄
  • TCP든 UDP든 Segment의 Header에는 32bits의 크기 중 16bits는 source port #, 나머지 16 bits는 dest port #를 뜻함
  • Demultiplexing
    • 각 Datagram에는 Port번호 뿐 아니라, Destination IP와 Source IP도 들어있음
    • Connectionless(UDP) Demux
      • Source IP나 Source Port #가 다를지라도 Destination에서는 동일한 Socket으로 전달될 수 있다
      • Application에서 Source IP를 읽어서 구분할 수 있기 때문!
    • Connection-oriented(TCP) Demux
      • TCP에서 Socket은 다음 네 개에 의해 구분된다
        • Source IP Address
        • Source Port Number
        • Dest IP Address
        • Dest Port Number
      • UDP와 달리 모두 다 다른 Socket으로 전달되어야 한다
UDP : User Datagram Protocol
  • 특별한 기능이 존재하지 않음(No Frills)
  • IP의 “Best Effort” Service 그 자체만 제공
    • 데이터가 손실되어도 따로 처리하지 않음
    • 순서가 뒤바뀌어와도 그 상태 그대로 전송함
  • Connectionless
    • 송수신자간 Handshaking을 하지 않음(TCP에서 함)
    • UDP의 User Datagram(segment)는 독립적으로 움직임
  • UDP의 쓰임새
    • DNS(도메인 또는 32-bit IP 주소)
    • SNMP(Simple Network Message Protocol)
    • Streaming multimedia apps(그룹 통신, 방송)
      • 시간성이 중요(데이터가 중간에 아주 조금 소실되어도 됨)
      • 다수 통신에 유리, TCP는 1대1만 가능
  • Reliability를 제공하지 못함
    • 단, Application Layer에서 Error 처리를 하는 방식으로 Reliability를 제공할 수 있음
UDP : User Datagram Header
  • Header에는 4개의 Field가 존재
    • source port #, dest port #, length, checksum 총 64 Bits = 8 Bytes(Overhead)
    • length : Header를 포함한 User Datagram 전체 길이를 명시(끝을 알려줌)
    • checksum : error 유무 명시
  • Header를 제외한 나머지 부분에는 메시지의 내용이 있음 => Payload
  • Why is there a UDP?
    • UDP는 연결 설정을 따로 하지 않음(연결 설정은 Delay가 존재)
    • 굉장히 Simple함
    • Header Size가 작음
    • Congetstion Control을 하지 않음
RDT(Reliable Data Transfer) 1.0 : Reliable Transfer Over a Reliable Channel
  • 가정

    • No Bit Errors
    • No Loss of Packets
  • 송신

    • rdt_send(data)


      packet = make_pkt(data)

      udt_send(packet)

  • 수신

    • rdt_rcv(packet)


      extract(packet,data)

      deliver_data(data)

RDT2.0 : Channel With Bit Errors
  • 가정
    • Flip된 Bits가 존재 (0 => 1, 1 => 0)
      • Checksum을 통해 검출
  • UDP에서는 Error가 검출되면 버리면 그만이지만 TCP에서는 Recover을 해줘야함
  • TCP Recover
    • Error가 검출이 되지 않으면 수신자가 송신자에게 ACKs(positive ACKnowledgements) 전송
    • Error가 검출되면 수신자가 송신자에게 NAKs(Negative AcKnowledgements) 전송
    • 송신자가 NAK를 받게 되면 데이터를 재전송함