컴퓨터 네트워크: Options

2021. 11. 27. 20:00·Computer Science/컴퓨터 네트워크
반응형

TCP: Transmission Control Protocol

11. Options

TCP 헤더에는 최대 40바이트의 optional information이 포함될 수 있다(옵션을 안 쓴 기본 헤더는 20바이트. 따라서 헤더는 20 - 60바이트). 옵션은 대상에 추가 정보를 전달하거나 다른 옵션을 정렬한다. 우리는 크기에 따라 single-byte options과 multiple-byte options 두 가지 범주의 옵션을 정의할 수 있다.

 

Options

single-byte options ☞ 아무 일도 안 함

  • end of option list
  • no operation 

multiple-byte options

  • maximum segment size
  • window scale factor
  • timestamp
  • SACK-permitted
  • SACK

 

End-of-option option

TCP 헤더는 무조건 한 줄에 32bits(4byte)을 맞춰야 하므로 3-byte option 뒤 빈 공간 1byte는 EOP로 채워준다. 

따라서 EOP: 빈칸 채우기(padding) 용

 

*EOP는 오직 한번만 사용된다. 

 

 

No-operation option

NOP: 빈 칸 채우기(padding) 용

1byte나 2byte 등 원하는 byte만큼 띄우고 옵션을 시작할 수 있다. 

보통 뒤에는 EOP, 앞에는 NOP를 사용한다. 

 

*NOP는 여러 번 쓰일 수 있다. 

 

 

Maximum-segment-size option

    • MSS: Maximum-segment-size
      • MSS를 사용했던 부분↓
      • cwnd = 1MSS
      • Nagle 알고리즘: 소량의 데이터 전송 시 처음 n byte는 그냥 보내고, 그 뒤로 n byte씩 데이터가 도착하면 그 데이터는 보내지 않고 우선 대기시킨다. 데이터가 MSS만큼 쌓이면, 즉시 해당 패킷을 전송한다. 가장 처음 보냈던 1byte에 대한 ACK이 도착할 때까지 데이터가 MSS만큼 쌓이지 않는다면, 데이터가 꽉 차지 않아도 해당 패킷을 전송한다.
  • 한 segment의 size는 디폴트(560바이트)로 정해져 있다.
  • 그러나 이 옵션을 사용하면 sender와 receiver가 setup과정에서 협의를 통해 segment size를 정할 수 있다. 

※ sender와 receiver가 이미 연결되었다면 도중에는 segment size를 변경할 수 없다. 

 

 

Window-scale-factor option

RTT 1초일 경우 의 maximum Troughput은?

  • maximum: 보낼 수 있는 최대치를 보내는 것
  • window size는 rwnd와 cwnd의 최솟값이다.
  • 혼잡이 많을 경우 cwnd는 rwnd보다 작다. / 혼잡이 없다는 가정 하에, cwnd는 계속 늘어난다. 만약 rwnd < cwnd라면 윈도우 사이즈는 rwnd의 영향을 받는다.

TCP 헤더

  • TCP 헤더는 한줄에 32bits (4byte)의 정보를 저장한다. 
  • rwnd를 저장하는 데는 이 중 16bits가 사용된다. 해당 16비트를 전부 1로 채운다면 rwnd의 maximum은 2^16이다. 

ex. RTT = 100ms일 경우 Throughput
64KB / 0.1s = 5Mbps

ex. RTT = 10ms일 경우 Throughput

64KB / 0.01s = 50Mbps→ 이 이상 못 보냄 (TCP를 그냥 쓰면 집에 기가bps 라인을 깔아도 sender는 50Mbps밖에 못 보내기 때문에 성능이 안 나옴)


⇒ 처음 디자인할 때 scale factor 옵션으로 window size 값을 키울 수 있다.

  • scale factor는 window size의 크기를 2의 n제곱만큼 늘리는 옵션이다.
  • 만약 window size를 8배 늘리고 싶다면, sender는 setup과정에서 scale factor의 값을 3으로 작성하여 상대방에게 보낸다. receiver는 scale factor의 3을 2^3으로 이해하고 sender의 제안을 수락하거나 거절한다.

※ MSS와 마찬가지로, sender와 receiver가 이미 연결되었다면 도중에는 scale factor를 변경할 수 없다. 

 

 

Timestamp option

 

Timestamp value: 출발시간, 도착시간 기록(RTT 측정 시 사용)

 

 

Example 15.5

RTT 계산 예시

* 타임스탬프 옵션은 PAWS(Protection Against Wrapped Sequence number)에도 사용된다.

  • sequence number로는 32bits가 사용된다. 따라서 패킷은 2^32(대략 40억)개의 번호를 sequence number로 가질 수 있다. 

  • 파일 용량이 큰 경우 주어진 seq 번호를 다 쓰고 기존에 사용했던 번호를 재사용할 수도 있다. 동일한 패킷 번호가 들어오면 혼동할 수 있기 때문에 출발시간을 함께 써 놓으면 receiver는 두 패킷을 수월하게 구별할 수 있다. 

 

SACK

accumlative 방식의 단점

한 패킷이 없어지면 뒤의 패킷도 한꺼번에 모두 재전송(하나하나씩 대조해가며 상대가 패킷을 받았는지 안 받았는지 확인하기에는 시간이 너무 오래 걸림)

이러한 단점을 보완하기 위해 SACK 옵션을 사용한다. (setup과정에서 상대방과 합의를 해야함)

 

Example 15.6

  • 2001:3001을 받지 못한 상황.
  • 기존의 sender는 상대가 받지 못한 2001번 패킷부터 그 뒤 패킷을 모두 재전송한다. (낭비)
  • 이를 보완하기 위해 SACK 옵션을 사용하면, 상대방은 제대로 받은 패킷 번호를 block 단위로 저장해 둔다. (해당 블록의 시작주소와 끝주소+1을 세트로 저장)
  • sender는 receiver가 제대로 받은 패킷을 제외한 나머지 block만 재전송해주면 된다. 

 

Example 15.7

중복된 패킷을 받았을 때 첫번째 block에 중복된 주소를 써준다. 

 

 

 

 

 


자료 출처

 

TCP/IP Protocol Suite 4th Edition Slide
(Behrouz A. Forouzan 저, McGraw-Hill, 2010)

반응형
저작자표시 비영리 변경금지 (새창열림)

'Computer Science > 컴퓨터 네트워크' 카테고리의 다른 글

컴퓨터 네트워크: IPv4 Address - Classless Addressing(1)  (0) 2021.12.02
컴퓨터 네트워크: IPv4 Address - Classful Addressing  (0) 2021.12.01
컴퓨터 네트워크: IPv4 Address - Introduction  (0) 2021.11.27
컴퓨터 네트워크: TCP timers  (0) 2021.11.11
컴퓨터 네트워크 실습  (0) 2021.10.16
컴퓨터 네트워크: Congestion Control  (0) 2021.10.14
'Computer Science/컴퓨터 네트워크' 카테고리의 다른 글
  • 컴퓨터 네트워크: IPv4 Address - Classful Addressing
  • 컴퓨터 네트워크: IPv4 Address - Introduction
  • 컴퓨터 네트워크: TCP timers
  • 컴퓨터 네트워크 실습
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
    반응형
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기 (505)
      • 프로그래밍 (41)
        • Programming (1)
        • C | C++ (6)
        • Java (28)
        • Python (5)
      • 웹 프로그래밍 (108)
        • HTML | CSS (5)
        • JavaScript | TypeScript (41)
        • React (25)
        • Vue.js (0)
        • Next.js (18)
        • Spring & Spring Boot (13)
        • JSP & Servlet (1)
        • DB (4)
      • 웹 프로젝트 (77)
        • 웹 프로젝트 (22)
        • 🥨스낵몰 (3)
        • 👨‍👨‍👧‍👧소셜 가계부 (26)
        • 🌜꿈 일기장 (11)
        • 🔮포트폴리오 사이트 (11)
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램 (0)
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼 (0)
        • 😺Just Meow It: 조언 사이트 (2)
        • 📕Workly: 교대근무 다이어리 (1)
      • 앱 프로그래밍 (26)
        • Flutter (24)
        • Kotlin (2)
      • Problem Solving (166)
        • 백준 (52)
        • 프로그래머스 (79)
        • SWEA (29)
      • Computer Science (40)
        • 알고리즘 (14)
        • 컴퓨터 네트워크 (18)
        • 이산수학 (8)
      • Developer (47)
        • 후기 (4)
        • 자료정리 (4)
        • 취업 | 취준 (9)
        • SSAFY (1)
        • 웹개발 교육 프로그램 (9)
        • TIL (20)
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    ZeroCho
    백준
    프로그래머스
    React
    Next.js
    웹사이트
    플러터
    타입스크립트
    AWS
    bfs
    Jiraynor Programming
    프로젝트
    파이썬
    Til
    구현
    자바스크립트
    리액트
    포트폴리오
    강의내용정리
    d3
    뉴렉처
    클론 프로젝트
    공식문서
    spring boot
    SWEA
    mysql
    자바
    블로그 제작
    알고리즘
    컴퓨터네트워크
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
컴퓨터 네트워크: Options
상단으로

티스토리툴바