计算机网络原理 笔记 3
网络原理 运输层
无连接运输:UDP
优势:
- 关于发送什么数据以及何时发送的应用层控制更加精细
- 无需建立连接(无需握手)
- 无连接状态
- 报文段首部短
报文段
检验和
发送方将所有比特字段求和并取反码,得到检验和,接收方将所有比特字段(包括检验和)进行求和,如果结果不是全则有错,只能检验不能恢复
可靠数据传输
下层协议可能不可靠
(ARQ) 功能:
- 差错检测
- 接收方反馈
- 重传
在上一组数据传完并得到ACK相应之前不会有下一组数据,也即上层协议的send不会被调用,称为停等协议
考虑处理ACK/NAK受损的问题:
在中,可以看出在接收到ACK的时候会判断其数字是否与当前状态相同,如果不相同则视作NAK
为了处理丢包,在发送发建立一个定时器,使得其能够在一定时间未接收到ACK之后默认为丢包,重发分组并且重置定时器
流水线
减少停等带来的传输利用率低下(传播时延远远大于传输时延)
- 增加序号
- 双方缓存多个分组
- 差错恢复:回退N步与选择重传
回退N步
当base得到确认之后窗口开始滑动,具体的FSM如下:
超时的时候,重传所有已发送但是未被确认的分组,同时接收方会丢弃所有失序的分组
选择重传
窗口长度必须不大于分组序号空间大小的一半,反之无法正常工作,接收方会出现无法分辨重传与新分组的现象
接收方收到自身的滑动窗口之前的分组时仍要发送ACK,否则发送方无法知道已被接收,窗口不能滑动
可靠数据传输总结
TCP
连接
- 全双工服务:双向传输
- 点对点:一对一传输
传输路径:进程 -> 套接字 -> 发送缓存 -> 网络层 -> 接收缓存 -> 套接字 -> 进程
典型的MSS的值为字节
报文
- 接收窗口字段:用于流量控制,指示接收方愿意接受的字节数量
- 选项字段:协商MSS,或在高速网络下作为窗口调解因子
- 标志字段:
- ACK:确认接收
- RST, SYN, FIN:用于建立和拆除连接
- PSH:指示接收方立即上传数据
- URG:指示紧急数据
序号和确认号
一个报文段的序号是指该报文段首字节的字节流编号,TCP将数据看成有序字节流,对每一个字节分别标号
确认号指的是期待收到的最小字节标号,例如发送方已经收到和,则确认号为
往返时间与超时
时限必须要大于RTT
- SampleRTT:报文段从发出到接被确认接收所需要的时间,在任意时刻仅测量一个报文段的SampleRTT而不是计算所有待确认的报文段,得到结果后加权更新,同时计算RTT偏差:
- 时限应当确定为:
- 在真实处理中,有一种技术是在每次超时之后将时限翻倍
可靠数据传输
冗余ACK:用于指示报文丢失,当重复收到一个报文段的次冗余ACK,之后,立即重传其下一个报文
流量控制
使得发送速率与接收方的读取速率相匹配,通过发送发来维护接收窗口实现,指示接收方剩余的缓存空间
发送方保证发送到连接中但是未被确认的数据量小于rwnd即可
特例:当缓存已经满了的时候发送仅含一字节数据的报文段,此时接收方开始清空缓存,并在确认报文里发送新rwnd
三次握手
- 客户向服务器发送一个SYN为的报文段,随机选择一个初始序号,请求连接
- 服务器接收,分配缓存与变量,选择初始序号,返回SYNACK报文段表示允许连接
- 客户端接收,分配缓存与变量,连接建立
关闭过程:
- 客户端发送FIN置的报文段表示关闭请求,并接收ACK,清理变量和缓存
- 服务端发送FIN置的报文段表示关闭请求,并接收ACK,清理变量和缓存
拥塞控制
原因
- 理想路由器,分组的到达速率接近链路容量时,排队时间趋近于无穷大
- 有缓存的路由器,发送方因为大时延进行不必要重传占据链路带宽
- 上游路由器发送的分组最终被丢弃,这样发送它所占用的资源就被浪费了
控制方法
- 端到端:网络层不反馈,全部依靠运输层
- 网络辅助:网络层会反馈一些信息
TCP拥塞控制
发送方维护一个拥塞窗口cwnd,满足
发送速率为
发送方判定丢包为超时或三个冗余ACK
TCP为自计时的
TCP拥塞控制算法
慢启动:
cwnd初始值被确定为一个MSS,传输的报文段被首次确认的时候增加一个MSS,因此整体呈现几何级数增长的形式,同时在发送方维护ssthresh(慢启动阈值),结束增长有如下情况:
- 超时丢包:重新初始化并慢启动,令
- :进入拥塞避免
- 个冗余ACK:快速重传,进入快速恢复
拥塞避免
每个RTT只增加一个MSS而不是翻倍,例如每个ACK增加,结束控制如下:
- 超时丢包:同慢启动
- 个冗余:快速重传,令
快速恢复
每个冗余ACK增加一个MSS,结束控制:
- 超时丢包:同慢启动
回顾
整体拥塞控制方法成为加性增,乘性减
另一种拥塞控制方法为基于延迟,即实时检测吞吐量,并于最大吞吐量进行比较,并且线性增减去趋近最大吞吐量
宏观吞吐量
以代表窗口长度,则
高带宽TCP
设为丢包率,则
这代表高吞吐率需要非常低的丢包率来支持
TCP公平性
公平性代表瓶颈链路分配给每条链路的资源应该是相近的
TCP趋近于多条链路之间平等分享,但是在实际应用中,RTT较小的通常吞吐量更大
公平与UDP
UDP无拥塞控制,并且可能会抑制TCP
公平与并行TCP
一个应用使用多条TCP并行会导致占用过多资源,但是资源的公平应该是在应用层面上的
明确拥塞公告
网络层辅助的拥塞控制机制
IP协议的首部中有两个比特被用于标记ECN,当接收方收到ECN时则在回复的ACK中设置ECE,发送发收到之后进行窗口减半处理(和超时丢包相同),并在下一个报文段首部标记CWR字段(拥塞窗口缩减)