5.1 传输层功能概述
1 传输层
主机才会有的层次
*中间设备最多只能到网络层
为应用层提供服务,使用网络层的服务
2 功能
- 传输层提供进程和进程之间的逻辑通信
*数据只有交到进程或进程某个窗口(具体线程)时才算交付,实现通信 - 复用和分用
复用:对不同进程的报文可使用同一传输层的协议
分用:接收方把传来的报文的数据送交给对应的某一进程 - 传输层对收到的报文进行差错控制
*即对网络层数据部分进行差错控制,故网络只需使用首部校验和检验首部即可 - 两种协议
*传输层并不一定实现可靠传输
3 传输层的两个协议
- TCP(面向连接的传输控制协议)
传送数据前必须建立连接,传送结束后释放连接
不提供广播或多播服务,提供可靠的面向连接的传输服务
可靠,面向连接,时延大,适用于大文件 - UDP(无连接的用户数据报协议)
传送数据前无需建立连接
收到UDP报文无需给出任何确认
不可靠,无连接,时延小,适用于小文件
4 传输层的寻址和端口
(1)复用和分用
复用:应用层所有的应用进程都可以通过传输层再传输到网络层
分用:传输层从网络层收到数据后交付给指明的应用进程
(2)端口(逻辑端口/软件端口)
传输层的SAP,标识主机的应用进程
端口号只有本地意义,因特网中不同计算机的相同端口没有联系
端口号长度16bit,能表示65536个不同的端口号
*客户端使用的端口号可循环利用,当一个进程结束后可分配给另一进程
(3)熟知端口号
(4)套接字Socket
在网络中采用发送方和接收方的套接字组合来识别端点,套接字唯一标识了网络中一个主机和他上面的一个进程
套接字=(主机IP地址,端口号)
5.2 UDP协议
1 概述
UDP只在IP数据报服务之上增加很少功能,即复用分用和差错检测功能
主要特点:
- UDP是无连接的,减少开销和发送数据之前的时延
- UDP使用最大努力交付,即不保证可靠交付
- UDP是面向报文的,适合一次性传输少量数据的网络应用
*应用层给UDP多长的报文,UDP就照样发送,即一次性发送一个完整报文---->要选择合适长度,过长会超过链路层的MTU以致于网络层的数据报要分片,过短使IP首部所占比例大传输效率低 - UDP无拥塞控制,适合很多实时应用
- UDP首部开销小,8B
2 UDP首部格式
*源端口号可有可无
*UDP长度=首部+数据=UDP用户数据报长度
分用时找不到目的端口号就丢弃报文,并给发送方发送ICMP“端口不可达”差错报告报文
3 UDP校验
伪首部:在计算校验和时出现,不向下传送也不向上递交
*伪首部第三个字段固定为全0,第四个字段17为封装UDP报文的IP数据报首部协议字段,第五个字段UDP长度=UDP首部8B+数据部分长度(不包括伪首部)
计算校验和过程
5.3 TCP协议
1 特点
- TCP是面向连接(虚连接)的传输层协议
**实际物理连接是把数据报加上各个层次的首部后放在链路上传输,再到接收端进行解封装 *
*虚连接指两个进程之间建立点对点的连接 - 每条TCP连接只能有两个端点,每一条TCP连接只能点对点
- TCP提供可靠交付的服务,无差错、不丢失、不重复、按序到达
- 提供全双工通信
发送缓存:准备发送的数据;已发送但尚未收到确认的数据
接收缓存:按需到达但尚未被接受应用程序读取的数据;不按序到达的数据 - 面向字节流
*TCP把应用程序交下来的数据看成仅仅是一连串的无结构字节流,传输时将多个字节组合在一起形成报文段传输
2 TCP 报文段首部格式
- 序号:在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,本字段的表示本报文段所发送数据的第一个字节的序号
- 确认号:期望收到对方下一个报文段的第一个数据字节的序号
*确认号为N,则证明到序号N-1为止的所有数据都已正确收到 - 数据偏移(首部长度):TCP报文段的数据起始处距离TCP报文段的起始处距离(单位:4B)
- 6个控制位
- 窗口:发送本报文段一方的接收窗口,即现在允许对方发送的数据量
- 校验和:检验首部+数据(检验时加12B伪首部,第四个字段为6)
- 紧急指针:URG=1时才有意义,指出本报文段中紧急数据的字节数
- 选项(可变):最大报文段长度MSS,窗口扩大,时间戳,选择确认等
- 填充:若TCP首部非4B整数倍则需填充至整数倍
5.4 TCP连接管理
1 概述
TCP连接传输三个阶段:连接建立---->数据传送---->连接释放
TCP连接的建立采用客户服务器方式:主动发起连接建立的应用进程叫客户,被动等待连接建立的应用进程叫服务器
2 TCP的连接建立
假设运行在一台主机(客户)上的一个进程想与另一台主机(服务器)上的一个进程建立一条连接,客户应用进程首先通知客户TCP(即告诉传输层),他想建立一个与服务器上某个进程之间的连接,客户中的TCP会用以下步骤与服务器中的TCP建立一条TCP连接:
三次握手(客户与服务器建立连接)
SYN只有在连接请求和确认连接请求是都置为1
ACK在建立连接后都置为1
seq为序列号,在连接请求过程中由主机随机产生
ROUND1时ack确认号无效,此时ACK为0,为建立完整连接
SYN洪泛攻击
攻击者发送大量的第一个报文(连接请求报文段),但不予以确认,无法完成三次握手,TCP连接会因为此挂起状态不断消耗资源
3 TCP的链接释放
参与一条TCP连接的两个进程中任何一个都能终止该连接,连接结束后主机中的缓存和变量将被释放
四次握手(客户与服务器释放连接)
FIN在发送完数据要求释放连接时置为1
MSL为最长报文段寿命,只有客户端发送确认报文并等待2MSL后才彻底释放连接
*客户端发送的确认报文段可能丢失,服务器端收不到的话会重传连接释放报文段,客户端会在2MSL内收到重传的连接释放报文段,并重传确认报文段,重新启动2MSL计时器,以确保服务器端可以收到确认报文段
5.5 TCP可靠传输
可靠:保证接收方进程从缓存区读出的字节流与发送方发出的字节流完全一样
1 TCP实现可靠传输机制
- 校验
与UDP校验一样增加伪首部校验 - 序号---->保证数据有序传送
一个字节占一个序号
序号字段指一个报文段第一个字节的序号(一个报文段的字节数可变) - 确认
发送方要保留报文段直至收到接收方的确认报文段
接收方在收到数据后会返回确认报文段(使用累计确认,也可以使用稍带确认)
*丢失中间部分报文段时接收方能够正常接收后续报文段,但返回的确认报文段中的序号为第一个丢失字节序号,提醒发送方重传 - 重传---->确认重传不分家
TCP的发送方在规定时间内没有收到确认就要重传已发送的报文段(超时重传)
*TCP采用自适应算法,动态改变重传时间RTTs(加权平均往返时间)
冗余ACK(冗余确认):解决重传时间过长,等待时间过长导致效率低的问题
5.6 TCP流量控制
TCP利用滑动窗口机制实现流量控制
通信过程中接收方根据自己接收缓存的大小动态调整发送方的发送窗口大小,即接收窗口rwnd(接收方设置确认报文段的窗口字段将rwnd通知给发送方)
*发送方的发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值,可动态改变
*直至主机B发送新窗口值后主机A才可继续发送数据
主机B发送的报文段丢失会导致主机A和主机B均处于等待状态
解决办法:计时器与零窗口探测报文段
当收到零窗口探测报文段,主机B会重新发送报文段以告诉主机A新的发送窗口大小
5.7 TCP拥塞控制
1 拥塞
- 条件:对资源需求的总和>可用资源
网络中与许多资源同时呈现供应不足---->网络性能变坏---->网络吞吐量将随输入负荷增大而下降 - 控制:防止过度的数据注入到网络中(全局性)
2 拥塞控制四种算法
(1)假定
- 数据单方向传送,而另一个方向只传送确认
- 接收方总是有足够大的缓存空间,因为发送窗口大小取决于拥塞程度
- 拥塞窗口:接收方根据接收缓存设置的值,并告知给发送方,反映接收方容量
- 拥塞窗口:接收方根据自己估算的网络拥塞程度设置的窗口值,反映网络当前容量
(2)算法1、2:慢开始和拥塞避免
传输轮次:发送了一批报文段并受到他们的确认的时间(一个往返时延RTT),也可以理解为开始发送一批拥塞窗口内的报文段到开始发送下一批拥塞窗口内的报文段的时间
ssthresh值:慢开始门限值
新的ssthresh值=上一次网络拥塞时拥塞窗口大小 / 2
遇到网络拥塞则回到cwnd=1处,慢开始指数上升阶段上升到新的ssthresh值
(3)算法3、4:快重传和快恢复
遇到网络拥塞直接回到新的ssthresh值处,后“加法增大”
知识总结导图及要点