Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 대구동성로맛집
- 마켓컬리 추천
- 황리단길디저트
- 교촌치킨 신메뉴
- 순천디저트
- 냉동만두 추천
- 황리단길기념품
- 서현역중식
- 편의점 추천
- 서현역맛집
- 오뚜기 라면
- BBQ 신메뉴
- CU편의점
- 용인맛집
- 서현 맛집
- 수원 맛집
- 동성로맛집
- CU 편의점 추천
- 편스토랑
- 수지 술집
- 분당맛집
- 순천맛집
- CU편의점 추천
- 황리단길맛집
- 치킨 신메뉴
- 분당 맛집
- 푸라닭
- 경주맛집
- 편의점 신제품
- cu 편의점
Archives
- Today
- Total
일상 메모장
TCP timers (Persistent, Keep alive, Time wait) 본문
Persistent timer
- Persistent timer는 Receive window size 가 0일때 데드락을 방지하기 위한 timer 입니다.
- 수신자는 자신의 receive window size를 ACK와 함께 전송하는데, 만약 수신자의 receive window 사이즈가
0라면 송신자는 persistent timer가 동작하게 됩니다.
(예를들어 수신자의 user land에서 recv()함수를 호출하지 않게되면 어느순간 receive window 사이즈가 꽉차서
0가 될것입니다.) - Persistent timer가 expire되면 송신자는 probe라고 부르는 특별한 세그먼트를 수신자에게 보냅니다.
이 세그먼트에는 1바이트의 새로운 데이터만 포함되어 있는데, 주기적으로 persistent timer에 의해서
probe 세그먼트를 보내고 이에대한 수신자의 ACK로 receive window size를 체크합니다. - 수신자는 probe 세그먼트를 받으면 자신의 receive window size를 ACK와 함께 보내는데, 주기적으로 persistent timer에 의해서 전송된 probe 세그먼트에 수신자는 계속 0을 반환하다가 receive window size에 여유가 생기게 됨을 확인하면, 다시 송신자는 데이터 전송을 재개하게 됩니다.
Keep Alive timer
- 이미 connection 된 상태에서 두 연결간의 오랜기간동안 휴지상태에(Long Idle time) 있지 않기위해 사용한다.
- 만약 TCP 연결이 되고, 데이터를 정상적으로 주고받다가 어느순간 client가 정상적인 종료를 하지않고 Crash 나게 되면, server는 이 연결이 비정상 종료된지 모르고 계속해서 connection을 유지할것입니다.
이런 상황을 방지하기 위해서 keep alive timer를 사용합니다. - 서버가 클라이언트로 부터 어떠한 데이터를 받을때마다 이 타이머는 초기화 됩니다. 일반적으로 linux 에서는 이 time out 시간이 2시간인데, 2시간동안 클라이언트로부터 어떠한 데이터도 받지 못하면 Probe 세그먼트를 전송합니다.
- 각 probe 세그먼트가 75초 간격으로 10개를 보내는데 이에대한 응답이 없으면, client가 종료된것으로 가정하고
연결을 종료합니다.
Time wait timer
- 이 타이머는 TCP 연결 종료중에 사용됩니다. 먼저 연결을 종료한(FIN을 먼저 보낸)쪽에 이 타이머가 생기는데, Timer는 두번째 FIN에 대한 마지막 ACK를 전송하고, 연결을 종료한후 TIME_WAIT상태에서
TIME_WAIT Timer가 시작됩니다. (아래 그림 참조) - TCP 연결이 종료된 후에도 아직 전송중인 데이터가 도착할수도 있는데, 중복(Retransmission) 또는 지연된 패킷을 폐기하기 위해 사용합니다.
- 이 Timer의 기간은 2 * MSL기간동안 유지되는데, MSL 이란 Max Segment Lifetime이라고 해서 세그먼트가 최대로 네트워크상에 돌아다닐수 있는 시간입니다. 1MSL은 리눅스 상에서 최대 1분으로 2*MSL이기 때문에 최대 2분동안
TIME_WAIT상태에로 대기하고 Close하게 됩니다
오늘 포스팅은 여기까지 하겠습니다. 읽어주셔서 감사합니다~
'Kernel TCP IP' 카테고리의 다른 글
TCP header (+ TCP 옵션) (0) | 2019.12.31 |
---|---|
sk_buff 에서 Mac header, IP v4 and v6 header, TCP header 파싱 (0) | 2019.12.28 |
TCP timer (Retransmission timer) (0) | 2019.12.26 |
TCP sliding window 개념 (0) | 2019.12.21 |
struct sk_buff 관련 함수 (1) | 2019.12.20 |