[네트워크] TCP 타이머, 옵션

2025. 1. 29. 22:23·CS/Network

전공 수업 내용 정리 (문제 발생시 비공개합니다.)


TCP 타이머

  1. 재전송 타이머
  2. 영속 타이머
  3. 킵얼라이브 타이머
  4. 시간대기 타이머

킵얼라이브 타이머(keepalive timer)

오랜 기간 동안 idle 상태에 있는 것 방지
서버가 2시간 동안 클라이언트로부터 세그먼트를 전송받지 못하면, probe 세그먼트 전송

cf. http
s, s+a, a이 먼저 셋업되어야 요청을 보낼 수 있다.

RTT 측정

*RTT: Round Trip Time, 왕복 시간

RTTm: 측정값

Smoothed RTT (평균)

  • 처음: 아무 값도 설정 안 됨
  • 첫 번째 측정 시: RTTs = RTTm ☞최초 측정값을 평균으로 대입해서 시작
  • 첫 번째 이후의 측정 시: RTTs = (1-α)RTTs + α RTTm → (7/8)기존 평균값 + (1/8)측정값
  • 새로운 측정값에 적은 가중치를 부여(Exponentially Weighted Moving Average(EWMA, 지수가중평균) 방식)
  • α = 1/8

RTT Deviation (편차)

  • 처음: 아무 값도 설정 안 됨
  • 첫 번째 측정 시: RTTd = RTTm/2 ☞RTTd = 처음 측정값*(1/2)
  • 첫 번째 이후의 측정 시: RTTd = (1-ß)RTTd + ß |RTTs-RTTm| → (3/4)기존편차 + (1/4)|측정된 편차|
  • |RTTs - RTTm|: s와 m이 얼만큼 벌어졌는지 계산
  • ß= 1/4

RTO (타이머의 time-out 값)

  • 처음: 아무 값도 설정 안 됨
  • 첫 번째 이후의 측정 시: RTO = RTTs + 4*RTTd
  • RTTs: 평균. RTT는 혼잡이나 네트워크 상황에 따라 2배 정도까지 왔다갔다 하기 때문에 평균을 계속 측정한다.
  • RTTd: 편차. 혼잡이 커질수록 편차도 커진다.

cf. 빠른재전송
재전송되는 패킷에 한해서는 d와 s값은 변하지 않음
RTO, 즉 타이머 값을 2배로 키운 후 재전송

Karn’s Algorithm (칸의 알고리즘)

  • 재전송된 세그먼트의 RTT는 RTO 계산에 사용하지 않는다.
  • 정상 세그먼트(재전송 세그먼트X)에 대한 ACK이 수신된 후에 RTT 측정을 다시 시작한다.
  • 모호한 값은 RTO값을 계산하는 데 반영 하지 않음 → 시간 추정 정확도 향상

TCP 옵션

kind = 옵션 번호 (암기 x)

  • 싱글 바이트 옵션(single-byte options): 빈칸채우기(padding) 용
    • end of option list - 한 번만 사용
    • No operation - 여러 번 사용 가능
  • 멀티 바이트 옵션(multiple-byte options)
  1. 최대 세그먼트 크기 옵션(maximum segment size = MSS)

    디폴트값 일반적으로 516 Byte이지만, 옵션 사용 시 변경 가능
  2. 리시버가 센더에게 받기 원하는 사이즈를 요청할 수 있음
    연결 셋업 과정(syn, ack) 중에만 요청할 수 있고 한 번 셋업된 이후에는 변경 불가
  1. Window-scale-factor

    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이다.
    RTT 1초 당 64킬로바이트 전송 = 0.5Mbps
    최대: 2.5Mbps + scale factor
    rwnd * 2^n: window size의 크기를 2의 n제곱만큼 늘린다.
    연결 셋업 과정(syn, ack) 중에만 요청할 수 있고 한 번 셋업된 이후에는 변경 불가
  • 타임스탬프(timestamp)Timestamp value: 출발시간, 도착시간 기록 (RTT 측정 시 사용)
      • 타임스탬프 예제PAWS(Protection Against Wrapped Sequence number)에도 사용된다.
      • 파일 용량이 큰 경우 주어진 seq 번호를 다 쓰고 기존에 사용했던 번호를 재사용할 수도 있다. 동일한 패킷 번호가 들어오면 혼동할 수 있기 때문에 출발시간을 함께 써 놓으면 receiver는 두 패킷을 수월하게 구별할 수 있다. → 한 바퀴 넘게 돌아가는 것을 방지


    기본적으로 ack을 유발한 패킷이 언제 출발했는지 미리 기록해둬야 한다.
    패킷에 출발시간을 같이 적어서 전송하면, 다시 ack을 보낼때 복사해서 같이 보내줄 수 있음.
  • SACK

    accumlative 방식의 단점을 보완하기 위해 사용셋업 과정에서 패킷 손실 이후의 상황에서 합의를 위해 필요함.
  • 단점: 한 패킷이 없어지면 뒤의 패킷도 한꺼번에 모두 재전송(상대가 패킷을 받았는지 하나씩 확인하기에는 시간이 너무 오래 걸림)

 

저작자표시 비영리 동일조건 (새창열림)

'CS > Network' 카테고리의 다른 글

[네트워크] 소켓 프로그래밍: 프로토콜, 클라이언트와 서버의 함수호출  (0) 2025.01.29
[네트워크] 소켓 프로그래밍 개요  (0) 2025.01.29
[네트워크] TCP segment, control  (0) 2025.01.29
[컴퓨터 네트워크] 3가지 주소 지정; 물리, 논리, 포트  (0) 2023.07.01
[컴퓨터 네트워크] The OSI Model & Layer 7 기초  (0) 2023.06.08
'CS/Network' 카테고리의 다른 글
  • [네트워크] 소켓 프로그래밍: 프로토콜, 클라이언트와 서버의 함수호출
  • [네트워크] 소켓 프로그래밍 개요
  • [네트워크] TCP segment, control
  • [컴퓨터 네트워크] 3가지 주소 지정; 물리, 논리, 포트
abyss-s
abyss-s
프론트엔드 개발합니다!
  • abyss-s
    abyss-s의 블로그입니다.
    abyss-s
  • 전체
    오늘
    어제
    • 분류 전체보기 (190)
      • Web (16)
        • JavaScript (6)
        • TypeScript (1)
        • React (5)
        • Vue (0)
        • Storybook (1)
        • Next.js (1)
      • Backend & Infra (8)
        • Database (3)
        • Node.js (2)
        • SpringBoot (1)
      • PS (71)
      • CS (30)
        • OS (13)
        • Structure & Algorithm (5)
        • Network (10)
        • 정보처리기사 (2)
      • Language (18)
        • OOP (1)
        • JAVA (13)
        • C++ (4)
      • Activities (14)
        • 멋쟁이 사자처럼 (2)
        • OSSCA (3)
        • LG U+ URECA (5)
        • Project (2)
      • AI (0)
      • Git & Github (5)
      • Notion (1)
      • IT (4)
      • Statistics (11)
      • Book (4)
      • Diary (1)
      • Game (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
    • 백준
    • 트위터
  • 공지사항

    • abyss-s의 티스토리에 오신 것을 환영합니다.
  • 인기 글

  • 태그

    C++
    네트워크
    통계학
    자바스크립트
    자바기반응용프로그래밍
    생활코딩
    운영체제
    백준
    BFS
    BAEKJOON
    github
    JavaScript
    Python
    React
    코드트리
    OS
    파이썬
    그리디
    DP
    Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
abyss-s
[네트워크] TCP 타이머, 옵션
상단으로

티스토리툴바