文章目录
-
- 一. TCP传输
-
- 1 TCP报文段结构
- 2 TCP可靠数据传输
- 3 TCP流量控制
- 4 TCP连接管理:3次握手和四次挥手
- 二. 拥塞控制原理
-
- 1. 拥塞的成因和代价
- 2. 拥塞控制方法
- 三. TCP拥塞控制
-
- 1. 拥塞控制的基本原理
- 2. TCP拥塞控制算法
一. TCP传输
TCP连接提供的服务是全双工服务,同一连接能够双向传输数据,同时,也是点对点的连接(仅有一个发送方和一个接收方)。
1 TCP报文段结构
TCP报文段由首部字段和数据字段组成。
- 首部字段
源端口号和目的端口号:用于多路分用和多路复用
因特网检验和:差错检验
序号和确认号(32比特):用于实现可靠数据传输服务
接收窗口字段(16bite):用于流量控制,该字段指示接收方愿意接收的字节数量。
首部长度字段(4bit):典型长度20bit
可选与变长的选项字段:用于双方协商最大报文长度、或在高速网络环境下用于窗口调节因子。
标志字段(6bit):ACK用于确认字段是否有效、RST、SYN、FIN用于连接的建立和拆除
2. 序号和确认号
序列号指的是segment中
第一个字节的编号
,而不是segment的编号
ACKs:希望接收到的下一个字节的序列号
telnet示例:
2 TCP可靠数据传输
TCP在IP层提供的不可靠服务基础上实现可靠数据传输服务。使用了流水线机制、累积确认机制、使用单一的重传定时器。采用重传来处理丢包,触发重传的时间包括定时器超时和收到重复ACK。
-
定时器超时时间设置与往返时间(RTT)的估计
定时器的超时时间是肯定要大于RTT的.
RTT的估计方式
为:测量从段发出去到收到ACK的时间(称为SampleRTT,
忽略重传),测量多个SampleRTT,求平均值,形成RTT的估计值EstimatedRTT
-
发送方处理事件
为了实现可靠性数据传输,发送方需要进行一些事件处理。
- 从应用层收到数据: 创建Segment、序列号是Segment第一个字节的编号、 开启计时器、设置超时时间TimeOutInterval
- 超时:重传引起超时的Segment、重启定时器
- 收到ACK:如果确认此前未确认的Segment, 则更新SendBase,如果更新后,窗口中还有未被确认的分组,重新启动定时器(这里采用的是单一重传)。
- 接收方处理
-
快速重传机制
收到3个冗余的ACK,则进行快速重传。
3 TCP流量控制
TCP为应用程序提供了流量控制服务,以消除发送方使接收方缓存溢出的可能性。流量控制实际上是一个速度匹配服务
4 TCP连接管理:3次握手和四次挥手
强烈推荐:TCP的三次握手与四次挥手(详解+动图)
- 建立连接:三次握手
- 关闭连接
二. 拥塞控制原理
拥塞(Congestion)非正式定义:“太多发送主机发送了太多数据或者发送速度太快,以至于网络无法处理”
表现: 分组丢失(路由器缓存溢出)、 分组延迟过大(在路由器缓存中排队)
1. 拥塞的成因和代价
- 情况1:两个发送方和一台具有无穷大缓存的路由器
- 情况2:两个发送方和一台具有有限缓存的路由器
2. 拥塞控制方法
-
网络辅助的拥塞控制
路由器向发送方显式地反馈网络拥塞信息 ,简单的拥塞指示(1bit):SNA, DECbit, TCP/IP ECN, ATM) ,指示发送方应该采取何种速率。
-
端到端的拥塞控制 (TCP)
网络层不需要显式的提供支持,端系统通过观察loss,delay等网络行为判断是否发生拥塞。 TCP采取这种方法。
三. TCP拥塞控制
TCP必须通过端到端的控制方法解决拥塞控制,因为IP层不会向端系统提供有关网络拥塞的反馈信息。
1. 拥塞控制的基本原理
首先是如何
限制TCP发送方向连接发送的流量速率,主要采取的方式是控制拥塞窗口cwnd的大小
。
其次是如何使发送方感知网络拥塞:丢包时间则意味着拥塞
最后是如何合理的调整发送速率,主要采用的是TCP拥塞控制算法
2. TCP拥塞控制算法
- 加性增-乘性减算法:AIMD
- 慢启动:SS
- 拥塞避免