运输层协议全面总结
文章目录
运输层协议全面总结
- 网络层为主机间提供逻辑通信, 而运输层为应用进程间提供端到端的通信逻辑.
- 网络层提供IP数据报首部中的检验和字段, 只检验首部是否出现差错; 而运输层要检验收到的报文是否有差错.
![]()
1. 运输层的两个重要协议
- 用户数据报协议
UDP
(User Datagram Protocol
) - 传输控制协议
TCP
(Transmission Controll Protocol
)
2. 运输层端口号
- 作用: 把所传送的报文交到目的主机的某个合适的端口, 剩下的工作有TCP或UDP完成
- 此层为软件端口: 在协议层间的抽象的协议端口, 是应用层的各种协议进程与运输实体进行层间交互的一种地址, 和硬件端口不是一个概念.
- 三类端口号: 系统端口号(0~1023); 登记端口号(1024~49151); 客户端端口号(49152~65535);
3. UDP用户数据报协议
UDP仅仅是在IP数据报服务之上增加了复用, 分用以及差错检测功能.
3.1 UDP特点
-
无连接
: 发送数据之前不需要连接. -
尽最大努力交付
: 不保证可靠交付. -
面向报文
: 对应用层下发的报文, 添加d首部后就下发到IP层, 对下发的报文不合并也不c拆分, 仅仅保留报文的边界. 一次交付一个报文. -
无拥塞控制
: 发送后就不在管理. -
多种通信
: 支持一对一, 一对多, 多对多通信. -
首部开销小
: 首部仅有8个字节.
3.2 UDP首部格式
首部只有8个字节
-
源端口
: 需要对方回信时选用, 不选可全为0. -
目的端口
: 在终点交付报文时使用. -
长度
: UDP用户数据报的长度. -
检验和
: 检验UDP在传输中是否有错.
3.3 UDP检验和
- 要在UDP用户数据报之前增加12个字节的伪首部, 在计算检验和时, 临时增加在UDP前面. 伪首部既不下传, 也不上交.
- UDP检验和是把首部和数据部分一起检验. 使用多个16位字的二进制反码处理, 无差错时结果全为1. 和IP的检验和不同.
4. TCP传输控制协议
4.1 TCP特点
-
面向连接的运输层协议
: 使用TCP前, 必须建立TCP连接. -
点对点通信
: 每条TCP协议只能有两个端点. -
可靠服务
: 通过TCP连接的数据, 无差错,不丢失, 不重复, 并且按序到达. -
全双工通信
: 允许双方的进程在TCP连接后任何时候发送数据, TCP连接的两端都有发送缓存和接收缓存, 来临时存放双向通信的数据. -
面向字节流
:流stream
指从进程进出的字节序列.
4.2 TCP连接
4.2.1 TCP和套接字
-
TCP
把连接
作为最基本的抽象
. - TCP的端点叫做套接字(socket 端口号拼接到IP地址)
- 套接字: socket -> 端口号拼接到IP地址即淀粉十进制的IP地址后写上端口号用冒号隔开. 如192.168.1.5: 80.
- 套接字 socket = (IP地址: 端口号)
- TCP连接 ::= {socket1, socket2} = {(IP1: port1), (IP2: port2)}
4.3 可靠传输原理
TCP发送的报文段是交给IP层的, 但是IP层只提供最大努力交互, 并不能保证可靠通信.TCP必须采取必要措施保证可靠通信.
4.3.1 停止等待协议
-
停止等待
: 就是每发送一个分组就停止发送, 等待对方确认, 在收到确认后, 接着发送下一个分组. -
无差错情况
: 一个发送完毕, 得到确认后发送另一个. -
出现差错
: 接收方接收到分组M时,检出了差错丢弃了, 或者分组M在传输时丢失了, 接收方不会发出任何信息. 此时发送方就不触发超时重传(每发送一个分组就会设置一个超时定时器, 接收确认后撤销). -
确认丢失
: 接收方此次发出的确认没有送达到发送方, 发送方进行了超时重传, 接收方会确认丢失重传进来的分组M, 再次发出确认后接收方收到了. -
确认迟到
: 接收方此次发出的确认没有及时送达发送方, 发送方进行了超时重传, 接收方确认丢失重传进来的分组M, 再次发出确认后接收方接收到本次确认, 过一会才收到上一次的确认. -
信道复用率
: 停止等待协议信道复用率差. 采用流水线传输
4.3.2 连续ARQ协议
-
含义
: 位于发送窗口内的5个分组都可以连续发送出去, 不需要等待对方的确认. 接收方采用累积确认的方式. -
缺点
: 不能向发送方反映出接收方已经正确收到的所有分组的信息.
4.4 TCP报文段的首部格式
TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段.
TCP报文段首部前20个字节是固定的, 后4n个字节是不定的
-
源端口和目的端口
: 各占两个字节. -
序号
: 占4个字节, 在一个TCP连接中传送的字节流中的每一个字节都按顺序编号. 整个要传输的字节流的起始序号必须在连接建立时设置. -
确认号
: 占4个字节, 期望收到对方下一个报文段的第一个数据字节的序号. -
数据偏移
: 占4位
, TCP报文段的数据起始处距离TCP报文段的起始处有多远. -
保留
: 占6位
-
紧急URG
: URG = 1时, 紧急指针字段有效, 优先发送, 比如终止指令. -
确认ACK
: 当ACK = 1时, 才有效. TCP规定, 建立连接后所有传达的报文段ACK必须置为1. -
推送PSH
: 推送触发是PSH = 1, 会尽快推送到对方去交互. -
复位RST
: 当RST = 1, 表名TCP连接过程出现了严重错误, 需要释放连接重新建立. -
同步SYN
: 在建立连接时同步序号. 当SYN = 1, 而ACK = 0时, 表明是一个连接请求报文. 如果对方同意建立连接, 则应在相应的报文段中使用SYN = 1和ACK = 1. -
终止FIN
: 当FIN = 1, 表示报文发送完毕, 可以释放连接. -
窗口
: 占2字节, 发送报文一方的接收窗口. 窗口值得意义: .作为接收方让发送方设置其发送窗口的依据. 窗口字段明确指出了现在允许对方发送的数据量. 窗口值是动态变化的. 因为接收方的数据缓存空间是有限的. -
校验和
: 占2字节, 检验范围包括首部和数据这两部分. 和UDP的检验和类似. -
紧急指针
: 占2字节, URG = 1才有意义. -
选项
: 长度可变, 最长40字节. 无使用选项时, TCP首部为定长20字节. -
MSS
: 最大报文段长度. -
窗口扩大选项
: 占3个字节, 在双方建立TCP连接时进行协商. -
时间戳选项
: 占10字节, 主要字段是发送方时间戳值
占4字节和接收方时间戳送回答
字段占4字节. 作用1: 计算来往事件RTT; 作用2: 处理高速网络下, TCP序号超过2^32的情况(防止序号绕回PAWS). -
选择确认(SACK)选项
: 后面详细介绍.
5. TCP可靠传输的实现
5.1 以字节为单位的滑动窗口
-
发送窗口
: 凡是已发送的数据, 在未收到确认之前都是必须暂时保存的, 以便在超时重传时使用. -
发送窗口的***
: 表示允许发送的序号. 接收方会发自己的接收窗口数值放在窗口的字段中发送给对方. -
发送窗口后沿
: 后面部分表示已经发送且收到确认消息的部分. -
发送窗口前言
: 前面部分表示暂不允许发送的部分. -
发送缓存
: 暂时存放 1) 发送方应用程序传递给发送方TCP准备发送的数据; 2) TCP已发送但尚未收到确认的数据.发送窗口只是发送缓存的一部分
-
接收缓存
: 暂时存放 1) 按序到达但为被接收应用程序读取的数据; 2) 未按序到达的数据.
注意点
:
- 同一时刻发送方的发送窗口和接收方的接收窗口并不总是一样大, 受网络环境的影响.
- TCP通常对不按序到达的数据先临时缓存在接收窗口, 等待字节流中所缺失的字节收到后再按序交付到应用层.
- TCP要求接收方必须有累积确认的功能, 在合适的时候发送确认.
5.2 超时重传的时间选择
重传时间的选择是TCP最复杂的问题之一, 受网络环境影响大.
-
加权平均往返时间RTTs
: 平滑的往返时间, 每次测量到的RTT样本时间的加权处理. -
超时重传事件RTO
: 略大于RTTs. RTO = RTTs + 4 * RTTd. RTTd是RTT的偏差的加权平均值. -
报文段确认
: 判断此确认是先发送的报文段的确认, 还是后来重传的报文段的确认.Karm算法及修正.
5.3 选择确认SACK
主要是针对非连续报文段传输的处理
- 要使用选择确认SACK, 在建立TCP连接时, 就在TCP首部的选项中加上, 而且双方须事先商定好.
- TCP首部的选项长度最多40字节, 因此最多能指明4个字节块的边界信息, 共8个边界.
- 大多数还是重传了所有未被确认的数据块.
6. TCP流量控制
让发送方的发送速率不要太快, 以便接收方及时接收. 针对点对点通信的控制, 是个端到端的问题
6.1 利用滑动窗口实现流量控制
- 发送方的发送窗口不能超过接收方给出的接受窗口的数值.(TCP的窗口单位是字节,不是报文段).
-
持续计时器
: 防止等待非零窗口过程中出现的互相等待死锁问题. 只要接收到零窗口通知就启动.
6.2 TCP传输效率
-
第一种机制
: TCP持有一个变量等于最大报文段长度MSS, 只要缓存达到MSS字节, 就组装成一个TCP报文段发送出去. -
第二种机制
: 由发送方指明发送的报文段, TCP推送操作发送. -
第三种机制
: 发送方的一个计时器期限到了, 就把当前的缓存数据装入报文段(不超过MSS)发送出去.
TCP的发送时机
-
Nagle算法
: -
糊涂窗口综合征法
: - 二者结合使用.
7. TCP拥塞控制
拥塞
: 网络中某一资源的需求超过了该资源所能提供的可用部分, 网络的性能就变差.
7.1 拥塞控制的原理
-
拥塞控制
: 防止过多的数据注入到网络中, 这样可以使网络中的路由和链路不至过载. 此过程是q全局性的. -
开环控制
: 在涉及网络时事先将可能发生拥塞的因素考虑到, 力求网络工作时不拥塞, 但是中途不能修改. -
闭环控制
: 基于反馈环路概念.
7.2 拥塞控制的方法
TCP进行拥塞控制的四种算法
-
慢开始
. -
拥塞避免
. -
快重传
. -
快恢复
.
7.2.1 慢开始和避免拥塞
判断网络拥塞的依据就是出现了超时, 为防止拥塞窗口, 还需设置慢开始门限状态变量.
慢开始算法原理
: 每经过一个传输轮次, 拥塞窗口值就加倍一次.拥塞避免算法原理
: 让拥塞窗口缓慢增大, 每经过一个RTT就把发送方的拥塞窗口+1, 而不是慢开始阶段加倍增长. 显现加法增大特点即线性增长规律.拥塞超时处理
: 发送方判断为网络拥塞后, 慢开始门限值置为拥塞窗口的一半, 拥塞窗口从1开始.进入慢开始阶段.
慢开始门限的用法
:
- 当拥塞窗口值 < 慢开始门限值, 使用慢开始算法;
- 当拥塞窗口值 > 慢开始门限值, 使用拥塞避免算法;
- 当拥塞窗口值 > 慢开始门限值, 使用慢开始算法和拥塞避免算法都可以;
快速重传
:
- 目的让发送方今早知道发生了个别报文段的丢失, 以免收不到确认, 触发超时, 误认为网络发生了拥塞.
- 要求接收方接收到数据后, 立即发送确认.
- 如果发送方连续收到3个重复的确认, 就知道接收方确实没收到某个报文段, 发送方就立即进行重传.
快速恢复
:
- 发生了快重传后, 不启动慢开始阶段, 而是执行快速恢复阶段.
- 此时, 发送方调整门限值为拥塞窗口的一半, 拥塞窗口值置为门限值, 并执行拥塞避免算法.
发送方窗口的上限值 = Min [接收方窗口值, 拥塞窗口值] ;
7.2.2 主动队列管理AQM
网络层的影响---全局同步
- 网络层的策略来处理TCP拥塞控制, 对其影响最大的就是路由器的分组丢弃策略.
- 路由器通常按照先进先出FIFO的队列规则来处理到来的分组.
- 当队列满时, 再到达的分组就会被丢弃, 叫做
尾部丢弃策略
. - 触发
尾部丢弃策略
后, 发送方会出现超时, 进行超时重传, 进入慢开始阶段. - 一个路由可能有多个TCP连接, 都受影响, 同一时间进入慢开始状态, 叫做
全局同步
问题.
主动队列管理AQM
:
- 为了解决
全局同步
问题. - 当路由对列达到某个警戒值时, 就进行
尾部丢弃策略
, 触发部分发送发的慢开始.
8. TCP运输连接管理
8.1 TCP连接建立
TCP建立连接的过程叫做握手, 握手需要在客户端和服务器之间交换三个TCP报文段.
三次握手的目的就是为了防止已失效的请求报文段突然传递给了服务器, 而产生错误.
8.2 TCP连接释放
TCP的连接释放过程就是四次报文握手