传输层
考点
1)传输层概述
- 传输层和网络层的关系
- 进程到进程的数据交付
- 复用和分用
2)UDP协议
- UDP特点
- UDP报文段结构
- UDP检验和
3)可靠数据传输原理
- 流水线可靠数据传输原理
- 回退N步
- 选择重传
4)TCP协议和
- TCP可靠传输原理
5)TCP的拥塞控制
- TCP流量控制
- TCP报文段结构
- TCP建立连接和释放连接
- TCP的拥塞控制
- TCP面向字节流与UDP面向报文
运输层的功能
-
运输层提供进程和进程之间的逻辑通信。
-
复用和分用
复用:应用层所有的应用进程都可以通过传输层再传输到网络层。
分用:传输层从网络层收到数据后交付指明的应用进程。
发送端进行多路复用:从多个Socket接收数据,为每块数据封装上头部信息,生成Segment,交给网络层。
接收端进行多路分用:传输层依据头部信息将受到的Segment交给正确的Socket,即不同的进程。
-
运输层对收到的报文进行差错检测。
-
运输层的两种协议(TCP和UDP)
TCP
- 面向连接的传输控制协议
- 传送数据之前必须建立连接,数据传送结束后要释放连接。不提供广播或多播服务。由于TCP要提供可靠的面向连接的传输服务,因此不可避免增加了许多开销;确认、流量控制、计时器及连接管理等。
- 可靠、面向连接、时延大、适用于大文件
UDP
- 无连接的用户数据报协议UDP
- 传送数据之前不需要建立连接,收到UDP报文后也不需要给出任何确认。
- 不可靠、无连接、时延小、适用于小文件。
逻辑端口/软件端口 : 端口是传输层的SAP,标识主机中的应用进程。
端口号只有本地意义,在因特网中不同计算机的相同端口是没有联系的。
端口号长度为16bit,能表示65536个不同的端口号。
端口号(按范围分)
1、服务端使用的端口
- 熟知端口号:给TCP/IP最重要的一些应用程序,让所有用户都知道。0~1023
- 登记端口号:为没有熟知端口号的应用程序使用的。1024~49151
2、客户端使用的端口号:仅在客户进程运行时才动态选择。49152~65535
常用端口号
在网络中采用发送方和接收方的套接字组合来识别端点,套接字唯一标识了网络中的一个主机和它上面的一个进程。
套接字Socket=(主机IP地址,端口号)
UDP的Socket用二元组标识(目的IP地址,目的端口号)
TCP的Socket用四元组标识(源IP地址,源端口号,目的IP地址,目的端口号)
UDP只在IP数据报服务之上增加了很少功能,即复用和差错检测功能。
UDP的主要特点:
- UDP是无连接的,减少开销和发送数据之间的时延。
- UDP使用最大努力交付,即不保证可靠交付。
- UDP是面向报文的,适合一次性传输少量数据的网络应用。
- UDP无拥塞控制,适合很多实时应用。
- UDP支持一对一、一对多、多对一和多对多的交互通信
- UDP首部开销小,只有8B,而TCP首部有20B
应用层给UDP多长的报文,UDP就照样发生,即一次发送一个完整报文。既不合并,也不拆分报文。
TCP/UDP通用格式
UDP首部格式
UDP校验
伪首部只有在计算检验和时才出现,不向下传送也不向上递交。
17:封装UDP报文的IP数据报首部协议字段是17
UDP长度:UDP首部8B(字节)+数据部分长度(不包括伪首部)
TCP协议的特点
1、TCP是面向连接(虚连接)的传输层协议。
2、每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。
3、TCP提供可靠交付的服务,无差错,不丢失、不重复、按序到达。
4、TCP提供全双工通信。发送缓存(准备发送的数据&已发送但尚未收到确认的数据)接收缓存(按序到达但尚未被接受应用程序读取的数据&不按序到达的数据)
5、TCP面向字节流,TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流
流:流入到进程或从进程流出的字节序列。
TCP报文段首部格式
序号:在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,本字段表示本报文段所发送数据的第一个字节的序号。
确认号:期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则证明到序号N-1为止的所有数据都已正确收到。
数据偏移(首部长度):TCP报文段的数据起始处距离TCP报文段的起始处有多远,以4B为单位,即1个数值是4B。
TCP的首部长度为20B
6个控制位
- 紧急位URG:URG=1时,标明此报文段中有紧急数据,是高优先级的数据,应尽快传送,不用在缓存里排队,配合紧急指针字段使用。
- 确认位ACK:ACK=1时确认号有效,在连接建立后所有传送的报文都必须把ACK置为1。
- 推送位PSH、
- 复位RST(RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立传输链接。)、
- 同步位SYN:SYN=1时,表明一个连接请求/连接接受报文。
- 终止未FIN:FIN=1时,表明此报文段发送方数据已经发完,要求释放连接。
窗口:指的是发送本报文段的一方的接受窗口,即现在允许对方发送的数据量。
检验和:检验首部+数据,检验时要加上12B伪首部,第四个字段为6。
紧急指针:URG=1时才有意义,指出本报文段中紧急数据的字节数。
选项:最大报文段长度MSS、窗口扩大、时间戳、选择确认。。。。。。
重传
超时重传:确认重传不分家,TCP的发送方在规定的时间(重传时间)内没有收到确认就要重传已发送的报文段。
TCP采用自适应算法,动态改变重传时间RTTs(加权平均往返时间)
rdt1.0:信道完全可靠,不会发生错误,无需进行单独的可靠性机制
rdt2.0
停止等待:每发送完一个分组就停止发送,等待对方确认。在收到确认后再发送下一个分组。
自动重传请求协议ARQ需要三种功能来处理比特差错的情况:差错检测、接收方反馈、重传。
rdt2.0是停等协议
缺陷:没有考虑ACK或者NAK出错的情况!
流量控制
TCP通过让发送方维护一个称为接收窗口的变量来提供流量控制。
拥塞窗口
发送窗口的大小是受到接收窗口和拥塞窗口影响的,发送窗口的大小是取接受窗口和拥塞窗口的最小值。
接收窗口要接收64MB的数据,且一直不向上层提交数据。
在第一次发送的时候,接收窗口,因为没有接收的东西,就是他原来的值64MB,拥塞窗口这个时候按照慢启动应该取1MB,然后发送窗口取他们最小值就是1MB,然后第二步,接收窗口,因为它不像上层提交,所以接收窗口少了一个1MB。那接收窗口应该是剩63MB,然后拥塞窗口在慢启动阶段就变成1*2=2MB,那发送窗口取他们最小值,所以就取二,然后这个时候接收窗口一共就少了3MB,还剩下61MB,因为你要发64MB,然后接着接着按相同的方法往下写。
拥塞控制与流量控制的区别
- 拥塞控制就是防止过多的数据注入到网络中,使网络中的路由器或链路不至于过载。
- 流量控制就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。
- 拥塞控制是一个全局性的过程,对整个网络有好处。
- 流量控制往往指点对点通信量的控制,是一个端到端的问题(接收端控制发送端)。
- 流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收.
监测网络拥塞的指标
- 由于缺少缓存空间而被丢弃的分组的百分数;
- 平均队列长度;
- 平均分组时延;
- 分组时延的标准差;
TCP拥塞控制常被称为加性增,乘性减拥塞控制方式。