전송계층

부서진·2023년 5월 17일

Computer Science

목록 보기
16/18

Reliable Networking (End to End)

  1. 무한한 흐름 x -> 패킷화
  2. 패킷 유실
  3. 패킷 순서 바뀜
  4. 패킷 변조

성능 향상

  • Pipelining
    • 연속된 대량의 작업이 순차성을 갖고 있으나 앞의 일이 종료하지 않고도 다음 일을 시작할 수 있는 병렬성을 가진 경우 성능 향상 기법
    1. Go-Back-N
      • 최대 N개의 packet을 병렬적으로 처리
      • 송신 측에서는 N개의 packet을 buffering (재전송하기 위해서)
        • buffering의 의미: 수신이 확실하지 않은 packet에 대하여 재전송을 위하여 보관
      • 수신 측에서는 순차적으로 잘 수신된 packet에 대하여 Ack를 송신하고 packet의 payload를 응용계층으로 올려보낸다.
      • 송신 측에서는 buffer에 여유가 생기면 (Ack를 받아서) 그만큼 추가로 pipelining
      • 수신 측에서 순서에 맞지 않는 패킷이 온 경우, 조용히 있거나, 잘 받은 packet에 대한 ack를 전송
      • Go-Back-N에서의 재전송 정책
        • 각 packet 전송 시에 packet을 위한 Timer 설정
        • Ack를 받으면 Ack 해당 packet과 앞쪽 packet에 대한 Timer 소멸
        • Timer 이벤트 발생 시 해당 packet부터 재전송
      • 추가 재전송 정책
        • k번째 packet에 대한 ack이 반복적으로 할 경우 (k+1)번째 packet의 유실을 함축 (3번 정도 k 패킷에 대한 ack이 오면 timer와 무관하게 k+1번째 packet부터 재전송)
      • 장점
        • 단순 (특히 수신 측)
        • 간명하게 시스템의 상태가 추상화
      • 단점
        • 패킷 유실에 대한 복구 비용이 많다
    2. Selective Repeat
      • Go-Back-N의 단점 보완
      • 수신 측에 버퍼
      • 빠진 packet이 있을 경우 그 뒤쪽의 잘 도착한 packet들은 버퍼에 보관
      • 빠진 packet이 추후 도착하면 버퍼에 저장소 이후 packet들까지 순차적으로 응용에 전달
      • 장점
        • 실패한 packet만 재전송 (성능 향상)
      • 단점
        • 시스템 추상화 복잡
        • 수신 측에도 버퍼가 필요
TCPUDP
신뢰성 제공내용 유실 x내용 유실 o
속도고의적 지연이 존재
- 패킷 수신 순서
- 혼잡 제어
고의적 지연 x
전송단위바이트(Byte)
send!=recv
패킷(데이터그램)
send() 함수 호출 단위
  • TCP
    • Reliable Network
    • 내용 변조 탐지
    • 혼잡 제어
      • 패킷 유실 -> 혼잡 상황 -> 패킷 전송률 낮아짐 (현재 전송률 / 2)
      • 패킷 전송 원활 (비유실) -> 비혼잡 상황 -> 패킷 전송률 높아짐 (현재 전송률 +C)
      • AIMD (Additive Increase Multiplicative Decrease)
        • MSS (Maximum Segment Size): Increase 단위 (1~4kB)
        • Multiplicative Decrease
          • 패킷 유실 시 Condition Window 크기를 절반으로 줄이기
          • 패킷 유실이 네트워크 이상을 반영할 때는 CW = 1MSS로 대폭 줄이기
          • 네트워크 이상과 단순 유실의 판단 근거
            • 네트워크 이상 시에는 모든 전송 세그먼트가 동시 유실, Ack이 도착을 안하고 RTO가 Trigger (Slow Start, CW 증가가 너무 느림)
              • 기존 CW=100인 경우, CW=50이 될 때까지는 Multiplicative Increase 수행
            • 단순 유실 시에는 유실된 세그먼트 이후 보낸 다른 세그먼트의 Ack은 도착 (Fast Retraction, Fast Recovery)
      • 패킷 유실 Ack 신호가 Timeout 내에 오지 않음
        • Timeout은 너무 길거나(재송신 지연) 짧으면(false alarm 가능성) 안됨
        • Retransmission Timeout (RTO) = max (RTT\overline{RTT} + 4 * Dev RTT, 1초)
        • RTT\overline{RTT} 구하기: weighted moving average
          • RTTNRTT_{N}: Roundtrip Time의 N번째 측정값
          • RTTN\overline{RTT}_{N}: N번째 sample 후 판단한 RTT 평균
          • RTT1=RTT1\overline{RTT}_{1} = RTT_{1}
          • RTTN=(1α)RTTN1+αRTTN\overline{RTT}_{N} = (1-\alpha)\overline{RTT}_{N-1} + \alpha RTT_{N} (TCP에서 α\alpha는 0.125)
          • RTTN=i=1N(1α)NiαRTTi+(1α)NRTT1\overline{RTT}_{N} = \sum_{i=1}^{N} (1-\alpha)^{N-i} \alpha RTT_{i} + (1-\alpha)^{N} RTT_{1}
    • 흐름 제어
    • 포트 (사서함) 개념 지원 (응용 구분)
      • 소켓:포트 = N:1
    • 헤더
      • Src Pack # and Dest Pack #
      • Seq # (Byte)
      • Ack # (Byte)
      • 헤더길이 and 맺고 끊음 and Recieve Window (수신 가능한 버퍼 크기)
      • checksum and

0개의 댓글