运输层
两个协议:
用户数据报协议UDP——不可靠信道,传输单元:UDP用户数据报
传输控制协议TCP——全双工可靠信道,传输单元:TCP报文段
用户数据报协议UDP
- 无连接,不适用套接字
- 没有拥塞控制
- 计算检验和时在UDP数据报前增加12个字节的伪首部,把首部和数据部分一起检验
首部
- 源端口
- 目的端口
- 长度
- 检验和(都是2字节)
传输控制协议TCP
-
面向字节流——TCP仅把应用程序交下来的数据看作一连串无结构的字节流,但不知道含义
-
全双工
-
TCP连接:两个进程建立连接,是虚连接(逻辑连接)
套接字(插口)——(IP地址:端口号) IP地址拼接上端口号
TCP连接::={(IP1: port1), (IP2 : port2)}
-
TCP连接的建立采用客户服务器方式
-
TCP捎带确认 piggybacking(报文中的ACK)
硬件端口——不同硬件设备交互的接口
软件端口——应用层各种协议进程与运输实体进行层间交互的一种地址
TCP的MSS——最大报文段长度
指每一个TCP报文段中数据字段的最大长度,≠整个TCP报文段的最大长度
- 若未填入首部的【选项】字段,则MSS为默认值536字节
- 因此所有主机都能接收556字节的报文段长度
停止等待协议
连续ARQ协议
位于发送窗口内的5个分组都可以连续发送出去,不需要等待确认。接收方累积确认,对按序到达的最后一个分组发送确认——表示到这个分组为止的所有分组都已正确收到。
- 丢失也不必重传
- 无法反映意见正确收到的所有分组信息
- 允许接收的缓冲区为1
可靠传输的实现
滑动窗口以字节为单位(不是报文段)
发送方可以根据网络的拥塞情况适当减小发送窗口数值
选择确认SACK
收下不连续的字节块,但要把接收信息准确告诉发送方以免重复发送
eg:收到了15013000和35014500,用指针标记边界:L1=1501,R1=3001,L2=3501,R2=4501
- 需要在TCP首部加上允许SACK选项
TCP的拥塞控制
拥塞窗口cwnd使用报文段的个数为单位
慢开始门限ssthresh
-
慢开始——刚开始发送数据时,发送方的拥塞窗口cwnd数值由小逐渐增大。每经过一个传输轮次,拥塞窗口就加倍。
作用是:因为并不清楚网络的负荷情况,因此先用慢开始探测一下,避免拥塞。
-
拥塞避免——当拥塞窗口cwnd达到了慢开始门限ssthresh时,停用慢开始算法采用拥塞避免算法。在拥塞避免阶段cwnd线性规律缓慢增长。
作用是:当网络负荷达到一定程度时,将cwnd控制为线性规律增长,是网络比较不容易出现拥塞。
-
快重传——发送方一连收到3个重复确认,立即快重传
接收方在接收到数据后立即发送确认,收到失序报文段时也要对已收到的报文段重复确认。发送方只要一连收到3个重复确认,就知道接收方确实没有收到这个报文段,应当立即重传。
作用是:让发送方尽早知道个别报文段的丢失,而不是出现了网络拥塞,这样就不用错误地启动慢开始,从而提高了传输效率。
-
快恢复——送方知道丢失了个别报文段后执行快恢复算法。将ssthresh调整为cwnd的1/2,cwnd=ssthresh,并开始执行拥塞避免算法。
作用是:只是丢失了个别报文段就没必要启动慢开始,提高了传输效率。