第五章 传输层
一、传输层概述
传输层功能
协议:TCP和UDP
是只有主机才有的层次
功能:
- 提供进程和进程之间的通信,网络层提供的是主机之间的通信
- 复用和分用:将数个进程的信息复用起来,发送出去;收到信息后,将各个进程的数据分离开来
- 传输层对收到的报文进行差错检测
- 提供TCP和UDP两种协议
1.2 传输层的寻址和端口
端口是传输层的SAP,用于标识主机中的应用进程。用一串数字标识端口,称之为端口号,只在本机内有意义。其长度为16bit,能表示65536个端口。
套接字Socket的构成为(主机IP地址,端口号),套接字唯一标识了一个网络中的一个主机和他上面的一个进程。
二、UDP协议
2.1 功能
UDP只在IP数据报服务商增加了很少功能,只有复用分用和差错检测功能
主要特点:
- UDP无连接,减少了开销和发送数据之前的时延
- UDP是不保证可靠交付的,如果报文很长,一旦丢失则会造成很大的重发时延,因此适合短报文
- UDP是面向报文的,不会对报文进行切割,适合一次性传输少量数据的网络应用
- 没有拥塞控制,适合很多实时应用
2.2 UDP首部格式
2.3 UDP校验
UDP校验的关键在于伪首部,伪首部只会在发送端准备发送或者说接收端接收到并进行差错检测的时候被添加上,发送时会将伪首部去除。
三、TCP协议
3.1 特点
- 面向连接的传输协议,是一种虚电路连接
- 每一条TCP链接只能有两个端点,每一条TCP连接只能是点对点的
- 提供可靠的交付服务,无差错、不丢失、不重复、按需抵达
- TCP提供全双工通信,需要有发送缓存(准备发送的数据或者已发送但未确认的数据)和接收缓存(已按序到达但上层未读取或者未按需抵达)
- 面相字节流,会把应用程序交付的数据看作为无结构的字节流
3.2 TCP报文段首部格式
TCP首部有20B的固定部分
-
源端口、目的端口:各占2位
-
序号:表示本报文段所发送数据的第一个字节的编号是多少
-
确认号:希望收到对方下一个报文段的第一个字节的编号是多少,如果确认号为n则表示前n-1个字节已经正确接受了
-
数据偏移:报文段的数据起始处距离TCP报文段起始处有多远,以4B为单位,可以通过此知道首部长度
-
控制位:
- 紧急位URG:表明该报文段有一个紧急数据,不会在发送方的TCP缓存中排队而是直接发送,可用于向对方发送接收缓存已满等紧急信息
- 确认为ACK:ACK=1时确认号有效
- 推送位PSH:接收方会直接向上交付数据,而不会等待报文全部到达后再交付
- 复位RST:TCP链接出现严重差错,必须释放连接,然后重新建立传输链接
- 同部位SYN:表明是一个连接请求/连接接受报文
- 钟志伟FIN:表明报文段发送方数据已经发送完毕,请求终止链接
-
窗口:指的是发送本报文段的一方的接收窗口,就是现在允许对方发送的数据量,单位为B
-
检验和:检验首部+数据部分,检验的时候需要加上12B的伪首部,第四个字段为6
-
紧急指针:只有在控制位URG=1才有用,指出紧急数据在本报文段中的位置和所占字节数
-
选项:最大保温长度MSS,窗口扩大、时间戳、选择确认
-
填充:为了保证TCP首部长度为4字节的整数倍
3.3 TCP连接管理
连接的建立
SYN洪泛攻击
发生在OSI的第四层网络层,攻击者只会发送TCP三次握手中的第一次握手的SYN报文段,而收到连接请求的服务器会发回ACK确认报文段,并且为该TCP链接分配缓存和变量。但是攻击者不会再进行下一步操作,而是不断的发送SYN请求建立连接报文,从而使得服务器建立大量的无用TCP链接,占满服务器的资源,从而使得服务器无法被正常访问
连接的释放
设置2MSL是为了防止第四个报文在传输过程中丢失。如果第四个报文在传输过程中丢失,那么服务器会再度传输一个3号报文来请求客户端断开连接,这个一来一回的过程一定发生在2MSL时间内。而客户收到重传的3号报文则会再次发送4号报文,并且重置计时器,再次等待2MSL。上述就是为什么要等待2MSL的原因
3.4 可靠传输
1.校验
和UDP一样,增加伪首部
2.序号
会对字节流进行编制,一个字节占一个序号,序号字段指的是一个报文段的第一个字节的序号。收到报文段之后,会返回ACK确认报文,用于表明下一个想要收到的字节的序号是多少。
3.确认
使用累次确认,如果1,2,3号字节已到达,4,5,6号中途丢失,但是7,8号到达,那么将会收下7,8号并且回传一个ACK=4的确认报文,用于表明下一个想要收到的报文段是序号为4开头的报文段
4.重传
TCP发送方在规定时间内没有收到确认就要重传报文段。TCP采用自适应算法,根据网络的情况动态改变重传时间RTTs
也有可以不需要等待的效率更高的重传机制:冗余ACK,指明下一个期待的字节序号
3.5 流量控制
如果发送方发送速率太快,接收方来不及接受,会导致大量丢包,TCP利用华东窗口机制实现流量控制。
在通信过程中,接收方根据自己接收缓存的大小没动态调整发送的发送窗口大小,接收方主要是用确认报文段中的窗口字段来控制发送方的窗口大小。如果rwnd=400,那么在下一次收到确认报文之前,最多只能发送400个字节的信息。而接收方的累次确认,也要在收到400个字节内给出下一个累次确认的ACK
在最后,接收方回传的ACK报文中rwnd=0,也就是不允许发送方发送数据了。此时发送方会启动一个持续计时器,如果计时器到期了接收方 依旧不允许发送,则发送一个零窗口的探测报文段,接收方接收后要给出现在的窗口值;如果窗口仍然为0,则重置计时器。
3.6拥塞控制
出现拥塞的条件:对资源要求的总和大于可用资源。拥塞控制是防止过多的数据注入到网络中。流量控制是防止传输速率过快导致接收方来不及接收;拥塞控制是保证不会因为链路上数据过多而导致传输速率下降
接收窗口:接收方根据接收缓存设置的值
拥塞窗口:发送方根据自己估算的网络拥塞程度而设置的窗口值
慢开始和拥塞避免
在开始时惠设置一个ssthresh值(慢开始门限),一开始每次只发送1个报文段,然后下一次发送报文段的数量指数型规律增长。在超过ssthresh值之后,则变为线性增长,直到发生了网络拥塞。一旦出现了网络拥塞,则将每次发送的报文段充分变为1,并且将ssthresh设置为拥塞发生时的单次发送报文段数量的一半
快重传和快恢复
快重传发生网络拥塞后不会将创建偶设为1,而是直接设为新的ssthresh值