일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- react-cookie
- 협업필터링
- 프라미스
- 파인만의 식당문제
- 자바스크립트 비동기
- rust
- 러스트
- 페이지랭크
- 커널제거
- 파이썬
- tcp
- Hits
- 키분배 알고리즘
- 메세지인증코드
- 딥러닝
- 비동기 프로그래밍
- computer vision
- feynman's restaurant
- 인공지능
- Git
- 인페인팅
- Readme image
- image restoration
- cs231n
- pagerank
- 머신러닝
- brew 권한
- 컴퓨터 보안 키분배
- 커널생성
- recommender
- Today
- Total
목록tcp (2)
Worth spreading
TCP 는 Rwnd를 이용한 flow control을 제공한다. 그런데 이것에는 한가지 결함이 있다. 수신자는 데이터를 수신했을 때 보내는 ACK 신호의 data segment에 rwnd 값을 담아서 송신자에게 보낸다. Rcv window가 꽉 차서 수신자가 rwnd를 0으로 표기해서 보내면 송신자는 rwnd에 여유가 생겼다는 신호를 받을 때까지 데이터를 전송하지 않는다. 그런데 만약 수신자가 더이상 보낼 ACK가 없다면 송신자와 수신자는 모두 하염없이 기다리는 상황이 된다.이러한 문제를 방지하기 위해 송신자는 rwnd = 0 라는 신호를 받게 되면 rwnd가 0이 아닌 값이라는 ACK를 받을 때까지 1byte의 데이터를 수신자에게 계속 보낸다.
code : Event : ACK received, with ACK field value of y if (y > SendBase) { SendBase = y If (there are currently any not yet acknowledged segments) Start timer } else { /*a duplicate ACK for already ACKed segment */ increment number of duplicate ACKs received for y if (number of duplicate ACKs received for y == 3) /* TCP fast retransmit */ resend segment with sequence number y } break; - 송신자가 수신자..