计算机网络--运输层
运输层
一、运输层协议概述
1. 进程之间的通信
运输层的主要作用是完成进程间的通信,而网络层主要则是负责不同主机间的通信。
2. 运输层的两个主要协议
(1)用户数据报协议 UDP
(2)传输控制协议 TCP
二、用户数据报协议 UDP
1、UDP 的主要特点是:
(1)无连接
(2)尽最大努力交付,即不保证可靠传输
(3)面向报文,UDP对应用层交下来的报文,既不合并,也不拆分,而是在添加 UDP 的首部后,便直接交给了网络层
(4)无拥塞控制
(5)支持一对一、一对多、多对多的交互通信
(6)UDP的首部开销小,只有 8 个字节,比 TCP 的 20 个字节短
2、UDP 的首部格式:
(1)源端口:源端口号。在需要对方回信时选用。不需要时可用全0。
(2)目的端口:目的端口号。这在终点交付报文时必须要使用到。
(3)长度:UDP 用户数据报的长度,其最小值是8(仅有首部)。
(4)校验和:校验 UDP 用户数据报在传输时是否有错。有错就丢弃。
伪首部:并不被用于传输,仅在计算检验和时,在UDP的用户数据包之前临时增加的12个字节的伪首部。
三、控制传输协议 TCP
1、TCP 的主要特点:
(1)面向连接,进行数据传输前,必须建立TCP连接,保证通信双方都可以发送和接收信息
(2)只支持点对点通信
(3)可靠交付。通过 TCP 连接传送的数据,无差错、不丢失、不重复、并且按序到达。
(4)全双工通信。允许通信双方的应用进程在任何时候都能发送数据。
(5)面向字节流。TCP 将应用层传送下来的数据块看作字节流,每一个字节都有对应的编号。
2、TCP 的连接:
每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定。
TCP 连接 = {socket1,socket2} = {(IP1,port1),(IP2,port2)}
四、可靠传输的工作原理
网络层所提供的是不可靠传输,因此,TCP 必须采用适当的措施才能使得两个运输层之间的通信变得可靠。
1. 停止等待协议
“停止等待”就是每次发送完一个分组就停止发送,等待对方的确认。在收到后再发送下一个分组,如果再指定时间内还没有收到确认,则可以认为数据丢失,重新发送一遍数据。
缺点:每次发送都需要获得对方的确认,造成效率低下。
2. 连续 ARQ 协议
下图是发送方维持的发送窗口,其意义是:位于发送窗口内的5个分组都可以连续的发送出去,而不需要等待对方的确认。
ARQ 协议固定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。
接收方一般采用累计确认的方式,即及受访不必对收到的分组逐个发送确认,而是再收到几个分组后,对按序到达的最后一个分组发送确认,即该分组之前的数据已全部到达。
缺点:倘若中间的数据 3 丢失,但是 4、5已经到达,那么接收方将发送数据 2 的确认,此时发送并不知道 4、5 有没有到达,因此会重新发送数据 4、5。
五、TCP 报文段的首部格式
(1)源端口和目的端口 各占 2 个字节,分别写入源端口号和目的端口号
(2)序号 占 4 个字节,在一个 TCP 连接中传送的字节流中的每一个字节都是按顺序编号。例如,一报文段的序号字段值是 301,而携带的数据共有 100 字节。这就表明:本报文段的数据的第一个字节的序号是301,最后一个字节的序号是 400,下一个报文段的第一个字节的序号是 401.
(3)确认号 占 4 个字节,是期望收到对方下一个报文段的第一个数据字节的序号。例如,B 正确收到了 A 发送过来的一个报文段,其序号字段值是 501 ,而数据长度是 200 字节(序号 501 ~ 700),这就表明 B 正确收到了 A 发送的到序号 700 为止的数据。因此,B 期望收到 A的下一个数据序号是 701,,于是 B 在发送给 A 的确认段报文段中确认号置为 701。
若确认号 = N,则表明:到序号 N-1 为止的所有数据都已正确收到。
(4)数据偏移 占 4 位,它指出 TCP 报文段中数据起始处距离 TCP 报文段的起使处有多远。这个字段实际上是指出 TCP 报文段的首部长度。
(5)保留 占 6 位,保留字段,今后使用
(6)紧急 URG 当 URG = 1,表明紧急指针字段有效。告辞系统此报文段中有紧急数据,应尽快传送,而不需要按原来的排队顺序来传送。
(7)确认 ACK 仅当 ACK = 1时确认号字段才有效。TCP 规定,在建立连接所有传送的报文段都必须把 ACK 置 1。
(8)推送 PSH 接收方 TCP 收到 PSH = 1 的报文段,就尽快地(即 “推送” 向前)交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
(9)复位 RST 释放连接,重新建立运输连接。
(10)同步 SYN 在连接建立时用来同步序号。当 SYN = 1,ACK = 0 表明这是一个连接请求报文段。当 SYN = 1,ACK = 1,表示这是一个连接接收报文段。
(11)终止 FIN 用来释放一个连接。当 FIN - 1 时,表示此报文段地发送方数据已发送完毕,并要释放连接。
(12)窗口 窗口值作为接收方让发送方设置其发送窗口地依据,即接收方当前能处理数据的大小。
(13)检验和 计算检验和同 UDP 一样,要在 TCP 报文段的前面加上 12 字节的伪首部。
(14)紧急指针:只有当紧急标志置位 URG = 1,该16位的字段才有效。紧急指针定义了一个数值,把这个数值加到序号上就得到版文段数据部分中最后一个紧急字节的编号。
(15)选项:40字节可选信息。
六、TCP 可靠传输的实现
1、以字节为单位的滑动窗口
上图可以看作是一个滑动窗口,其后沿左边的数据是已经被接收方收到的数据,这些数据可以从缓冲区删除。而后沿和前沿之间的数据是允许发送的序号,倘若此时发送了这些数据,但是并不能够立即丢弃,因为我们可能需要重新发送。而前沿之前的数据,并不能被发送,因为这些数据并不能被接收方处理,其处理数据能力有限。
简而言之,滑动窗口就是接收方根据自己当前的处理能力,告诉发送方发送多大的数据即可。
2、超时重传
超时重传即在指定时间内还没有收到接收方的确认报文,则可以认为数据段已经丢失,需要重新发送。
3、选择确认 SCAK
若收到的报文段无差错,只是未按序号,中间还缺少一些序号的数据,那么能否设法只传送缺少的数据而不重传已经正确到达接收方的数据?而 SCAK 可以解决该问题。
七、TCP 的流量控制
流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
前面我们介绍滑动窗口时,说过滑动窗口就是接收方根据自己当前的处理能力,告诉发送方发送多大的数据。
所以,我们根据滑动窗口便可以实现流量控制。
八、TCP 的拥塞控制
拥塞控制同样时控制数据的发送,不同的时,拥塞控制是站在整个网络的全局上来分析,而流量控制只是点对点之间的控制。
拥塞控制有如下方法:
1、慢开始和拥塞避免
发送方维持一个叫做拥塞窗口 cwnd 的状态变量。拥塞窗口的大小取决于网络的拥塞程度。机制类似于滑动窗口,网络好则可以多发送数据,否则少发送数据。
慢开始:主机发送数据时,如果立即把大量数据字节注入到网络,那么就有可能引起网络拥塞。因此,最好的方法是先探测一下,由小到大逐渐增大发送窗口。
拥塞避免:让拥塞窗口 cwnd 缓慢增大,即每经过一个往返时间 RTT 就把发送方的 cwnd + 1,而不是加倍。
2、快重传和快恢复
快重传:接收方每收到一个失序的报文段就立即发出重复确认,发送方只要连续收到三个重复确认就立即重传丢失的报文段。好处:不需要重传计时器到期就发现有数据丢失。
快恢复:把 cwnd 值设置减半,然后开始执行拥塞避免算法,使拥塞窗口缓慢地线性增大。
为什么不直接将 cwnd 置为 1 ?
此时发送方认为网络很有可能没有发生拥塞(如果发生拥塞,就不会有好几个连续地报文段到达接收方)。
九、TCP 的运输连接管理
1. TCP 的连接建立
seq: 序号
ack:确认序号
为什么 A 还要发送一次确认(两次握手不可以吗)?防止已失效的连接请求报文段突然又传送到B,因而产生错误.
我个人理解则是,要建立连接,发送方和接收方都能够确认彼此可以发送和接收信息,而三次恰好可以做到。
2. TCP 的连接释放
为什么要接收方需要两次应答?
因为发送方要关闭连接时,只是说明其没有数据要发送了,但是此时接收方还需要通知应用层有没有数据要发送给发送方。如果有数据的话,并不能立即关闭连接。
发送方为什么要等待 2MSL 的时间?
保证发送方的应答不会在网络中丢失,而导致连接不能关闭。
本文引用自《计算机网络》第六版 谢希仁老师 编著