《计算机网络》之运输层

来源:互联网 发布:微信支付服务端java 编辑:程序博客网 时间:2024/05/21 18:32

运输层

一、引言

       前面说过,运输层负责向两个主机中的进程之间的通信提供服务。它是面向通信部分的最高层,也是用户功能中的最低层。

     运输层提供复用(multiplexing)和分用(demultiplexing)的功能,还对报文进行差错检测。它的两个主要协议是无连接的用户数据报协议UDP (User DatagramProtocol)和面向连接的传输控制协议TCP (Transmission ControlProtocol)。

       运输层使用协议端口号(protocol port number)来识别主机上的进程。端口号只具有本地意义,分为两大类:服务器端使用的端口号(又分为熟知端口号和登记端口号)和客户端使用的端口号(短暂端口号)

二、UDP和TCP

       UDP和TCP的特点如下表。

 

UDP

TCP

相同点

①复用和分用的功能

②差错检测功能

不同点

①无连接

①面向连接

②尽最大努力交付

②可靠交付

③面向报文(对上层交下来的报文既不合并也不拆分)

③面向字节流

④无拥塞控制

④有拥塞控制

⑤支持m对n的交互通信

⑤只支持点对点的全双工通信

⑥首部开销小(8字节)

⑥首部相对大(20字节)

       UDP的首部格式如下。

       “检验和”检测整个数据报。计算方法同IP数据报。检验时加上伪首部。

       TCP报文段的首部格式如下。


       “序号”对每个字节都按序编号;“确认号”是期望收到的下一个字节的序号;“数据偏移”是首部长度,单位为4字节;检验和与UDP类似。TCP报文段首部长度为20~60字节

 “紧急指针”和“紧急URG”位用来传送紧急消息(下面仅作为学问扩充与探讨来介绍)。TCP的紧急机制是允许发送者使接收者接收一些紧急消息,并让接收方在接收到这一消息后立刻通知用户。这种机制是在数据流是加入一个点(紧急指针),指出这是紧急数据的结束点,当接收方要接收到这个点之前,它会通知用户进入紧急状态,在接收到这个点的数据后,它会通知用户进入通常状态。好像紧急数据不仅会优先发送,还会优先接收。这一点还请知情人士和我一起讨论

       可以发现,UDP和TCP中都出现了“伪首部”这一字段。伪首部仅仅是为了计算检验和,既不向下传送也不向上递交。Stevens 的《tcp/ip详解卷一 协议》书中原话“其目的是让UDP两次检查数据是否已经正确到达目的地”。第一次,通过伪首部的IP地址检验,UDP可以确认该数据报是不是发送给本机IP地址的;第二,通过伪首部的协议字段检验,UDP可以确认IP有没有把不应该传给UDP而应该传给别的高层的数据报传给了UDP。从这一点上,伪首部的作用其实很大。

三、TCP的“高级功能”

       我们知道,TCP比UDP多了很多功能,也使得它表现得更加强大。这里不是说UDP比TCP差,它们各有各的用处。比如在视频会议等实时性比可靠性更重要的应用中,或要求开销小的场合下,还是非UDP莫属的。TCP的“高级功能”主要有可靠传输、流量控制、拥塞控制和连接管理四部分。下面我们来进行一一介绍。

3.1 可靠传输

       理想的传输条件有以下两个特点:传输信道不产生差错;不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据

       最简单的方法是停止等待协议。它能自动重传。信道利用率U=T_D/(T_D+RTT+T_A )(咦,CSDN里面不能粘WORD的公式啊……这里公式里面的下划线就是下标的意思)。T_D为单个分组的发送时间,T_A是确认分组发送时间,RTT为往返时间。

       停止等待协议的缺点是信道利用率太低。因此采用流水线传输,即一次连续发送多个分组。可以使用连续ARQ协议滑动窗口协议

       滑动窗口协议是可靠传输的最重要的协议。最复杂的问题之一就是超时重传时间的选择

       超时重传时间RTO(Retransmission Time-Out)应略大于RTT。但考虑到网络是动态的,RTT时刻在变化,因此需要动态计算出两个参数——加权平均往返时间偏差的加权平均值——来动态得出RTO的值:RTO=RTT_S+4×RTT_D。

其中,RTT_S=(1-α)×(旧的RTT_S )+α×(新的RTT样本)

RTT_D=(1-β)×(旧的RTT_D )+β×|RTT_S-新的RTT样本|

通常,α=1/8,β=1/4。

3.2 流量控制、拥塞控制

       流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收。采用将自己的接收窗口rwnd值反馈给发送方的方式来动态控制发送方的发送窗口。

       拥塞控制(congestion control)就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载

       两者的区别是流量控制是端到端的问题,考虑接收方的接收;而拥塞控制是涉及到全局的问题,考虑网络的畅通。

       拥塞控制的四种算法是非常重要的机制:慢开始(slow-start)、拥塞避免(congestion avoidance)、快重传(fast retransmit)、快恢复(fastrecovery)

       由于算法三言两语说不清,所以在这里只总结一下。如果对算法不熟悉最好要看教材。

(1)慢开始

       刚开始时设置拥塞窗口cwnd=发送窗口=1 MSS(最大报文段)。接着每经过一个传输轮次,cwnd和发送窗口就加倍,直到cwnd>ssthresh(慢开始门限)。

(2)拥塞避免

       cwnd>ssthresh后,每经过一个传输轮次,cwnd就加1MSS(加法增大),而不是加倍。直到网络出现拥塞(超时)。

       出现拥塞后将ssthresh设置为此时cwnd的一半(乘法减小),然后把cwnd置1,执行慢开始算法

(3)快重传

       接收方收到失序的报文段后就立即发出重复确认,且接下来每收到一个报文段都发送一次重复确认。发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段

(4)快恢复

       发送方连续收到三个重复确认时,执行乘法减小算法,把ssthresh设置为cwnd的一半,然后(不执行慢开始)把cwnd也设置为ssthresh的数值,执行加法增大算法

       在实际中发送窗口不一定一直等于cwnd,因为它还要受接收窗口rwnd的限制。

       TCP还使用随机早期检测RED (Random Early Detection)来在路由器的平均队列长度介于最大门限和最小门限之间时就以概率p随机丢弃个别分组,来避免全局同步(多条TCP同时拥塞,又几乎同时恢复)。p不是常数。

3.3 连接管理

       这节比较简单。TCP的连接建立过程是三次握手客户机请求并设置客户端发送的初始序号、服务器确认请求并设置服务器端发送的初始序号、客户再次确认前两次都各消耗一个序号,第三次如果报文段不携带数据则不消耗序号。(我就是在期末考试中忘记了才做错了一道题)

       连接释放相对较复杂,经过两个二次握手。第一次握手(客户端发起)使TCP连接处于半关闭状态,客户端不能发送数据,而服务器端还可以;第二次握手(服务器端发起)结束连接。

四、尾声

       好了,运输层的内容终于介绍完了。可以看出运输层和网络层的内容最多,也十分重要,需要好好理解并适当记忆。网络层主要是IP数据报、RIP报文、OSPF报文、RIP/OSPF的区别,运输层主要是UDP用户数据报、TCP报文段、UDP/TCP的区别、TCP的高级功能。

       本文留下了一个问题,关于紧急数据的,应该不会考,不过还是值得探讨的。欢迎大家不吝赐教!

原创粉丝点击