我必须吐槽一下TCP的内容挺多的,我果然太菜还小看了~~
UDP报文段结构
源地址 | 目的地址 |
---|---|
长度 | 检验和 |
应用数据 |
TCP报文段结构
源端口地址 | 目的端口地址 |
---|---|
序号 | |
ACK | |
首部长度(4bit)保留未用(4bit)... | 接收窗口 |
校验和 | 紧急数据指针 |
选项 | |
数据 |
TCP基础——reliable data transfer protocal
- 发送方pkt[i] 接收方ACK[i]
发送方Seq=m,size=a;
接收方ack=m+a,seq=y;
发送方seq=y+1,ack=m+a - pipeline_rdt:improve transfer utilization,传送分组用时/(传送分组用时+传播用时)
- 回退N步:发送报文丢失后,接受窗口接收到下一个报文直接丢弃
- 选择重传:丢失后,接收窗口接收到下一个发送报文,缓存,直到接收到丢失报文,一起返回ACK
TCP实现可靠连接传送的特点:
1. TCP往返时间的估计与超时
EstimateRTT=(1-x)EstimateRTT+x|SampleRTT-EstimateRTT|
DevRTT=(1-x)DevRTT+x|SampleRTT-EstimateRTT|
至于超时重传间隔,TimeoutInterval=EstimateRTT+4*DevRTT
2. 关于超时
- 超时间隔还未接收到ACK,重新发送,ACK更新为想获得的下一个地址
- 未收到ACK,超时间隔=2;直到收到确认报文,TimeoutInterval=EstimateRTT+4DevRTT**
- 冗余ACK的产生:发送报文pkt(i)丢失,接收方接收到pkt(i+1)及以后,但发送方不接受否定确认,故接收方只能返回最后一个按序字节数的确认pkt(i),发送方接收到3个这样的ACK后,
- 快速重传:意识到报文丢失,不必等到超时间隔,加速丢失报文的重传。
3. 流量控制
- 在接收方设置一个rwnd,发送方根据接受窗口的大小调整发送数据
- when rwnd=0,发送方不知道什么时候接收方清除缓存,elevate rwnd;
- 发送方仍向接收方发出一个只有一个字节数据的报文段,接收方清空缓存时确认该报文,并返回rwnd
- UDP没有流量控制
SYN:表示连接请求/接受报文
FIN:传输完毕,释放连接,四次挥手第3
拥塞控制
慢启动:cwnd=1,cwnd*=2;
拥塞避免:超时导致的丢包,表明