TCP详解
TCP
概述
-
点对点:一个发送方,一个接收方
-
可靠的、按序的字节流
-
流水线机制:TCP拥有拥塞控制和流量控制机制设置窗口尺寸
-
发送方\接收方缓存
-
全双工:同一连接中能够传输双向数据流
-
面向连接
- 通信双方发送数据之前必须建立连接
- 连接转态旨在连接的两端中维护,在沿途结点中并不维护状态
- TCP连接包括:两台主机上的缓存、连接状态变量、Socket
-
流量控制机制
TCP段结构
-
序列号
- 序列号是指Segment中第一个字节的编号 ,而不是segment的编号
- 建立TCP连接时,双方随机选择序列号·
-
ACKs
- 希望接收到的下一个字节的序列号
- 累计确认:该序列号之前的所有字节均已被正确接收到
-
Q:接收方如何处理乱序的Segment
- TCP规范中没有规定,由TCP实现者做出决策
定时器超时时间
- 通过RTT均值:测量从段发出去,到收到ACK的时间(SampleRTT),通过指数加权移动平均测得均值(EstimatedRTT)
- 定时器超时时间的设置:均值RTT(EstimatedRTT)+ 安全边界。变化大需要较大的边界
- 测量RTT的变化值:SRTT和ErTT的加权差值(DevRTT)
- 超时时间:TimeOut = ERTT + 4*DevRTT
- 大于RTT、不能过短-不必要的重传,不能过长-对段丢失时间反应慢
快速重传机制
-
TCP的实现中,如果超时,超时时间间隔将加倍,导致重发丢失分组之前要等待很长时间
-
解决:快速重传
- 如果某个分组丢失,会引发多个重复的ACK
- 如果sender收到对同一数据的3个ACK,则假定该数据之后·的段已经丢失。
- 快速重传:在定时器超时之前即进行重传
TCP连接管理
拥塞控制原理
-
拥塞表现
- 分组丢失(路由器缓存溢出)
- 分组延迟过大*(在路由器缓存中排队)
-
拥塞控制的方法
-
端到端拥塞控制
- 网络层不需要显式的提供支持
- 端到端通过是否丢失和超时等网络行为判断是否拥塞
- TCP采取这种方法
-
网络辅助的拥塞控制
- 路由器向发送方显式地反馈网络拥塞信息
- 简单的拥塞指示(1bit):SNA、DECbit、TCP/IP ECN 、ATM
- 指示发送方应该才去何种速率
-
-
TCP拥塞控制的基本原理
-
如何合理地调整发送速率?
-
Loss事件的处理
-
3个重复的ACKs:
- ConWin切到一半--乘性减 - 然后线性增长
-
TimeOut事件:
- ConWin直接设为1个MSS
- 然后指数增长
- 达到threshold后,再线性增长
-
-
为什么Loss事件对这两种处理方式不同?
原因: