一、核心考点总结
核心一:传输层的功能
从通信和信息处理的角度来看,传输层向它上面的应用层提供信息服务,属于面向通信部分的最高层(它的下层有物理层、数据链路层、网络层),同时是用户功能中的最低层(它的上层是应用层)。传输层位于网络层和应用层之间,为运行在不同主机上的进程之间提供逻辑通信。注意:进程之间的通信,也称为端到端的通信。
核心二:UDP的特点
(1)UDP是无连接的,即发送数据之前不需要建立连接,因此UDP具有较高的系统效率。例如,直播需要较高的效率,若使用TCP则因为连接建立、管理等开销可能会造成效率低等问题。
(2)UDP使用尽最大努力交付,即不保证可靠交付,也不使用拥塞控制。
(3)UDP支持一对一、一对多、多对一和多对多的交互通信。
(4)UDP的首部只有8字节,相比于TCP的20字节,具有较小的首部开销。
(5)UDP是面向报文的。
核心三:TCP的特点
(1)TCP是面向连接的传输层协议。
(2)每条TCP连接只能有两个端点,每条TCP连接只能是点对点的。
(3)TCP提供可靠交付的服务,保证传送的数据无差错、不丢失、不重复且有序发送。
(4)TCP提供全双工通信。
(5)面向字节流。
核心四:TCP连接建立
连接的建立经历以下3个步骤,通常称为“三次握手”,如图5-34所示。
(1)客户机A的TCP向服务器B发出连接请求报文段,其首部中的同步位SYN=1,并选择序号seq=x,表明传送数据时的第一个数据字节的序号是x,这个特殊的报文段中不含应用层数据,在考试中,这个是已知的。
(2)服务器B的TCP收到连接请求报文段后,若同意,则发回确认。服务器B在确认报文段中应使SYN=1,ACK=1,其确认号ack=x+1,自己选择的序号seq=y。在考试中,这个是已知的,确认报文段同样不包含应用层数据。需要注意的是,ACK和ack的区别,ACK表示确认信号是有效的;而ack表示希望收到的下一个TCP数据段的第一个字节的标号。
(3)当客户机收到确认报文段后,还要向服务器给出确认。这个报文段的ACK=1,seq=x+l,确认号字段ack=y+1。
图5-34 TCP连接的建立过程图
核心五:TCP连接释放
用“四次挥手”释放TCP连接,如图5-35所示。现在客户机A的应用进程先向其TCP发出释放连接报文段,并停止再发送数据,主动关闭TCP连接。
(1)客户机打算关闭连接,就向其TCP发送一个释放连接报文段,主动关闭TCP连接,该报文段的FIN标志位被置为1,seq=u,u等于前面已经传送过的数据的最后一个字节的序号加1(FIN报文段即使不携带数据,也要消耗掉一个序号)。当发送FIN报文时,发送FIN的一端就不能再发送数据,也就是关闭了其中一条数据通路,但服务器还可以发送数据。
(2)服务器收到释放连接报文段后即发出确认,确认号是ack=u+1,而这个报文段自己的序号u等于前面已经发送过的数据的最后一个字节的序号加1。此时,从客户机到服务器这个方向的连接就释放了,TCP连接处于半关闭状态。
图5-35 用“四次挥手”释放TCP连接
(3)若服务器已经没有要向客户机发送的数据,则通知TCP释放连接,此时其发出FIN=1的连接释放报文段。
(4)客户机收到释放连接报文段后必须发出确认,在确认报文段中,ACK字段被置为1,确认号ack=w+1,序号seq=u+1。
核心六:TCP拥塞控制
1.相关约定
闭环控制是基于反馈环路的概念。属于闭环控制的有3种措施:监测网络系统以便检测到拥塞在何时、何处发生;将拥塞发生的信息传送到可采取行动的地方;调整网络系统的运行以解决出现的问题。
其中,闭环控制是进行拥塞管理最主要的方法,该方法定义了4种算法:慢开始、拥塞避免、快重传、快恢复。下面介绍几个重要概念:
(1)MSS(Maximum Segment Size)是TCP报文段中的数据字段的最大长度。数据字段加上TCP首部才等于整个的TCP报文段。MSS告诉对方TCP:“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节。”
(2)接收窗口(rwnd):接收方根据目前接收缓存大小所允许的最新的窗口值,反映了接收方的容量,由接收方根据其放在TCP报文首部的窗口字段通知发送方。
(3)拥塞窗口(cwnd):发送方维持一个称为拥塞窗口的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地变化。发送方让自己的发送窗口等于拥塞窗口,发送方控制拥塞窗口的原则:只要网络没有出现拥塞,拥塞窗口就会再增大一些,以便把更多的分组发送出去。只要网络出现拥塞,拥塞窗口就会减小一些,以减少注入网络中的分组数。
(4)发送窗口:发送窗口的上限值应取接收窗口(rwnd)和拥塞窗口(cwnd)中较小的一个,即发送窗口的上限值=min(rwnd,cwnd)。
(5)传输轮次:把拥塞窗口(cwnd)所允许发送的报文段都连续发送出去,并收到了对已发送数据的最后一个字节的确认。一个传输轮次所经历的时间其实就是往返时间RTT。
2.慢开始和拥塞避免
拥塞控制背后的思想很直观,当网络中没有出现拥塞时,就逐渐增加发送的数据量,以实现充分发送数据的目标。当网络中出现拥塞时,立即减少发送的数据量,以便让网络有时间消化这些数据。
(1)慢开始算法。在TCP刚刚连接好,开始发送TCP报文段时,先令拥塞窗口cwnd=1,即一个最大报文段长度(MSS)。而在每收到一个对新的报文段的确认后,将cwnd加1,用这样的方法逐步增大发送方的拥塞窗口(cwnd),可以使分组注入到网络的速率更加合理。
例如,发送方A向接收方B发送数据,若发送时A的拥塞窗口为2,那么A一次可以发送两个TCP报文段,当经过一个RTT后(也称为一个传输轮次),A收到B对刚才两个报文的确认,于是就把拥塞窗口调整为4,下一次发送时就可以一次发送4个报文段。
使用慢开始算法后,每经过一个传输轮次(往返时延RTT),拥塞窗口(cwnd)就会加倍,即拥塞窗口的大小呈指数形式增长。这样慢开始一直把拥塞窗口(cwnd)增大到一个规定的慢开始门限(ssthresh)(阈值),然后改用拥塞避免算法。
(2)拥塞避免算法。当拥塞窗口达到慢开始门限值时,发送方的拥塞窗口(cwnd)每经过一个往返时延(RTT)就增加一个MSS的大小,使拥塞窗口(cwnd)按线性规律缓慢增长(加法增大),而当出现一次网络拥塞时,令慢开始门限(ssthresh)等于当前拥塞窗口(cwnd)的一半(乘法减小)。根据拥塞窗口(cwnd)的大小执行不同的算法,慢开始门限(ssthresh)的用法如下:
当cwnd<ssthresh时,使用慢开始算法。
当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法。
当cwnd=ssthresh时,既可使用慢开始算法,也可使用拥塞避免算法(通常做法)。
(3)网络拥塞的处理。当网络出现拥塞时,无论是在慢开始阶段还是在拥塞避免阶段,只要发送方检测到超时或者事件的发生,就要把慢开始门限(ssthresh)设置为出现拥塞时发送方拥塞窗口(cwnd)值的一半(但不能小于2),然后把拥塞窗口(cwnd)重新设置为1,执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够的时间把队列中积压的分组处理完毕。需要注意的是,拥塞避免并非完全能避免拥塞。利用以上措施要完全避免网络拥塞是不可能的,拥塞避免是指在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络不容易出现拥塞。
3.快重传和快恢复
(1)快重传算法。快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认。这样做可以让发送方及早知道有报文段没有到达接收方,如图5-36所示。
图5-36 快重传算法示意图
发送方只要一连收到3个重复确认,就应当立即重传对方尚未收到的报文段,而不必等待那个报文段设置的重传计时器超时。
(2)快恢复算法。当发送方收到连续3个冗余ACK(重复确认)时,就执行“乘法减小” 算法,把慢开始门限(ssthresh)设置为出现拥塞时发送方(cwnd)的一半。快恢复算法与慢开始算法的不同之处是:它把cwnd的值设置为慢开始门限(ssthresh)改变后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大,所以被称为快恢复。快恢复算法的实现过程如图5-37所示,作为对比,虚线为慢开始的处理过程。
①发送方发送窗口的实际大小由流量控制和拥塞控制共同决定。因此,当题目中同时出现了接收窗口(rwnd)和拥塞窗口(cwnd)时,发送方实际的发送窗口大小是由rwnd和cwnd中较小的那个确定的。
②当rwnd<cwnd时,是接收方的接收能力限制发送窗口的最大值。
③当cwnd<rwnd时,则是网络的拥塞限制发送窗口的最大值。
④在考试中,有这样一个考点,TCP Reno中的发送窗口减半的原因不是拥塞,是丢包,而TCP Tahoe中的发送窗口变为1的原因是超时或者拥塞。
图5-37 快恢复算法的实现过程
核心七:TCP首部格式
图5-38所示为TCP报文段首部。
图5-38 TCP报文段首部
TCP各字段的意义如下:
(1)源端口和目的端口字段各占2字节,端口是传输层与应用层的服务接口,传输层的复用和分用功能都要通过端口才能实现,通过端口可以标记相同计算机中的不同进程。
(2)序号字段占4字节。TCP是面向字节流的(就是说TCP传送时是按照一个个字节来传送的),TCP连接中传送的数据流中的每个字节都要编上一个序号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。例如,一报文段的序号字段值是301,而携带的数据共有100字节,这就表明本报文段的数据的最后一个字节的序号是400,故下一个报文段的数据序号应从401开始。
(3)确认号字段占4个字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。若确认号为N,则表明1~N-1的所有数据都已正确收到。
(4)确认位ACK。只有当ACK=1时,确认号字段才有效;当ACK=O时,确认号无效。TCP 规定,在连接建立后,所有传送的报文段都必须把ACK置1。
(5)同步位SYN。SYN=1表示这是一个连接请求或连接接收报文。
当SYN=1,ACK=O时,表明这是一个连接请求报文,对方若同意建立连接,则在响应报文段中使用SYN=1,ACK=1,即SYN=1表示这是一个连接请求或连接接收报文。
(6)终止位FIN(Finish)用来释放一个连接。FIN=1表明此报文段的发送方的数据已发送完毕,并要求释放传输连接。
(7)选项字段长度可变。TCP最初只规定了一种选项,即最大报文段长度(Maximum Segment Size,MSS)。