Download presentation
Presentation is loading. Please wait.
1
1. 연결종료 1 / 38 4way handshake와 상태 천이
1. Client APP이 Close()되어 FIN 전송 후 FIN_WAIT_1 상태로 대기 2. Server가 FIN을 받으면 해당 포트를 CLOSE_WAIT로 바꾸고 ACK를 보냄 3. ACK를 받은 Client는 FIN_WAIT_2로 변경 그와 동시에 Server에서는 App에게 Close()를 요청 2018년 12월 7일 오후 7시 8분 1 / 38
2
1. 연결종료 2 / 38 4way handshake와 상태 천이
4. Close를 받은 APP은 종료 프로세스를 진행시켜 Close()가 되고 Server는 FIN 패킷을 전송 후 LAST_ACK 상태로 천이 5.Client가 FIN_WAIT_2에서 FIN을 받으면 ACK를 응답하고 자신은 TIME_WAIT로 상태를 변경 6. Client의 ACK를 받으면 서버는 자신의 포트도 CLOSED 상태로 변경 2018년 12월 7일 오후 7시 8분 2 / 38
3
2. 연결 설정과 연결 해제시 패킷 분석 2018년 12월 7일 오후 7시 8분 3 / 38
4
2. 연결 설정과 연결 해제시 패킷 분석 연결 설정 Server Open(오른쪽) Client Connection(왼쪽)
=> Client의 Connect 호출 시 SYN가 전송되고 연결 시작 2018년 12월 7일 오후 7시 8분
5
2. 연결 설정과 연결 해제시 패킷 분석 연결 종료 Client에서 2를 눌러 Close() 호출(왼쪽)
Client -> Server FIN,ACK 패킷 전송 2018년 12월 7일 오후 7시 8분
6
2. 연결 설정과 연결 해제시 패킷 분석 연결 종료 2. Server에서 2를 눌러 Close() 호출(오른쪽)
Server -> Client FIN,ACK 패킷 전송 2018년 12월 7일 오후 7시 8분
7
3. TCP 상태 천이 server client 7 / 38
8
3. TCP 상태 천이 - 계속 8 / 38 TIME_WAIT 상태
송신기는 ACK를 보내고 2MSL(Maximum Segment Lifetime) Wait를 수행 수신기가 ACK를 받지 못한 경우에 받을 때 까지 FIN을 전송함. 2MSL 대기 상태에 있는 동안, socket pair 재사용 X TCP가 능동적 폐쇄를 수행하고 마지막 ACK를 전송하면 이 연결은 MSL의 2배동안 TIME_WAIT 상태에서 대기해야함. 마지막 ACK가 손실 되는 경우 TCP가 마지막 ACK를 재전송 하게 한다. 수동 폐쇄쪽에서는 마지막 ACK를 수신 할때까지 FIN을 전송함. 2018년 12월 7일 오후 7시 8분 8 / 38
9
3. TCP 상태 천이 - 계속 9 / 38 FIN_WAIT_2 상태 폐쇄가 FIN을 보내는 것부터 시작 됨.
net.ipv4.tcp_fin_timeout 타이머를 설정하여 타이머 종료 후 강제로 CLOSED 상태로 이동 시킴. 2018년 12월 7일 오후 7시 8분 9 / 38
10
14. TCP 타임아웃과 재전송 김 진 홍
11
contents 개요 간단한 타임아웃과 재전송 예제 재전송 타임아웃의 설정 타이머 기반 재전송 빠른 재전송
선택 확인 응답을 가진 재전송 의사 타임아웃과 재전송 패킷 재순서화 재패킷화 정리
12
1. 개요 12 / 38 재전송과 타임아웃 TCP는 데이터 세그먼트나 ACK가 손실 되면 재전송을 수행.
시간기반 ACK 기반 TCP는 데이터 전송 후 타이머를 설정하고, 타이머 종료 까지 ACK를 받지 못하면 timeout이 발생함. Timeout은 Retransmission Time Out(RTO)라 부르는 시간이 지난 후 발생 함. 2018년 12월 7일 오후 7시 8분 12 / 38
13
1. 개요 13 / 38 14장 학습 목표 세그먼트 손실 시 무엇을 전송할 것인가? 손실에 대한 응답은 어떻게 하는가?
RTO가 RTT 측정에 기반을 두고 설정되는 방식? SACK의 사용법? TCP의 동작에 따른 IP 패킷의 재정렬의 영향 TCP 재전송 시 자신의 패킷 크기를 변경 시키는 방법 2018년 12월 7일 오후 7시 8분 13 / 38
14
2. 간단한 타임아웃과 재전송 예제 14 / 38 재전송 1:1 환경에서의 재전송 1:N 환경에서의 재전송
net.ipv4.tcp_retries1(재전송 횟수) net.ipv4.tcp_retries2(재전송 종료 시간, RTO) 1:N 환경에서의 재전송 네트워크 링크에 장애로 인해 트래픽의 경로가 재설정 되면 RTT(Round Trip Time)를 수정해야 함. RTT는 RTO의 계산과정에 필요하기 때문에 RTO는 동적으로 변하게 됨 RTT = Round Trip Time RTO = Retransmission Time Out 2018년 12월 7일 오후 7시 8분 14 / 38
15
3. 재전송 타임아웃의 설정 15 / 38 RTT와 RTO의 관계 RTT샘플
패킷(Seq Number로 구분)을 전송하고 이 패킷에 대한 ack를 수신하는데 필요한 시간을 측정 하는 것 RTT 샘플을 모아 RTT 값의 범위를 결정하고 이를 기반으로 RTO를 설정함. 2018년 12월 7일 오후 7시 8분 15 / 38
16
3. 재전송 타임아웃의 설정 16 / 38 고전적인 RTT 추정 방법
스무드 RTT 추정기(SRTT, Smoothed RTT estimator) SRTT = a(SRTT) + (1 – a)RTTs 자신의 현재 값과 새로운 RTTs를 기반으로 갱신 됨. 상수 a는 0.8~0.9 사이의 비례인자 => static한 방법 RTO = min(ubound, max(Ibound, (SRTT)b)) Ubound = RTO의 상한(1분 정도) Ibound = RTO의 하한(1초 정도) B = 1.3 ~ 2.0 사이의 인자. 2018년 12월 7일 오후 7시 8분 16 / 38
17
3. 재전송 타임아웃의 설정 17 / 38 재전송 모호성 RTT 샘플 측정의 문제
패킷이 전송 -> 타임아웃 -> 패킷 재전송 -> 확인응답 수신 어떤 패킷의 ACK인가? 해결방법 타임스탬프 옵션을 사용 2018년 12월 7일 오후 7시 8분 17 / 38
18
3. 재전송 타임아웃의 설정 18 / 38 타임스탬프 옵션을 가진 RTT 측정
Linux와 Windows를 포함하는 대부분에서 사용하는 알고리즘. 타임스탬프 옵션(TSOPT)은 왕복시간 측정(RTTM, Round-Trip Time Measurement)을 위해 사용 됨. 2018년 12월 7일 오후 7시 8분 18 / 38
19
3. 재전송 타임아웃의 설정 알고리즘 설명 송신자는 전송할 세그먼트의 TSOPT 옵션을 설정하고 TSV에 32bit 타임스탬프 값을 설정. 세그먼트가 전송 될 때마다 TCP 시간 값을 포함하게 됨. Kind=1 kind=8 Len=10 Timestamp value Timestamp echo reply 32 bits Kind=0 2018년 12월 7일 오후 7시 8분 19 / 38
20
3. 재전송 타임아웃의 설정 알고리즘 설명 2. 수신기는 ACK 세그먼트의 TSER(TS Echo Reply)에 TSV값을 기록하여 전달 새로운 세그먼트가 LastACK 값과 일치하는 순서번호를 가진다면 TSV는 tsrecent에 저장 됨. 4. ACK를 수신한 송신기는 자신의 Time에서 TSER을 뺀 값을 RTT 추정을 위한 샘플 값으로 사용 함. 2018년 12월 7일 오후 7시 8분 20 / 38
21
3. 재전송 타임아웃의 설정 21 / 38 TSOPT를 사용한 예제 (순서에 벗어난 세그먼트의 처리)
S1 ( 1:1024) TSV : 1 Last ACK TsRecent 타임스탬프를 사용한 세그먼트 전송 A 1025 TSER : 1 S2 ( 1025:2048) TSV: 2 S3 (2049:3072) TSV : 3 A 3073 TSER: 2 2018년 12월 7일 오후 7시 8분 21 / 38
22
4. 타이머 기반 재전송 22 / 38 챕터목표 재전송 타임아웃(RTO)를 설정하여 패킷의 왕복 시간을 알아냈음.
이를 기반으로 어떻게 재전송 하는가? 2018년 12월 7일 오후 7시 8분 22 / 38
23
4. 타이머 기반 재전송 타이머 기반 재전송 TCP가 RTO 시간 까지 ACK를 수신하지 못하면 타이머 기반 재전송을 수행함. 타이머 기반 재전송은 데이터 전송률을 감소시킴. 혼잡 제어에 기반을 두고 자신의 송신 윈도우 크기를 감소 시킴 RTO에 적용되는 back off 인자의 증가(지수 배 back off) ACK 가 수신되면 지수는 1로 재설정 됨. 이 방법은 네트워크의 이용률을 감소 시키기 때문에 빠른 재전송이라는 다른 방법 또한 제공함. 2018년 12월 7일 오후 7시 8분 23 / 38
24
5. 빠른 재전송 24 / 38 기본 알고리즘 수신기로부터의 ACK에 기반을 두고 패킷을 재전송.
S1 ( 1:1024) TSV : 1 Last ACK TsRecent 타임스탬프를 사용한 세그먼트 전송 A 1025 TSER : 1 S2 ( 1025:2048) TSV: 2 S3 (2049:3072) TSV : 3 A 3073 TSER: 2 2018년 12월 7일 오후 7시 8분 24 / 38
25
5. 빠른 재전송 기본 알고리즘 중복 ACK가 임계값(dupthresh)에 도달하면 아직 받지 못한 세그먼트를 전송. S1 ( 1:1024) TSV : 1 Last ACK TsRecent 빠른 재전송(임계값 = 3) A 1025 TSER : 1 S2 ( 1025:2048) TSV: 2 S3 (2049:3072) TSV : 3 TSER: 1 S4 (3073:4096) TSV : 4 TSV: 5 A 4097 TSER: 5 2018년 12월 7일 오후 7시 8분 25 / 38
26
6. 선택 확인 응답을 가진 재전송 26 / 38 빠른 재전송의 문제점 수신기가 손실 세그먼트를 1개씩 밖에 알려주지 못함.
SACK 옵션을 사용하여 해결할 수 있음. SACK 옵션은 10byte ~ 40byte까지 사용 가능 SACK 옵션이 10byte일 경우 최대 4개의 블록에 대한 정보를 포함 할 수 있음 2018년 12월 7일 오후 7시 8분 26 / 38
27
6. 선택 확인 응답을 가진 재전송 27 / 38 수신기에서 SACK option의 동작 예
2018년 12월 7일 오후 7시 8분 27 / 38
28
6. 선택 확인 응답을 가진 재전송 28 / 38 송신기에서 SACK option의 동작
수신기로부터의 SACK 으로부터 hole을 채우기 위한 세그먼트를 추론하여 전송. 2018년 12월 7일 오후 7시 8분 28 / 38
29
6. 선택 확인 응답을 가진 재전송 29 / 38 Wireshark에서 SACK 옵션 허용
2018년 12월 7일 오후 7시 8분 29 / 38
30
7. 의사 타임아웃과 재전송 30 / 38 의사 재전송 데이터를 손실하지 않은 경우에도 재전송을 수행하는 것. 원인
의사 재전송 데이터를 손실하지 않은 경우에도 재전송을 수행하는 것. 원하지 않는 재전송 E.g. 너무 일찍 종료된 타임아웃 원인 의사 타임아웃 실제 RTT가 최근 RTO를 초과할 때 발생 패킷 재순서화(8절) ACK 손실 2018년 12월 7일 오후 7시 8분 30 / 38
31
7. 의사 타임아웃과 재전송 31 / 38 의사 타임아웃의 처리 검출 알고리즘과 응답 알고리즘 검출 알고리즘 응답 알고리즘
의사 타임아웃의 처리 검출 알고리즘과 응답 알고리즘 검출 알고리즘 의사 재전송의 검출 아이펠 검출 알고리즘 응답 알고리즘 의사 재전송이라고 간주되면 TCP에 의해 실행 되는 알고리즘 아이펠 응답 알고리즘 혼잡 제어(16장)에서 좀 더 자세히 다룸. 2018년 12월 7일 오후 7시 8분 31 / 38
32
7. 의사 타임아웃과 재전송 32 / 38 아이펠 검출 알고리즘 전송 시 TCP TSOPT 옵션을 사용함.
송신기에서 재전송이 실행 되면(타이머 기반 or 빠른 재전송) TSV 값이 저장됨. ACK를 수신하면 ACK의 TSER을 검사함. TSV < TSER 이라면 ACK는 재전송이 아니라 일반 전송에 해당 되고, 의사 재전송이라는 것을 의미함. 2018년 12월 7일 오후 7시 8분 32 / 38
33
8. 패킷 재순서화 33 / 38 패킷 재순서화 재전송을 유발하는 다른 Case. IP네트워크에서 발생함. 원인 결과
수신기에 도착한 패킷의 순서가 뒤바뀜. 재전송을 유발함. 2018년 12월 7일 오후 7시 8분 33 / 38
34
8. 패킷 재순서화 34 / 38 패킷 재순서화의 영향 재전송을 유발함. 1 가벼운 재순서화 A 1 2 3 4 5 6 7 8
심한 재순서화 A 1 2 3 4 5 6 7 8 A 2 A 3 A 7 9 4 ( 빠른 재전송 ) A 8 2018년 12월 7일 오후 7시 8분 34 / 38
35
8. 패킷 재순서화 35 / 38 해결방법 심각한 재순서화는 일반적이지 않으며, dupthresh를 설정하여 처리 가능.
2018년 12월 7일 오후 7시 8분 35 / 38
36
9. 재패킷화 36 / 38 재 패킷화 패킷 재전송 시 효율을 높이는 방법.
TCP가 타임아웃 되어 재전송 할 때 좀 더 큰 세그먼트를 전송 하는 것. 재 패킷화 된 세그먼트의 크기는 수신기로부터 통보된 MSS를 초과할 수 없음. 경로 MTU를 초과할 수 없음. 2018년 12월 7일 오후 7시 8분 36 / 38
37
10. 정리 37 / 38 타임아웃 발생과 재전송 전략 송신기가 패킷을 전송할 때 네트워크를 끄는 경우 재전송 모호성
타이머를 기반으로 재전송. 각 재전송은 2진 지수형 백 오프를 사용 재전송 모호성 타임스탬프 옵션을 사용하여 해결 빠른 재전송 타이머 종료 없이 ACK 개수를 이용하여 재전송. 선택 확인 응답 재전송 SACK 옵션을 사용하여 재전송 2018년 12월 7일 오후 7시 8분 37 / 38
38
10. 정리 38 / 38 RTT 추정 재전송 타임아웃 값을 계산하는데 사용 됨. 의사 재전송
RTT 추정 값이 실제 RTT 보다 작을 때 발생 의자 재전송 탐지 알고리즘 아이펠 검출 알고리즘 의사 재전송 처리 알고리즘 아이펠 응답 알고리즘 2018년 12월 7일 오후 7시 8분 38 / 38
39
Qna
Similar presentations