전공 수업 내용 정리 (문제 발생시 비공개합니다.)
TCP 타이머
- 재전송 타이머
- 영속 타이머
- 킵얼라이브 타이머
- 시간대기 타이머
킵얼라이브 타이머(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)
- 최대 세그먼트 크기 옵션(maximum segment size = MSS)
디폴트값 일반적으로 516 Byte이지만, 옵션 사용 시 변경 가능 - 리시버가 센더에게 받기 원하는 사이즈를 요청할 수 있음
연결 셋업 과정(syn, ack) 중에만 요청할 수 있고 한 번 셋업된 이후에는 변경 불가
- Window-scale-factor
RTT 1초일 경우 의 maximum Troughput은?- maximum: 보낼 수 있는 최대치를 보내는 것
- window size는 rwnd와 cwnd의 최솟값이다.
- 혼잡이 많을 경우 cwnd는 rwnd보다 작다. / 혼잡이 없다는 가정 하에, cwnd는 계속 늘어난다. 만약 rwnd < cwnd라면 윈도우 사이즈는 rwnd의 영향을 받는다.
- TCP 헤더는 한줄에 32bits (4byte)의 정보를 저장한다.
- rwnd를 저장하는 데는 이 중 16bits가 사용된다. 해당 16비트를 전부 1로 채운다면 rwnd의 maximum은 2^16이다.
최대: 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 |