自考计算机网络原理(五)
第三章:传输层
一、传输层的基本服务
(一)传输层功能
传输层的核心任务是为应用进程之间提供端到端的逻辑通信服务。
传输层主要实现功能:对应用层报文进行分段和重组;面向应用成实现复用与分解;对报文进行差错检测;实现进程间的端到端可靠数据传输控制;实现端到端的流量控制;拥塞控制;传输层寻址。
(资料图片)
传输层端口号为16位整数,可以编号65536个。
FTP:21端口,HTTP:80端口,SMTP:25端口,DNS:53端口,POP3:110端口
(二)无连接服务与面向连接服务
传输层提供的服务可以分为无连接服务和面向连接服务两大类。
面向连接服务TCP:发送方和接收方在进行信息传输时,需要先建立传输链路,然后才能进行信息传输,信息传输完毕后再拆除该传输链路。
无连接服务UDP:无需与对端进行任何信息交换,直接构造传输层报文段并向接收端发送。
二、传输层的复用和传输
多路复用与多路分解:支持众多应用进程共用同一个传输层协议,并能够将接收到的数据准确交付给不同的应用进程
(一)无连接的多路复用与多路分解
Internet传输层提供无连接服务的传输层协议是UDP。UDP利用一个二元组〈目的lP地址,目的端口号〉唯一标识一个UDP套接字,从而可以实现精确分解。例子:视频直播用UDP
为UDP套接字分配端口号有两种方法:
①创建一个UDP套接字时,传输层自动地为该套接字分配一个端口号,该端口号当前未被该主机中任何其他UDP套接字使用;
②在创建一个UDP套接字后,通过调用bind()函数为该套接字绑定一个特定的端口号。
(二)面向连接的多路复用与多路分解
(1)Internet传输层提供面向连接服务的是TCP。TCP利用**一个四元组<源IP地址、源端口号、目的lP地址、目的端口号〉**唯一标识一个TCP套接字,即标识一条TCP连接,从而实现精确分解。
(2)四元组中的源端口号和目的端口号是TCP报文段首部字段,而源地址和目的地址则是封装TCP报文段的lP数据段的首部字段。
三、停 - 等协议与滑动窗口协议
(一)不可靠信道可能出现问题
(1)比特出错。
(2)乱序。
(3)数据丢失。
(二)可靠数据传输的基本原理
实现可靠数据传输的措施主要包括以下几种:
(1)差错检测:利用差错编码实现数据包传输过程中的比特差错检测。
(2)确认:接收方向发送方反馈数据接收状态。
(3)重传:发送方重新发送接收方没有正确接收的数据。
(4)序号:对数据包进行编号,确保数据按序提交。
(5)计时器:解决数据丢失问题,若在一定时间内发送方未收到接受方的反馈,则重新发送数据。
实现可靠数据传输的理论协议有停 - 等协议和滑动窗口协议等。
停 - 等协议只需使用1bit编号分组,每次发送一个分组,等收到确认后才能发送新的分组。
滑动窗口协议可以连续发送多个未被确认的分组。
(三)停-等协议
当发送方向接收方发送一个报文段后,就停下来等待接收方的确认。(发送数据,等待确认)
若收到接收方的报文段已正确接收的确认信息ACK,则继续发送下一个报文段;若收到接收方的报文段错误接收的否定信息NAK,则重新发送该报文段。(否认确定)
若在一定时间内(计时器计时结束)没有收到ACK或NAK,则重新发送该报文段。(重传数据)
这种重传机制的可靠数据传输协议称为自动重传请求(ARQ)协议,最简单的ARQ协议就是停一等协议。
(四)滑动窗口协议
最典型的流水线可靠传输协议是滑动窗口协议。
滑动窗口协议的发送方和接收方各维护一个窗口,分别称为发送窗口Ws和接收窗口Wr。发送窗口的大小表示了发送方可以一次性发送的未被确认分组的最大数量,接收窗口的大小则表示了接收窗口可以接收并缓存的正确达到的分组的最大数量。
若发送窗口收到接收窗口关于基序号“5”的确认接收ACK,则发送窗口向右滑动一位。(基序号是发送窗口中第一个等待确认信号ACK的分组。基序号左边是已发送并已收到接收方确认接收ACK的分组;在发送窗口内,基序号右边是已发送未被确认的分组,而在发送窗口外的右边是等待发送的分组)
两种最具代表性的滑动窗口协议是:回退N步(GBN)协议和选择重传(SR)协议。
(五)GBN协议(Go-Back-N)
发送窗口Ws>=1,接收窗口Wr=1
要求:
发送端缓存能力高,可以在没有得到确认前发送多个分组。
接收端缓存能力很低,只能接收一个按序到达的分组,不能缓存未按序到达的分组。
应用:
(1)GBN发送方必须响应的三种事件类型
①上层调用。在发送数据前先检查发送窗口是否已满,若未满则用“下一个可用序号”对要发送的数据进行编号,送入发送窗口中等待发送;若窗口已满在,发送方则暂不响应上层调用,拒绝发送新数据。
②收到1个ACKn。GBN采用累积确认方式,即发送方收到ACKn时,表明接收方正确收序号n以及序号小于n的所有分组。
③计时器超时。发送方只使用一个计时器。
(2)GBN协议接收方
①当正确接收到序号为n的分组时,向发送方发送一个ACKn,并将该分组提交给上层,这时接收窗口滑动到序号n+1位置,准备接收序号为n+1的分组;(分组的序号在传输过程中可能会出错,比如丢失或乱序)
②若这时接收的分组序号不是n或分组差错等,接收方丢弃该分组并向发送方发送ACK即为ACKn-1。
(六)SR协议(Selective Repeat)
发送窗口Ws>1,接收窗口Wr=1
要求:
发送端缓存能力高
接收端端缓存能力高
在GBN协议中由于只有一个定时器,所以发送方无法全部确定接收方已经正确接收的分组序号,故不得不重新发送接收方已经正确接收的分组,而SR协议就是GBN协议的优化改进版。
(1)SR发送方响应事件:
①上层调用。
②计时器超时。发送方对每个分组进行计时。
③收到ACKn。SR协议采取逐个确认方式。
(2)SR协议接收方主要操作分为3种情况
①正确接收到序号在接收窗口范围内的分组PKTn。
②正确接收到序号在接收窗口左侧的分组PKTn。
③其他情况,接收方可以直接丢弃分组,不做任何响应。
提示:滑动窗口协议的窗口大小与序号空间需要满足一个约束条件:发送窗口大小与接收窗口大小之和不大于分组序号空间大小。
(七)信道利用率的计算
对于停-等协议,可以看做特殊的滑动窗口协议,即Ws=Wr=1于是有k≥1。这个结论也说明了停-等协议分组序号只需使用1位编号就足够的原因。
事实上,停-等协议、GBN协议或是SR协议,其信道利用率都可以统一表示为滑动窗口协议的信道利用率:
四、用户数据报协议(UDP)
(一)UDP定义
UDP是Internet传输层协议,提供无连接、不可靠、数据报尽力传输服务。UDP提供一种不可靠数据传输,不保证将报文送达目的地,即使送到了也可能是乱序到达的。
(二)UDP传输协议的优点
虽然UDP提供不可靠传输服务,但通过一定的措施,使用UDP仍可以实现可靠数据传输。UDP的优点如下:
应用进程更容易控制发送什么数据以及何时发送,实时性高。
无需建立连接,传输数据前不必建立连接,节省时间。
无连接状态,因不必建立连接,所以不必维护该连接链路,故开销小。
首部开销小,相比首部开销至少有20字节的TCP报文段,UDP仅有8字节。
(三)UDP数据报结构
UDP首部四个字段:每个字段由2个字节组成,共8个字节,也就是32位(0~31)。
源端口号和目的端口号:UDP实现复用和分解
长度:知识UDP报文段中的字节数(首部和数据的总和)
校验和:接收方使用来检测数据报是否出现差错
(四)UDP校验和(提供了差错检测功能)
校验和计算规则:
(1)所有参与运算的内容按16位对齐求和.
(2)求和过程中遇到溢出(即进位)都被回卷(即进位与和的最低位再相加)。
(3)最后得到的和取反码,就是UDP的校验和,填入UDP数据报的校验和字段。
所有参与运算的内容包括3部分:UDP伪首部、UDP首部、应用数据。
五、传输控制协议(TCP)
(一)TCP定义
TCP是Internet的一个重要传输层协议,提供面向连接、可靠、有序、字节流服务。
TCP是面向连接的传输层协议,并且提供全双工通信服务,即允许通信双方的应用进程在任何时候都能发送和接收数据。
(二)TCP报文段结构
特点:
1.应用进程先建立连接。
2.每一条TCP链接只有两个端点。
3.可靠交付:无差错、不丢失、不重复、按序到达。
4.全双工通信。
5.面向字节流。
20字节固定首部(可选+填充)可以是0-40B
源端口号字段,目的端口号字段:占16位。复用和分解上层应用的数据
序号字段、确认序号字段:占32位。
序号字段:TCP的序号是对每个应用层数据的每个字节进行编号
确认序号字段:期望从对方接受数据的字节序号,即该序号对应的字节尚未收到
首部长度字段:占4位。指出TCP段的首部长度,以4字节为计算单位
保留字段:占6位。保留为今后使用,目前值为0
URG、ACK、PSH、RST、SYN、FIN各占1位。为标志位字段;各占1位,取值为0或1
接收窗口字段:占16位。向对方通告我方接收窗口的大小。实现TCP的流量控制。
校验和字段:占16位。计算方法和UDP相同。
紧急指针字段:占16位。URG=1时,才有效。指出在本TCP报文段中紧急数据共有多少字节。
选项字段长度可变,最短0字节,最长40字节。
要点:
序号字段:TCP的序号是对每个应用层数据的每个字节进行编号。
确认序号字段:期望从对方接受数据的字节序号,即该序号对应的字节尚未收到。用ack_seq表示。
TCP段的首部长度最短是20字节。最长为60字节。
(三)TCP连接管理
TCP连接管理包括连接建立与连接拆除。
TCP连接建立通过“三次握手”过程:
(1)第一次握手:客户端作为连接建立发起端,选择客户端初始序列号X,向服务器发送(SYN=1(建立连接请求控制段),seq=x(表示传输的报文段的第1个数据字节的序列号是x,此序列号代表整个报文段的序号。))的SYN段。客户状态由LISTEN进入SYN-SEND(同步发送)状态,等待服务器确认。
(2)第二次握手:服务器收到客户发送的SYN段后,选择服务器初始序列号y,向客户发送(SYN=1(同意建立新连接的确认段),ACK=1(确认序号字段有效),seq=y(服务器告诉客户确认报文段的序列号是y),ack_seq=x+1(服务器已经收到了序列号为x的报文段,准备接受序列号为x+1的报文段))的SYNACK段。同时,服务器状态由LISTEN进入SYN_RCVD(同步收到)状态。
(3)第三次握手:客户端收到服务器的SYNACK段后,向服务器发送(ACK=1(确认序号字段有效),seq=x+1(客户此次的报文段的序列号是x+1),ack_seq=y+1(客户期望接受服务器序列号为y+1的报文段))的ACK段,同时,客户端进入ESTABLISHED状态,客户端确认连接已建立;当服务器收到ACK段后,也进入ESTABLISHED状态,也确认连接已建立。至此,双方均确认连接建立成功。
第三次握手克携带数据。
为什么需要三次握手?
第一次握手:客户发送请求,此时服务器知道客户能发。
第二次握手:服务器发送确认,此时客户知道服务器能发能收。
第三次握手:客户发送确认,此时服务器知道客户能收。
建立连接过程中客户端和服务器端的状态名称与含义:
(1)建立连接过程中客户端的状态名称含义如下:
①关闭状态CLOSED,处于初始状态;
②同步已发送状态SYN_SENT;
③已建立状态ESTABLISHED,表示可以传送数据。
(2)建立连接过程中服务器端的状态名称与含义:
①关闭状态CLOSED,处于初始状态;
②监听状态LISTEN;
③同步收到状态SYN_RCVD;
④已建立状态ESTABLISHED,表示可以传送数据。
TCP断开连接的过程(四次挥手):TCP连接采用四次挥手的对称断连机制:
(1)第一次挥手。当客户向服务器发送完最后一个数据段后,可以发送一个FIN段(FIN=1(发送端数据发送完毕,请求释放连接),seq=u(传输的第一个数据字节的序号是u)),请求断开连接,其状态由ESTABLISHED进入FIN_WAIT_1(终止等待1状态),只能接受数据,不能发送数据。(FIN段不封装应用层数据,但是也要消耗1个序列号)
(2)第二次挥手。服务器收到客户的FIN段后,向客户发送一个ACK段(ACK=1(确认序号字段有效),seq=v(服务器传输的数据序号是v),ack_seq=u+1(服务器期望接收客户数据序号为u+1))。服务器状态由ESTABLISHED进入CLOSE_WAIT(关闭等待),服务器仍然可以发送数据,但不再接受数据。当客户收到ACK段后,其状态由FIN_WAIT_1进入FIN_WAIT_2,可以接受服务器的数据,此时处于半关闭状态。
(3)第三次挥手。当服务器向客户发送完最后一个数据段后,服务器向客户发送FIN段(FIN=1(请求释放连接),ACK=1(确认序号字段有效),seq=w(表示自己传输的第一个数据字节的序号是w),ack_seq=u+1(表示自己传输的第一个数据字节的序号是u+1)),该FIN段也不携带应用层数据。服务器状态由CLOSE_WAIT进入LAST_ACK(最后确认状态),此时服务器也不再发送数据。
(4)第四次挥手。当客户收到服务器发送的FIN段后,向服务器发送ACK段(ACK=1(确认序号字段有效),seq=u+1(表示客户传输的数据的序号是u+1),ack_seq=w+1(表示客户期望接收服务器数据序号w+1)),其状态由FIN_WAIT_2进入TIME_WAIT,等待2MSL时间,进入CLOSED状态,最终释放连接;服务器在收到最后一次ACK段后,状态由LAST_ACK进入CLOSED,最终释放连接。
断开连接过程中,客户端和服务器端状态名称与含义:
(1)断开连接过程中,客户端状态名称与含义如下:
①ESTABLISHED状态,表示可以传送数据;
②FIN_WAIT_1终止等待1状态,等待服务器端的确认;
③FIN_WAIT_2终止等待2状态,等待服务器发出的连接释放报文段;
④TIME_WAIT时间等待状态,表示等待2倍MSL时间后进入关闭状态CLOSED。(MSL是最大段生存时间,是任何TCP段被丢弃前在网络内“存活”的最长时间。TCP规范[RFC793]规定的MSL是2min)。
(2)断开连接过程中,服务器端状态名称与含义:
①ESTABLISHED,表示可以传送数据;
②CLOSED_WAIT关闭等待状态;
③LAST_ACK最后确认状态;
④CLOSED关闭状态。
(四)TCP可靠数据传输
TCP的可靠数据传输服务保证了传输的数据流是无差错、无缺失、无冗余以及无乱码的字节流,可靠数据传输的实现机制包括:差错编码、确认、序号、重传、计时器等。重传数据段的具体事件有计时器超时和收到三次重复ACK等。
滑动窗口协议
1.可靠:保证接受方应用进程从缓冲区读出的字节流与发送方发出的字节流是完全一样的(无差错、不丢失、不重复、按序到达)。
2.TCP实现可靠数据传输服务的工作机制。
分段:应用层数据成TCP认为最适合发送的数据块
应用层:报文=》传输层:TCP报文段
最大报文段(MSS):报文段中封装的应用层数据的最大长度(数据)
序号:发送方对发送的数据包进行编号,确保数据按序提交给接收方
确认:接收方向发送方反馈接收状态,确认是否正确接收数据
TCP通常采用的是累积确认
查错检测:利用差错编码实现数据报传输过程中的比特差错检测(甚至纠正)
重传:发送方重新发送接收方没有正确接收的数据
主要针对两类事件:三次重复确认和计时器超时
计时器:再发送方引入计时器,解决数据丢失问题
计时器超时时间设置:
TimeoutInterval=EstimatedRTT+4*DevRTT
EstimatedRTT:抽样RTT的加权移动平均值
DevRTT:偏差RTT
4.流量控制
协调发送方与接收方的数据发送与接受速度
在通信过程中,接收方设置报文段的接收窗口字段来将窗口大小通知给发送方
TCP的可靠数据传输是基于滑动窗口协议,根据发送窗口大小动态变化。
(五)TCP流量控制:流量控制的目的是协调发送方与接收方间的数据发送和接收速度,避免发送方发送数据的速度太快,超出接收方的数据接收和处理能力,导致数据丢失等问题。实现流量控制的方法可以采用停 - 等协议或滑动窗口协议来实现。
在通信过程中,接收方设置报文段的接收窗口字段来将窗口大小通知给发送方。
(六)TCP拥塞控制
拥塞:太多的主机以太快的速度向网络中发送太多的数据,超出了网络处理能力,导致大量数据分组拥挤在中间设备队列中等待转发,网络性能显著下降的现象。
拥塞控制:通过合理调度、规范、调整向网络中发送数据的主机数量、发送速率、数据量,以避免拥塞或消除已发生的拥塞。
拥塞预防策略:规范主机向网络发送数据的流量。
TCP的拥塞控制算法包括了慢启动、拥塞避免、快速重传和快速恢复四部分。
RTT:图表中的横轴RTT表示时间,发送方发送数据并接收到接收方对这个数据的ACK确认信息,这段时间称为一个RTT;
拥塞窗口:滑动窗口的大小,单位为MSS;
慢启动阶段:通常拥塞窗口的初值为1,在慢启动阶段(图表中0~4和13~17RTT),每收到一个确认ACK,拥塞窗口增加1MSS,每经过一个RTT,拥塞窗口增长1倍;
拥塞避免:通常阀值的初值为16(如图所示),当阀值增长到16MSS时进入第一个拥塞避免阶段(图表4~12RTT);在拥塞避免阶段,每经过一个RTT,阀值才增加一个MSS;
快速恢复:在拥塞避免阶段,若发送方收到3次重复的ACK(图表中TCP Reno版本所示),则说明网络拥塞,将阀值缩减到一半,然后继续进入拥塞避免阶段。
计时器超时:在拥塞避免阶段,若发送方出现计时器超时现象(图表中TCP Tahoe版本所示),则说明网络严重拥塞,直接将阀值缩减到1Mss,然后经过慢启动阶段到达缩减前一半的阅值时,进入拥塞避免阶段。