传输层:TCP协议

我必须吐槽一下TCP的内容挺多的,我果然太菜还小看了~~

UDP报文段结构

源地址 目的地址
长度 检验和
应用数据

TCP报文段结构

源端口地址 目的端口地址
序号
ACK
首部长度(4bit)保留未用(4bit)... 接收窗口
校验和 紧急数据指针
选项
数据

TCP基础——reliable data transfer protocal

  1. 发送方pkt[i] 接收方ACK[i]
    发送方Seq=m,size=a;
    接收方ack=m+a,seq=y;
    发送方seq=y+1,ack=m+a
  2. pipeline_rdt:improve transfer utilization,传送分组用时/(传送分组用时+传播用时)
  3. 回退N步:发送报文丢失后,接受窗口接收到下一个报文直接丢弃
  4. 选择重传:丢失后,接收窗口接收到下一个发送报文,缓存,直到接收到丢失报文,一起返回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,
  • 拥塞避免(慢启动cwnd=ssthresh时进入,*2超过ssthresh时更正为ssthresh):cwnd每个传输round+MSS;
  1. 超时导致的丢包,表明接收方返回的也被阻塞了,ssthresh=cwnd/2,cwnd=1
  2. 冗余ACK导致的丢包,温和,ssthresh=cwnd/2,cwnd=ssthresh
  • 快速恢复(冗余ACK引起的拥塞避免下一状态):对引起TCP进入快速恢复的每个ACK,cwnd+=MSS;当重传、丢失报文ACK到达后,降低cwnd??后进入拥塞避免
  • TCP Reno:冗余ACK引起的cwnd=cwnd/2+3;W

补充

  • 平均吞吐量=0.75W(发生丢包事件的cwnd)/RTT
  • 丢包率=1/(3/8W2+3/4W),平均速率=1.22MSS/(RTT*(L)(0.5))
  • 网络辅助拥塞控制:路由器阻塞——IP报首部中ECN比特到接收方——接收方在ACK报文用ECE比特(ECN Echo)通知发送方,做出何种反应呢?
posted @ 2022-10-02 20:29  clfire  阅读(53)  评论(0编辑  收藏  举报