어떻게 하면 잘 정리했다고 소문이 날까...

[네트워크 3-1편] Transport Layer 본문

CS 지식/NTW(네트워크)

[네트워크 3-1편] Transport Layer

정리왕이되자 2023. 3. 24. 10:51

총 7개의 내용 중 4번까지 우선적으로 정리합니다.

TCP 관련 내용은 양이 많기 때문에 TCP 편으로 분리하여 정리합니다.

 

1. Transport Layer Services

2. Multiplexing and Demultiplexing

3. Connectionless UDP

4 Reliable Data Transfer

5. Connection-Oriented TCP

6. Congestion Control

7. TCP Congestion Control

 

 

✔️Transport Layer Services

  • Transport Services and Protocols
    • 전송 프로토콜은 OS에 의해 구현.
    • 전송 측) message를 segment로 쪼갠다.
    • 수신 측) segment를 모아서 message로 만든다.
  • Transport Layer VS Network Layer
    • Transport Layer: logical communication between processes.
    • Network Layer: logical communication between hosts.
  • Internet Transport - layer Protocol
    • TCP 
      • reliable, in-order delivery.
      • flow control, congestion control.
      • connection-oriented, connection setup.
    • UDP
      • unreliable, un-ordered delivery
      • best-effort service
      • no delay guarantee
      • no guaranteed bandwidth.

 

✔️Multiplexing and Demultiplexing

  • Transport Layer에서 다중화와 역다중화가 이뤄짐.
  • Multiplexing: 출발지 호스트에서 소켓으로부터 데이터를 모으고 이에 대한 세그먼트를 생성하기 위해 각 데이터에 헤더 정보를 캡슐화하고 그 세그먼트를 네트워크 레이어로 내림.
  • Demultiplexing: 전송 레이어의 세그먼트를 올바른 소켓으로 전달하기.
    • 동작과정
      • host가 IP datagram을 받음.
        • 각 datagram에는 source IP주소와 destination IP 주소가 있음.
        • 각 datagram은 하나의 segment를 가짐.
        • 각 segment에는 source port와 destination port가 있음.
        • IP주소와 port number를 가지고 올바른 socket으로 찾아감.(=demux)
      • UDP Demultiplexing 
        • Destination IP주소와 port Number만으로 올바른 소켓을 찾아감.
      • TCP Demultiplexing
        • 4가지 요소로 구분함.

        • source IP address
        • source Port number
        • destination IP address
        • destination Port number

        • 세그먼트를 올바른 소켓으로 전달하기 위해 4가지 정보를 모두 사용
        • 서버는 여러 개의 TCP 소켓을 지원함.
      • 웹서버와 소켓
        • 웹 서버는 하나의 프로세스가 여러 개의 스레드를 가짐. (새로운 연결 소켓 + 새로운 스레드 생성)
        • 같은 IP의 같은 Port Number로 들어오더라도, 출발 IP와 출발 PortNumber로 구분한다.

 

✔️Connectionless UDP

  • UDP: User Datagram Protocol
    • best effort service
    • packet loss/out of order 발생 가능.
    • connectionless
      • handshaking 과정이 없음.
      • 각 udp segment는 독립적이다.
    • 사용하는 곳: 미디어 스트리밍, DNS
    • Reliable Transfer over UDP: application layer단에서 추가함.
  • UDP Segment Header

  • Why UDP?
    • no connection establishment (delay X)
    • simple
    • small header size
    • conegstion control X (자유로운 앱 동작)
  • UDP checksum
    • 수신자를 위해 작성.
    • 에러 detection을 위해 사용.

✔️Reliable Data Transfer

  • application, transport, link layer에서 중요하다.
  • RDT 서비스
    • 우리는 신뢰적 채널이 구축되었 있다고 느껴지지만, 실제로는 unreliable channel이 구축되어 있고, 여기 transport layer 단에서 reliable protocol을 구축한 것.
    • RDT 1.0
      • 가정) 비트 에러 X, 패킷 손실 X, 완전히 Reliable 하다.
    • RDT 2.0 : 비트 에러 존재
      • 비트 에러를 막기 위해 ACK/NAK <수신자 전송> 이 사용.
      • NAK이면 송신자가 패킷 한번 더 전송.
      • error detection과 feedback 추가.
      • RDT 2.0은 결함이 존재.
        • ACK/NAK이 손상되었을 수 있다.
        • Duplicate packets: seq#를 달기.
        • Stop and Wait: 패킷을 보내고 응답을 받을 때까지 전송하지 않음.
    • RDT 2.1: 손상된 ACK, NAK 처리.
      • 전송자
        • make_pkt하고 seq#(0/1) 추가.
        • seq#0과 1로 충분한가? ->  Stop and wait 이기 때문에 괜찮음.
        • ACK/NAK이 corrput되지 않았는지 확인 필요.
      • 수신자
        • 패킷이 duplicate인지 아닌지 확인 필요.
        • 수신자는 마지막 ACK,NAK이 잘 도착했는지 확인 불가.
        • 순서가 바뀌는 경우, ACK/NAK을 한번 더 전송
    • RDT 2.2: Only ACK
      • NAK을 보내는 것 대신, 잘 받아진 패킷의 ACK을 한번 더 전송.
      • duplicate ACK은 NAK과 같은 행위.
      • ACK에 순서번호 추가하기.
    • RDT 3.0: 에러와 패킷 손실 발생
      • 전송자가 reasonable한 시간동안 기다리기 -> timer 설정.
      • ACK이 오지 않았다면, 다시 패킷 전송.
      • 패킷이 지연되었다면, 다시 전송된 패킷은 duplicate 에 해당. (seq#로 관리)
      • 카운트 타이머 활용.
      • 기다리는 시간이 줄어들면, premature timeout이 발생 가능.
    • 핵심은 seq#와 timer가 해결 방안으로 채택되었다는 것.
  • Pipelined Protocol
    • stop and wait은 자원을 비효율적으로 활용.
    • 파이프라이닝: sender allows multiple inflight, yet to be acknowledge pkts.
      • 앞의 작업에 대한 ack이 오기 전에 다음 job을 밀어넣기.
      • seq#랑 buffering으로 조절.
    • Go-Back-N: N번째부터 다시 보내기.

  • 한 번에 N개의 Packet을 파이프라인에 밀어넣음.
  • cumulative ACK 전송. (누적 ACK)
  • sender는 ACK을 받지 못한 패킷 중 가장 오래된 패킷에 대한 타이머를 가지고 있음.
  • 타임 아웃 시 해당 패킷부터 재전송함.
  • 이전에 받은 패킷들은 버리게 됨.
    • Selective Repeat : 선택된 것만 다시 보내기

  • 수신자 측에서 버퍼링은 필수!
  • unACKED packet은 전송자가 재전송함.
  • 순서에 맞지 않으면 일단 buffered 해두고 다시 순서가 맞아지면 delivered.
  • 각 패킷마다 timer를 가지고 있다.
  • 수신자에서 오류가 발생한 패킷을 수신했다고 의심되는 패킷만 송신자가 다시 전송.