导图社区 运输层
计算机网络运输层,包含传输控制协议TCP、协议概述、用户数据报协议UDP、可靠传输工作原理、TCP拥塞控制、TCP的流量控制等。
编辑于2021-08-23 19:26:44运输层
协议概述
进程间的通信
真正通信的实体是两台主机中的进程
运输层提供应用进程之间的逻辑通信
两种不同的运输协议
面向连接的TCP
可靠
无连接的UDP
不可靠
协议传送的数据单位
运输协议数据单元TPDU
TCP报文段
UDP用户数据报
端口
端口很重要的功能——复用和分用
为何需要端口
操作系统不兼容
进程为动态的
只关心功能不关心软件
软件端口
应用层的各种协议进程与运输实体进行层间交互的一种地址
硬件端口
不同硬件设备进行交互的接口
分类
服务器端使用的端口号
熟知端口号(又称系统端口号)
0~1023
登记端口号
1024~49151
客户端使用的端口号
又称短暂端口号
49152~65535
用户数据报协议UDP
主要特点
UDP是无连接的
UDP使用尽最大努力交互
UDP是面向报文的
直接在应用层的报文上添加首部下交给IP层
UDP没有拥塞控制
UDP支持一对一、多对一、一对多的交互
UDP的首部开销小
功能
UDP只在IP数据包服务之上增加了差错检验和分用复用的功能
UDP的首部格式
源端口
目的端口
长度
检验和
检验报文的全部,并且在计算检验和时,在UDP报文前面增加12个字节的伪首部
用反码求和检验
可靠传输工作原理
理想传输的特点
传输信道不产生差错
接收方能及时处理收到的数据
停止等待协议
每发送一个分组就停止发送,等待对方的确认,收到确认后再发送下一组
又称自动重传请求ARQ
无差错情况
收到确认再发下一个
出现差错
超时重传
每发完一组就设置一个超时计时器
暂时保留自己发送的分组副本
分组和确认分组必须进行编号
重传时间应当比数据分组的往返时间更长一些
确认丢失和确认迟到
当接收方收到了重复的分组就会
丢弃这个重复的分组
向发送方发送确认,以防再发送重复的
信道利用率
停止等待协议的信道利用率太低
为了改进而采用流水线传输
即连续发送多个分组
流水线传输需要用到连续ARQ协议和滑动窗口协议
传输控制协议TCP
主要特点
面向连接
每一条连接都只有两个端点,即点对点的
提供可靠交互
提供全双工通信
面向字节流
根据对方给的窗口值和网络拥塞程度来决定一个报文段多少字节
TCP连接是一条虚连接,即逻辑连接而非物理连接
TCP的连接
TCP连接的端点叫做套接字(插口)
套接字 socket = (IP 地址:端口号)
TCP连接 ::= {socket1,socket2} = {(IP1:port1),(IP2:port2)}
连续ARQ协议
位于发送窗口的分组可以连续发送出去
接收方一般采用累积确认
在接受到几个分组后,对按序到达的最后一个分组发送确认
优点
容易实现
缺点
不能向发送方反映自己收到的所有分组信息
即收到12_45时要重传345
TCP报文的首部格式
前20个字节是固定的,后面可以添加4n个字节(最多加40)
固定部分
源端口、目的端口
序号
每一个字节按序编号
确认号ack
希望收到对方下一个报文第一个字节的序号
确认ACK
为1确认号才有效
数据偏移
显示报文首部总长度
以四字节为单位
同步SYN
用于连接的建立时同步序号
SYN=1,ACK=0(请求报文),SYN=1,ACK=1(同意建立连接)
保留
保留今后使用
紧急URG
为1时紧急指针字段有效,说明该数据报很紧急,应尽快传送
紧急指针
指出紧急数据的字节数和紧急数据末尾的位置
推送PSH
为1时表示希望此报文段需要尽快收到对方响应,对方收到后尽快处理
复位RST
为1时表示TCP连接出现严重错误,需要释放再重新连接
终止FIN
为1时表示要释放连接
窗口
为接收窗口的值
用于决定发送窗口的大小
检验和FCS
同UDP
选项
最大为40字节
窗口扩大选项
时间戳选项
选择确认选项
TCP可靠传输的实现
TCP滑动窗口是以字节为单位的
发送窗口只能往前
发送缓存存放
准备发送的数据
未按序到达的数据
已被确认的数据会从缓存中移除
接受缓存存放
按序到达但未被接收应用程序读取的数据
未按序到达的数据
强调
发送方的窗口并非一直都与接收方的窗口一样大(时间滞后或网络拥塞)
对于不按序到达的数据接收方先临时存放在接收窗口。等剩下的数据接收到后才一起上交给应用程序
接收方一定要有累积确认功能,可减少开销
接收方可在合适的时候发送确认
接收方可在自己有数据要发送时把确认捎带上
超时重传的选择
采用自适应算法
记录报文段的往返时间RTT
保留RTT的加权平均往返时间RTTs
新RTTs=(1-a)*(旧的RTTs)+a*新的RTT样本 a为1/8
超时重传时间RTO略大于RTTs
RTO=RTTs+4*RTTd
新的RTTd = (1-β)*(旧的RTTd)+β*|RTTs-新的RTT样本| β为1/4
Karn算法
在计算加权平均RTTs时,只要报文段重传了,就不采用其往返时间样本
对Karn算法的修改
报文段每重传一次就把重传时间RTO增大为原来的两倍
选择确认SACK
接受方将未按序接受的信息(不连续字节快的边界)发送给发送给发送方,使其不要再发送已收到的数据
TCP的流量控制
流量控制
让发送方的发送速率不要太快
通过用接收窗口的大小来控制发送窗口的大小
零窗口问题
接收发送的非零窗口通知丢失,造成发送方一直等待通知,接收方一直等待发送方的数据
解决方法
设一个持续计时器
只要一方收到零窗口通知就开始计时
时间到了就发送一个零窗口探测报文
TCP的传输效率
TCP报文的发送时机
缓存中存放的数据达到MSS字节时,就装成TCP报文段发送出去
根据应用进程指明要求来发送报文段,即TCP支持的推送操作
发送方的一个计时器期限到了
糊涂窗口综合征
接收方缓存已满,应用进程一次读一个字节,发送方一次只发一个字节。效率很低
解决方法
Nagle算法
先发送一个数据,再一直累积数据直到收到确认,最后封装数据一同发出
长度到达MSS再发出
到达接收方缓存空间一半大小就发送,不等确认
TCP拥塞控制
拥塞
网络中对资源的需求超过了对可用资源
判断网络是否出现了拥塞的依据就是是否出现了超时
拥塞控制方法
慢开始
由小到大不断的增加拥塞窗口大小
每经过一个传输轮次,拥塞窗口就加两倍
轮次:cwnd所发送的报文段都连续发送出去,并且收到对最后一个字节的确认
拥塞避免
到达慢开始门限后使用拥塞避免
每次窗口扩大1
当出现拥塞(超时)时,又重新慢开始
快重传
出现对同一报文的三次确认就快重传
快恢复
快重传后窗口值直接减为原来的一半并使用拥塞避免,而非重新慢开始即为快恢复
发送方的窗口值受接收方的窗口值和拥塞窗口大小的影响
发送窗口上限值=Min[rwnd(接收),cwnd(拥塞)]
TCP的运输连接管理
运输连接的三个阶段
连接建立
数据传送
连接释放
连接建立要解决的三个问题
每一方能确认彼此
允许双方协商一些参数
能够对运输实体资源进行分配
连接的建立使用客户服务器方式
TCP的连接建立
过程——三次握手
TCP的连接释放