第一节 传输层的基本服务
传输层功能
传输层的核心任务
: 应用进程
之间提供端到端
的 逻辑通信
服务
回顾:只有主机
才有传输层,网络核心中的路由器、交换机、集线器等只用到下三层
的功能
- 对应用层报文进行
分
段和重组 - 面向应用层实现
复
用和分解 - 实现端到端的
流
量控制 -
拥
塞控制 - 传输层
寻
址 - 对报文进行
差错
检测 - 实现进程间的端到端
可靠
数据传输控制
记:分复流拥寻差错-可靠
传输层寻址与端口
一台计算机中,不同应用进程用进程标识符(进程ID)
来区分
网络环境下:
TCP/IP 体系结构网络的解决方法:
在传输层使用协议端口号,通常简称为端口(port), 在全网范围内利用IP地址+端口号
唯一标识一个通信端点
传输层端口号为16位整数,可以编号65536个(2的16次方)
常用端口:端口号小于256的端口
传输层端口号:
1、服务器端使用的端口号:熟知端口号和登记端口号
2、客户端使用的端口号临时性,在客户进程运行时由操作系统随机选取唯一的未被使用的端口号:
无连接服务与面向连接服务
第二节 传输层的复用与分解
复用与分解
多路复用
:在源主机,传输层协议从不同的套接字收集应用进程发送的数据块,并为每个数据块封装上首部信息(包括用于分解的信息)构成报文段,然后将报文段传递给网络层
多路分解
: 在目的主机,传输层协议读取报文段中的字段,标识出接收套接字,进而通过该套接字,将传输层报文段中的数据交付给正确的套接字
多路复用与多路分解(复用与分解/复用与分用): 支持众多应用进程共用
同一个传输层协议,并能够将接收到的数据准确交付给不同的应用进程
无连接的多路复用与多路分解
用户数据报协议(User Datagram Protocol, UDP):Internet提供无连接服务的传输层协议
UDP套接字二元组:<目的IP地址,目的端口号>
面向连接的多路复用与多路分解
传输控制协议(Transmission Control Protocol, TCP): Internet提供面向连接服务的传输层协议
TCP套接字四元组: <源IP地址,源端口号,目的IP地址,目的端口号>
第三节 停-等协议与滑动窗口协议
可靠数据传输基本原理
基于不可靠信道实现可靠数据传输采取的措施
差错检测:利用编码实现数据报传输过程中的比特差错检测
确认: 接收方向发送方反馈接收状态。ACK(肯定确认)
;NAK(否定确认)
重传:发送发重新
发送接收方没有正确接收的数据
序号:确保数据按序提交(对数据进行编号,即便不按序到达,可以按序提交)
计时器:解决
数据丢失问题
TCP提供可靠数据传输服务
UDP不提供可靠数据传输服务
停-等协议
最简单的自动重传请求协议是停等协议
滑动窗口协议
流水线协议:管道协议,允许发送方在没有收到确认前连续发送多个
分组
最典型的流水线协议:滑动窗口协议
1、 增加分组序号
2、发送方和接收方可以缓存多个分组
发送方的发送窗口:发送方可以发送未被确认分组的最大数量
接收方的接收窗口: 接收方可以缓存到正确到达的分组的最大数量
发送:
接收:
滑动窗口协议:根据窗口的大小,可以具体分为:
回退N步协议:GBN协议(Go-Back-N)
选择重传协议:SR协议(Selective Repeat)
GBN协议: 发送窗口>=1; 接收窗口=1
;
发送端
缓存能力高,可以在没有得到确认前发送多个分组
接收端
缓存能力很低,只能接收一个按序到达的分组,不能缓存未按序到达的分组
GBN发送方响应的3类事件:
- 上层调用
- 收到1个ACk,GBN采用
累积确认方式
,即发送方收到ACK时,表明接收方正确接收序号n以及序号小于n的所有分组 - 计时器超时,
发送方只使用一个计时器
SR协议: 发送窗口>1 接收窗口>1
发送端缓存能力高
接收端缓存能力高
SR发送方响应事件:
- 上层调用
- 计时器超时。发送方对
每个分组进行计时
- 收到ACK。SR协议采用
逐个确认方式
第四节 用户数据报协议(UDP)
用户数据协议(User Datagram Protocal, UDP): Internet 传输层
协议,提供无连接
、不可靠、数据报尽力传输服务
UDP特点
- 应用进程容易控制发送什么数据以及何时发送,会出现分组的丢失和重复
- 无需建立连接
- 无连接状态
- 首部开销小,只有8个字节
A: 对数据包不进行检查与修改
B:传输数据前不需要建立连接
C: 具有较好的实时性、效率高
UDP数据报结构
0-15-31: 32位二进制
UDP首部四个字段: 每个字段长度都是2字节,共8个字节
源端口号和目的端口号:UDP实现复用和分解
长度:指示UDP报文段中的字节数(首部和数据的总和)
校验和:接收方使用检测数据报是否出现差错
应用数据字段:应用层数据占用
UDP校验和
UDP校验和:提供差错检测功能
UDP的校验和用于检测UDP报文段从源到目的地传送过程中,其中的数据是否发生了改变
UDP校验和计算规则
1、所有参与运算的内容按16位对齐求和
UDP校验和计算的内容包括3部分:UDP伪首部、应用数据
- 求和过程中遇到
溢出
(即进位)都被回卷
(即进位与和的最低位再相加)
- 最后得到的和
取反码
,就是UDP的校验和,填入UDP数据报的校验和字段
第五节 传输控制协议(TCP)
传输控制协议(Transmission Control Protocol ,TCP): Internet 传输层协议
提供面向连接、可靠、有序、字节流传输服务
第一:应用进程先建立连接
第二:每一条TCP连接只有两个
端点
第三:可靠交付
:无差错、不丢失、不重复、按序到达
第四:全双工
通信
第五:面向字节流
流:字节序列,应用程序和TCP的交互是一个个数据块,TCP把他们看做是无结构字节流
TCP报文段结构
1、源端口号字段、目的端口号字段:占16位、复用和分解上层应用的数据
2、序号字段、确认序号字段:占32位
序号字段:TCP序号是对每个应用层数据的每个字节进行编号
确认序号字段:期望从对方接受数据的字节序号,即该序号对应的字节尚未收到
首部长度字段:占4位,指出TCP端的首部长度,以
4字节为计算单位
(如果是固定首部20字节则首部长度为5)保留字段:占6位。保留为今后使用,目前值为0
URG/ACK/PSH/Rst?SYN/FIN 各占1位、为标志位字段;
各占1位、取值为0或者1
紧急URG = 1,紧急指针字段有效,优先传送 指出本TCP报文段中紧急数据共有多少个字节
确认ACK=1 确认序号字段有效;ACK=0;确认序号字段无效
推送PSH=1,尽快将报文段中的数据交付接收应用进程,不要等缓存满了再交付
复位RST=1 TCP连接出现严重差错,释放连接,再重新建立TCP连接
同步SYN=1 该TCP报文段是一个建立新连接请求控制段或者同意建立连接的确认段
终止FIN=1 TCP报文段的发送端数据已经发送完毕,请求释放连接-
接收窗口字段:占16位,想对方通过我方接收窗口的大小
-
校验和字段:占16位
计算方法与UDP校验和的计算方法相同,TCP协议号是6
9.选项字段长度可变,最短为0字节,最长为40字节
- 填充字段:取值全为0,目的是为了整个首部长度是4字节的整倍数
要点
- 序号字段:TCP的序号是对每个应用层数据的
每个字节
进行编号- 确认序号字段:
期望
从对方接收数据的字节序号,即该序号对应的字节尚未收到,用ack_seq表示- TCP段的首部总长度最短是
20
字节, 最长60字节(加上选项字段长度)
TCP连接管理
TCP连接管理:连接建立与连接拆除
以客户端上的一个应用进程与服务器上的一个应用进程建立一条TCP连接为例
一、建立连接
第一次握手:
客户向服务器发送连接请求段:(SYN=1, seq=x)
SYN = 1; 建立连接请求控制段
seq=x; 表示传输的报文段第1个数据字节的序列号是x,此序列号代表整个报文段的序号
客户端进入SYN_SEND
(同步发送)
第二次握手:
服务端发回确认报文段:(SYN=1, ACK=1,seq=y,ack_seq=x+1)
SYN=1 同意建立新连接的确认段
ack_seq = x + 1; 表示已经收到序列号为x的报文段,准备接受序列号为x+1的报文段
seq=y : 服务器告诉客户确认报文段的序列号是y
服务器由LISTEN进入SYN_RCVD(同步收到)
第三次握手
客户端对服务器的同意连接报文段进行确认:(ACK=1,seq=x+1, ack_seq=y+1)
seq=x+1 : 客户端此次的报文段的序列号是x+1;
ack_seq = y+1 : 客户端期望接收服务器序列号y+1的报文段
当客户端发送ACK时,客户端进入ESTABLISHED状态
当服务端收到ACK后,也进入ESTABLISHED状态
第三次
握手可携带数据
二、连接拆除:四次挥手
第一次挥手
客户端向服务器发送释放连接报文段:(FIN=1, seq=u)
FIN=1.发送端数据发送完毕,请求释放连接
seq=u 传输的第一个数据字节的序号是u
客户端状态由ESTABLISHED进入FIN_WAIT_1(终止等待1状态)
第二次挥手
服务器向客户发送确认段:(ACK=1, seq=v, ack_seq=u+1)
ACK=1; 确认字号段有效
ack_seq=u+1 : 服务器期望接受客户数据序号为u+1
seq=v: 服务器传输的数据序号是v
服务器状态由ESTABLISHED进入CLOSE_WAIT(关闭等待)
客户端收到ACK段后,由FIN_WAIT_!进入FIN_WAIT_2
第三次挥手
服务器向客户发送释放连接报文段:(FIN=1, ACK=1, seq=v+1, ack_seq=u+1)
FIN =1: 请求释放连接
ACK = 1:确认字号段有效
ack_seq=u+1: 表示服务器期望接受客户数据序列号为1
seq=v+1 表示自己传输的第一个数据字节的序号是v+1
服务器状态由CLOSE_WAIT进入LAST_ACK(最后确认状态)
第四次挥手:
客户向服务器发送确认段:(ACK=1,seq=u+1,ack_seq=w+1)
ACK=1: 确认字号段有效
ack_seq=v+1+1 : 表示客户期望接受服务器数据序号为v+1+1
seq=u+1 表示客户传输的数据的序号是u+1
客户端状态由FIN_WAIT_2进入TIME_WAIT 等待2MSL时间,进入CLOSED状态
服务器再收到最后一次ACK后,由LAST_ACK进入CLOSED
TCP可靠数据传输
一、可靠:保证接收方应用进程从缓冲区读出的字节流与发送发发出的字节流是完全一样的
二、TCP实现可靠数据传输服务的工作机制
1、应用层数据被分割
成TCP认为最适合发送的数据块
2、序号,发送方对发送的数据包进行编号,确保数据按序提交给接收方 采用累积确认
3、确认,接收方向发送方反馈接收状态,确认是否正确接收数据
4、差错检测,利用差错编码实现数据包传输过程中的比特差错检测(甚至纠正)
5、重传,发送方重新发送接收方没有正确接收的数据
6、计时器,在发送方引入计时器,解决数据丢失问题
1、应用层数据被分割成TCP认为最适合发送的数据块
最大报文段长度:1500字节
报文段中封装的应用层数据的最大长度:1480字节 = 1500 - 最短的首部长度
2、序号,发送方对发送的数据包进行编号,确保数据按序提交给接收方
3、确认,接收方向发送方反馈接收状态,确认是否正确接收数据
TCP生成ACK的策略
-
具有所期望序号的报文段按序到达,所有在期望序号及以前的报文段都已被确认。TCP延迟500ms发送ACK
-
具有所期望序号的报文段按序到达,且另一个按序报文段在等待ACK传输,TCP接收方立即发送单个累积ACK,确认以上两个按序到达报文段
-
拥有序号大于期望序号的失序报文段到达,TCP接收方立即发送重复ACK,指示下一个期望接收字节的序号
-
收到一个报文段,部分或完全填充接收数据间隔
4、 差错检测,利用差错编码实现数据包传输过程中的比特差错检测(甚至纠正)
5、重传,发送方重新发送接收方没有正确接收的数据
6、计时器,在发送方引入计时器,解决
数据丢失问题
TCP流量控制
流量控制:协调发送方与接收方的数据发送与接收速度
在通信过程中,接收方设置报文段的接收窗口字段
来将窗口大小通知给发送方
TCP拥塞控制
一、网络拥塞:太多的主机``以太快的速度
向网络中发送太多的数据
,超出了网络处理能力,导致大量数据分组拥挤在中间设备队列中等待转发,网络性能
显著下降的现象
二、拥塞控制:通过合理调度、规范、调整向网络中发送数据的主机数量、发送速率、数据量、以避免
拥塞或消除
已发生的拥塞
三、概念补充介绍
- 拥塞窗口(CongWin): 连接开始,为1MSS ; 1个最大报文段长度(MAximum Segment Size, MSS)
- 阈值(Threshold):临界值 16MSS
四、TCP拥塞控制算法
-
慢启动
-
拥塞避免算法
阈值之前:慢启动阶段
阈值之后:拥塞避免阶段
- 快速重传
快速重传
:接收端收到3次重复确认,则推断被重复确认的报文段已经丢失于是立即发送被重复确认的报文段
怎样算是报文段丢失了? 计时器超时
l例如: 发生计时器超时,当前拥塞窗口24MSS,当前阈值为16MSS
新的阈值:为当前拥塞窗口的一半,新的阈值=24/2=12MSS
新的拥塞窗口:直接调整为1MSS 新的拥塞窗口=1MSS
调整好新的阈值和新的拥塞窗口之后,使用慢启动。拥塞避免
算法增加拥塞窗口大小
- 快速恢复
快速恢复
算法: 当发送3次重复确认时,网络拥塞程度不是很严重。
阈值和拥塞窗口的调整方法
:不在重新从慢启动阶段开始,而是直接从新的阈值
开始,直接进入拥塞避免阶段
怎样算是报文段丢失了? 收到三次重复确认
例如:发送3次重复确认时,当前拥塞窗口为24MSS,当前阈值为16MSS
新的阈值:为当前拥塞窗口的一半
新的拥塞窗口:调整为新的阈值
调整好新的阈值和新的拥塞窗口后,使用拥塞避免
算法增加拥塞窗口大小
五、窗口调整的基本策略(Additive Increase,Multiplicative Decrease, AIMD):
网络未发生拥塞时:逐渐"加性"增大窗口
网络拥塞时“乘性”减小窗口
六、拥塞预防策略:流量整型技术:规范主机向网络发送数据的流量