Skip to main content

运输层

前言 传输层和应用层的关系

做下面的比喻:
应用层报文——发信信封上的字符
进程——收信方和发信方
主机——两个家庭
传输层协议——两个家庭专门负责收发信的人
网络成协议——邮政服务(逻辑通信提供者)

一、传输层的功能

传输层为运行在不同主机的应用提供逻辑通信。对网络层的服务进行增强(如数据排序,加密等,有些服务是不可增强的,如带宽、延迟

🔔 传输层协议运行在端系统

发送方:将应用层的报文分成报文段,然后传递给网络层
接受方:将报文段重组为报文,然后传递给应用层

二、常见的应用使用的端口号总结

应用端口号
HTTP80/8080/3128/8081/9098
FTP21/22
Telent(远程登录)23
HTTPS443(TCP) 443(UDP)
SMTP25(TCP)
POP3110(TCP)
SSH(安全登录)22(TCP)
SOCKS(代理服务器)1080(TCP)

三、传输层协议

3.1 TCP协议

3.1.1 TCP简介

TCP全称:传输控制协议-Transmission Control Protocol,是一种面向连接的协议,它是一个面向连接的通信协议。TCP协议是基于IP协议的。
面向连接两个应用程序相互发数据之前必须先握手
提供可靠的数据传输、拥塞控制、流量控制

🔔 全双工

TCP提供全双工服务(Full-duplex service) ,当两个进程A和B建立起TCP连接后,那么应用层数据在从A流向B的同时也从B流向A。

点对点:TCP是单个发送方和单个接收方的协议。多播(即一次发送多个点接收)是无法实现的
image.png

⚠ 两个常见的名词

①最大报文段长度(Maximum Segment Size,MSS):该术语很容易被混淆,它其实指的是报文段里应用数据的最大长度,而不是包括TCP首部的TCP报文段的最大长度。

②最大传输单元(Maximun Transmission Unit,MTU):指的是最大链路层帧长度,即应用数据+TCP首部+IP首部。

🌳 TCP连接的组成

TCP连接的组成包括:两台主机上的缓存、变量和与进程相连的套接字而两台主机之间的网络元素(路由器、交换机和中继器)没有为该连接分配任何变量。

3.1.2 TCP的报文结构

结构名称大小作用
源端口号16比特存储发送方端口号
目标端口号16比特存储接收方端口号
序号Seq32比特报文段的首字节在字节流的编号
确认号Ack32比特期望从另一方收到的下一个字节的序号
接收窗口16比特愿意接收的字节数量
校验和16比特校验传输的数据的准确性
应用层数据长度不确定传输的数据

源端口号和目标端口号

被用于多路复用来自上层应用的数据/多路分解送到上层应用

32比特的序号字段和32比特的确认字段

这些字段被TCP发送方和接收方用来实现可靠数据传输服务。

序号字段的作用

序号是可靠传输的关键因素。TCP将要传输的每个字节都进行了编号,序号是本报文段发送的数据组的第一个字节的编号,序号可以保证传输信息的有效性。比如:一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为401

确认号字段的作用

每一个ACK对应这一个确认号,它指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0。

16比特接收窗口字段

该字段用于指示接收方愿意接收的字节数量,用于流量控制

4比特的首部长度字段

指示以32比特的字为单位的TCP首部长度,表示该TCP头部有多少个32位bit(有多少个4字节),所以TCP头部大长度是15 * 4 = 60。根据该部分可以将TCP报头和有效载荷分离。TCP报文默认大小为20个字节

可选与变长的选项字段

该字段用于发送方与接收方协调最大报文长度(MSS)时,或在高速网络环境下用作窗口调节因子时使用。

6比特的标志字段

ACK(确认反馈),RST、SYN、FIN(用于连接的建立和拆除),【PSH(指示接收方应立即将数据交给上层),URG(报文里存在着被发送端上层设为紧急的数据,紧急数据的最后一个字节由一个16比特的紧急数据指针指出)】在实践中,PSH和URG并没有使用。

tip

URG:它为了标志紧急指针是否有效。
ACK:标识确认号是否有效。
PSH:提示接收端应用程序立即将接收缓冲区的数据拿走。
RST:它是为了处理异常连接的, 告诉连接不一致的一方,我们的连接还没有建立好, 要求对方重新建立连接。我们把携带RST标识的称为复位报文段。
SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段。
FIN:通知对方, 本端要关闭连接了, 我们称携带FIN标识的为结束报文段。

16位的紧急指针

按序到达是TCP协议保证可靠性的一种机制,但是也存在一些报文想优先被处理,这时就可以设置紧急指针,指向该报文即可,同时将紧急指针有效位置位1。

16位校验和

发送端填充,CRC校验。如果接收端校验不通过, 则认为数据有问题(此处的检验和不光包含TCP首部也包含TCP数据部分)。

image.png

Details
英文详图

3.1.3 TCP特性解读

1.可靠数据传输

TCP在IP提供的不可靠服务的基础上建立了rdt。提供了累计确认和超时重传机制。允许乱序接收。

2.流量控制

缓冲区:TCP往里面写数据,app从里面读数据。接收方控制发送方,不让发送方发送的太多、太快,以致于让接收方的缓冲区溢出。接收方在其向发送方的TCP报文段头部的rwnd字段“通告”其空闲缓存区大小。发送方根据rwnd字段控制发送数据的大小,保证接收方不会被淹没。

3.连接控制

三次握手建立连接。详见下一篇文章。


3.2 UDP协议

3.2.1 UDP协议简介

全称:用户数据报协议-User Datagram Protocol,简称UDP,是一种无连接的数据传输协议。
无连接:UDP发送端和接收端没有握手每个UDP报文段都被独立的处理
优点:传输速度快(无需握手、无拥塞和流量控制)、开销小(报文段的头部很小)
缺点:可能丢失、可能乱序
应用:流媒体(要求速率,对丢失不敏感)、DNS

3.2.2 UDP报文格式

image.png
UDP首部由8个字节构成,每个字段都是两个字节

1、源端口:源端口号,需要对方回信时选用,不需要时置0;
2、目标端口:目的端口号,在终点交付报文时需要用到;
3、头部长度:UDP的数据报长度(包含首部和数据),最小值为8字节(只有首部);
4、校验和:检测UDP数据在传输中是否出错,有错则丢弃

🔔 UDP校验

该字段可选,当源主机不想计算校验和,则置0,当传输层从IP层收到UDP数据报时,根据首部中的目标端口,把UDP数据通过相应的端口交给应用进程。若接收方UDP发现收到的报文中目的端口号不正确,就丢弃该报文,由ICMP发送“端口不可达”报错给发送方。

在计算校验和时,在UDP数据报前加12字节的伪首部,并不是UDP真正的首部。只是在计算校验和时临时添加在UDP数据报的前面得到的临时数据报,后校验临时数据报。伪首部既不向下传送,也不向上递交,仅仅为了计算校验和。这样,即检查了UDP的数据报,又对IP数据报源IP地址和目标地址进行了校验。

Details
UDP数据报格式和伪首部图解

四、拥塞控制

拥塞:大多数数据需要传输,超过了网络的处理能力。
拥塞的表现:分组丢失(路由器缓冲区溢出)、分组延迟(在路由器中的排队延迟)

4.1 TCP拥塞控制

🌳 基本原理

路由器不向主机发送拥塞相关的反馈信息(路由器的负担较轻、符合网络核心简单的TCP/IP架构原则)
端系统根据自身得到的消息,判断是否发生拥塞,从而采取动作

拥塞监测的方式

某个段超时了(丢失事件):拥塞
超时时间到,某个段的确认没有来。
原因1:网络拥塞(某个路由器缓冲区没空间了,被丢弃)大概率
原因2:出错被丢弃了(各级错误,没有通过校验,被丢弃)小概率
一旦超时,就认为发生了拥塞,有一定误判,但是总体控制方向是对的

五、TCP和UDP的异同

相同点:TCP和UDP都是在网络层,都是传输层协议,都能都是保护网络层的传输,双方的通信都需要开放端口。

不同点: \ | TCP | UDP :---: | :---: | :---: 1 | TCP的传输是可靠传输。 | UDP的传输是不可靠传输。 2 | TCP是基于连接的协议,在正式收发数据前,必须和对方建立可靠的连接。 | UDP是和TCP相对应的协议,它是面向非连接的协议,它不与对方建立连接,而是直接把数据包发送出去 3 | TCP是一种可靠的通信服务,负载相对而言比较大,TCP采用套接字(socket)或者端口(port)来建立通信。 | UDP是一种不可靠的网络服务,负载比较小。 4 | TCP和UDP结构不同,TCP包括序号、确认信号、数据偏移、控制标志(通常说的URG、ACK、PSH、RST、SYN、FIN)、窗口、校验和、紧急指针、选项等信息。 | UDP包含长度和校验和信息。 5 | TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 | UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。 6 | TCP在发送数据包前在通信双方有一个三次握手机制,确保双方准备好,在传输数据包期间,TCP会根据链路中数据流量的大小来调节传送的速率,传输时如果发现有丢包,会有严格的重传机制,故而传输速度很慢。 | UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。 7 | TCP支持全双工和并发的TCP连接,提供确认、重传与拥塞控制。 | UDP适用于哪些系统对性能的要求高于数据完整性的要求,需要“简短快捷”的数据交换、需要多播和广播的应用环境。

六、多路复用和分用

由于一个主机上有多个进程,因此要进行多路复用和分用。如果某层的一个协议对应上层的多个协议/实体,就需要进行服用/分用。

🔔 接收端进行多路分用

传输层根据头部信息将收到的报文交给正确的Socket(即不同的进程)。

🔔 发送端进行多路复用

从多个Socket接收数据,为每个数据封装头部信息,生成报文,交给网络层。

分用

主机接收到IP数据报(datagram)

每个数据报携带源IP地址、目的IP地址
每个数据报携带一个传输层的段(Segment)
每个段携带源端口号和目的端口号

主机收到Segment之后,传输层协议提取IP地址和端口号信息,将Segment导向相应的Socket

TCP做更多处理

image.png
复用和分用