Skip to content

Instantly share code, notes, and snippets.

@axionl
Last active July 25, 2018 07:27
Show Gist options
  • Save axionl/adbef28a17587d381b03d4dc7bc77cf0 to your computer and use it in GitHub Desktop.
Save axionl/adbef28a17587d381b03d4dc7bc77cf0 to your computer and use it in GitHub Desktop.
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;
NextSeqNum = InitialSeqNumber
SendBase = InitialSeqNumber
loop (forever) {
switch(evnet)
event: data received from application above
// create TCP segment with sequence number NextSeqNum
if (timer currently not running)
start timer
// pass segment to IP
NextSeqNum = NextSeqNum + length(data)
break;
event: timer timeout
// retransmit not-yet-acknowledged segment with smallest sequence number
start timer
break;
event: ACK received, with ACK field value of y
if (y > SendBase) {
SendBase = y
if (there are currently any not-yet-acknowledged segment)
start timer
}
break;
}
@axionl
Copy link
Author

axionl commented Jul 25, 2018

事件 TCP 接收方动作
具有所期望序号的按序报文段到达。 所有在期望序号及以前的数据都已经被确认。 延迟的 ACK,对另一个按序报文段的到达最多等待 500ms。 如果下一个按序报文段在这个时间间隔内没有到达,则发送一个 ACK
具有所期望序号的按序报文段到达。 另一个按序报文段等待 ACK 传输。 立即发从单个累积 ACK, 指示下一个期待字节的序号(其为间隔的低端序号)
比期望序号大的失序报文段到达。 检测出间隔。 立即发送冗余 ACK,指示下一个期待字节的序号 (其为间隔的低端序号)
能部分或完全填充接受数据间隔的报文段到达 倘若该报文段起始于间隔的低端,则立即发送 ACK

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment