计网笔记_3

HopeMaker3年前 (2021-12-12)计算机网络507

第3章 传输层

3.1 概述

传输层的工作原理:多路复用/解复用

RDT reliable data transfer

流量控制、拥塞控制

 

传输服务和协议:位运行在不同主机上的应用进程提供逻辑通信

TCP: Transmission Control Protocol,传输控制协议

UDP:User Datagram Protocol,用户数据报协议

传输层UDP把主机到主机的服务细分为进程到进程,TCP则还是主机到主机。

传输层把下层网络层提供的不可靠的服务变得更可靠。

 

传输层一个很重要的作用就是复用和解复用,也就是从主机细分到进程的过程:

TCP的PDU叫TCP段segment,也就是在发端,TCP把上层应用层的报文拆成了一个个段(带有socket和四元组)送给下层去传输,这就是复用,而到了收端的传输层,收端的TCP把接收到的这些段做好区分合到一起,就是解复用。

 

Internet传输层协议:TCP可靠,UDP不可靠

 

3.2   多路复用和解复用

通过引入port概念,在TCP的四元组,UDP的二元组和cad中,包含必要信息,收端根据源端口号和源IP可以定位到socket,故而可以实现报文的收发。

 

3.3   无连接传输UDP

UDP被用于:

流媒体传输,注重实时性;

DNS,查询简单;

SNMP简单网络管理协议。

 

UDP的无连接:通信前不需要握手,每个UDP数据包datagram被单独处理。

UDP有32个比特bit(4个字节byte)的头head,源IP、源端口、长度、校验和各1字节后面才是报文。

 

为什么要UDP:

不建立连接;发端收端之间没有连接状态,简单;报文段头部开销小;无拥塞控制机制和流量控制机制,顾虑的情况少。

 

UDP校验和check sum:(差错检测编码)

发端和收端计算校验和判断是否出错

 

 

3.4   RDT可靠数据传输 原理

RDT在应用层、传输层、链路层都很重要。

 

下层提供的服务是UDP不可靠数据传输,协议要使之可靠再向上层提供可靠的服务。

只考虑单向的信息传输(把双向的通信拆成两个单向的过程,每个过程都有发端和收端)

使用有限状态机FSM,Finite State Machine来标记发端和收端。

RDT:

假设下层提供的服务可靠,那么RDT只需要实现复用和解复用就可以了,但是下层提供的服务是不可靠的,所以RDT只能复用解复用是不够的;

RDT协议检错(提高可靠性)流程:

发送端发送packet过去之后就进入等待确认状态,接受方接到对的packet后回复ACK确认,发送方接收到ACK之后就可以发新的packet,接收方接到packet不对就回复NAK,表示没通过校验,此时发送方接收到NAK之后发送旧的packet(重发一遍)。这种协议方式的问题在于ACK和NAK也可能出错,所以再引入序号机制,给packet加入序号,如果接收到的ACK/NAK出了问题,就把packet重新发一遍,因为带了序号,所以即使重复发送了,收端也可以根据序号辨别,如果没重复,接收方将等待的序号在packet带来序号的基础上+1,真的重复了,接收方就把ACK/NAK重新发一遍。

因为有ACK和NAK两种会使情况变得复杂,所以:不区分ACK和NAK,只用ACK,给ACK编码,假设发送packet0,收端接收时出错,那么接收端回复ACK1,相当于使用非packet序号编号的ACK代替了原来的NAK。

而实际通信过程中,分组甚至会丢失,比如packet和ACK都有可能丢失,所以需要引入超时重传机制,顾名思义,通过超时timeout定时器,发送方在等待状态经过了一段超过分组往返的时间(这个时间是自适应计算的),就重新发送分组,接收方也是一样的超时机制,因为分组带有序列,所以不用担心重复。

自此,RDT可以对抗丢失和出错。

但是RDT协议还有问题,发一个等一个,信道利用率太低,传输过程的瓶颈变成了协议本身是万万不可的,所以还要再改进。

怎么改进呢?流水线pipeline协议,一个分组发出去,不等收端回复确认就接着发下一个分组,就可以一直发一直发,但是还有检错重发问题和丢失问题,问题没这么简单,pipeline的实现:

滑动窗口协议slide window

发端和收端加上缓冲区。

如果发端和收端缓冲区一样大=1,那么是平等的协议S-W;

如果发端缓冲区>收端=1,GBN协议Go-Back-N,累积确认;

如果收端缓冲区>发端=1,SR协议Selective Repeat,单独确认。

GBN和SR协议合起来叫pipeline协议。

 

可以连着发多少个分组的大小,就是缓冲区的大小,分组发完了得呆在缓存区,保持未确认分组状态,以应对检错重发和丢失重发。

 

发送窗口sending window是缓冲区的子集。

初始状态发送窗口为0,每发一个分组,发送窗口往前滑动一个位置,如此往复,如果一直到缓冲区堆满,第一个发送的分组还没有收到确认,那么就不能再发了,如果之前发的老分组被确认,那么发送窗口的后沿向前滑动,缓冲区再次有空位,可以接着发,所以叫滑动窗口slide window协议。

 

接收窗口receiving window:(接收窗口=接收缓冲区)

每返回一个ACK,只有在这个ACK的序号在接收窗口中最小(即最早到达的分组)时,接收窗口才可以向前滑动,高序号分组到来时,是保持缓冲的,不可滑动。

 

因为GBN顺序接收(收端窗口只有1),收端接收的序号不对是直接丢弃不接收的,一旦收端接收,就在证明此前所有的分组都已经收到了,行为上看是累积确认的方式,所以一旦分组超时,就一定是当前发送方缓冲区中最老的分组超时了,所以超时重传机制需要顺序重传整个发端缓冲区的分组;

因为SR乱序接收(收端窗口>1,任性),收端只要分组到了就直接缓冲接收,返回对应packet序号的ACK,并不证明收端收到了此前的packet,行为上看是单独确认,所以如果分组超时,只需要单独重传超时分组本身即可。

 

GBN和SR协议对比:

GBN出错率比较低,但是出错要整个缓冲区重传,所以如果链路容量大,缓冲区大,重传代价太大,所以用在本身链路较稳定的场合不怎么需要重传的时候比较好;

SR协议比较灵活,只需要重传一个分组就ok。

 

 

3.5   TCP

概述:TCP提供点到点的通信(应用进程到应用进程,不提供一对多或多对一)

提供pipeline流水线协议。

TCP按照MSS maximum segment size最大报文段的大小进行拆分,并在头部加上TCP head。之后到网络层之后再加上 IP的头部。

TCP是全双工的,支持同时双向。

 

TCP报文结构:

16比特源端口号,16比特目的端口号,32比特序号(上层应用层来的报文流按MSS     拆分之后的序号,包含MSS长度的比特意义上的偏移量),32比特确认号(收端返回的ACKx给发端,意味着此前x-1个TCP段都已经收到了,可以发第x个报文,累积确认含义)。

之后是16比特首部长度+保留为用+U/A/P/R/S/F,16比特的接收窗口,16比特校验和(同UDP),16比特紧急数据指针,应用层数据之前最后一部分是32比特的可选项。

  

TCP协议对往返延时RTT的设置:

无法设定成固定值,所以动态自适应,需要经常测往返延迟,之后取期望加四倍的方差,可以达到99.9以上的概率密度覆盖率。

 

在超时时间内,如果发端接收到收端返回的连续的(3个)相同的ACK,说明收端已经接收到了后面的连续的多个TCP段,但是因为累积确认,中间一直缺了一个,这时又没到超时时间(因为超时时间的设置一般很保守,平均往返时间+四倍偏差),但发端接到连续的相同的ACK请求之后,直接重发缺的那一段TCP段,这就是快速重传。

 

TCP的RDT可靠数据传输:

GBN和SR的混合体,只有一个计时器,但是最老的超时了只重发最老的TCP段并重启定时器。如果缓冲区base到next数据全发完了,但没有一个TCP段被确认,这时窗口后沿移动到最前沿,发送窗口长度为0,这种情况下,要关掉计时器。

 

TCP流量控制:在收端返回ACK请求的时候,把接收窗口receiving window的余量捎带传输给发端,这样发端就知道收端缓冲区的余量,就可以进行流量控制。

 

TCP连接的建立:三次握手。发送连接请求-确认;发端资源置位,确认收端的确认。

即:发到收(请求),收到发(确认),收到发(请求),发到收(确认)。把中间两次收到发的合并到一起,构成了三次握手。

两次握手不行,一旦请求超时,重发请求,收端就会多次建立连接并维护连接状态,浪费资源,而如果后面收端的确认没到,前面一次连接的数据已经传完了,那么发端再接到连接确认的时候就会把已经发过的数据再发一遍,如此重复,造成浪费。

 

TCP连接的释放(关闭):对称释放,两端互相给一次释放请求,再互相给一次请求确认,之后在计时器的计时的一段时间内,没有再接收到任何数据,就关闭连接。

这种对称半连接的方式释放连接并不完美,因为任何一次的请求和确认都不可靠,但是只能用这样的一种相对较好的方案。

 

 

3.6   拥塞控制原理:

路由的缓冲区有限,即带宽有限,缓冲区满了之后到来的数据包就被丢弃,之后就触发超时重传机制,网络中重传的数据越来越多,网络进入拥塞状态,并且一旦拥塞,情况很可能越来越坏。

而且网络中一般要经过很多路由,因为连接后端的路由的拥塞导致数据被丢失,是损失的最大化。

 

拥塞控制的方式:

端到端的拥塞控制;

网络辅助信息的拥塞控制:轻量化,RM资源管理resource management信元很小,便于路由的存储转发,而且信元中有些标志位NI no increase in rate(轻度拥塞)和CI congestion indication(拥塞指示),交换机可以对NI和CI标志位进行相应的置位,告诉发端网络的拥塞情况。此外信元中还有ER explicit rate标志位,交换器把可提供带宽的最小值告诉发端,主机系统通过可提供的带宽压缩控制报文。

 

 

3.7 TCP拥塞

TCP是典型的端到端的拥塞控制,网络不提供任何辅助信息,降低网络中交换机的压力。

TCP自己判断网络是否拥塞。

 

两个问题:如何检测拥塞,如何控制。

 

TCP拥塞检测(拥塞+轻微拥塞):

检测指针超时,但超时也可能是因为收端检错没通过被丢掉,但是这种情况比因为拥塞被路由丢弃的情况少很多,所以可以笼统地认为是拥塞导致的超时,因此可以通过检测超时判断网络拥塞。

收到连续多个冗余ACK,即没到超时时间但后面的TCP段都到了(一般是后面连续3个),缺了中间一段,连续返回了缺的这一段的期望的ACK,此时根据超时重传机制,发端需要立马重传缺的这一段,这种情况下就可以判断网络即将拥塞,一般是轻微拥塞。

 

TCP拥塞控制:(和流量控制一并完成)

如何控制发送的速率:rate = CongWin / RTT 。

拥塞控制窗口Congestion window,一旦拥塞,降低拥塞窗口至1个MSS,拥塞避免CA congestion avoid阶段,拥塞控制窗口每次+1。

联合控制的方法:拥塞控制和流量控制一并动作:

发送窗口取min(CongWin, RecvWin)

 

TCP慢启动SS slow start:

建立开始时,发一个MSS,之后发两个,每次+1,虽然每次只+1,但是RTT往返延迟是两倍,延时是指数级增加的,一旦超时,取一半拥塞控制窗口的大小作警戒值threshold,回到从1个MSS的状态开始ss到警戒值后再线性增加,每次超时都取一半作警戒值,如此往复,直到有一次收到三个冗余ACK(轻微拥塞),此时取一半作警戒值,拥塞窗口取警戒值+3(3个冗余ACK),ss到CongWin + 3的时候再线性增加。

 

平均吞吐量(大约): T = (w + w/2) / 2*RTT = (3/4) (w/RTT) , w表示congestion window

 

TCP的公平性:长期来说,n个主机各获得网络的1/n的带宽。

因为考虑到了拥塞的情况并进行控制(每次 /2 ,所以可能一开始带宽分配不公平,但之后会收敛到相等的情况,所以长期来看大致公平)。


扫描二维码推送至手机访问。

版权声明:本文由借曦光发布,如需转载请注明出处。

本文链接:http://dawnblog.cn/?id=25

分享给朋友:
返回列表

上一篇:计网笔记_2

下一篇:计网笔记_4

相关文章

计算机网络临考笔记

计算机网络临考笔记

这是计网的临考笔记作为考研调剂才转专业到计算机的我来说,虽然本科接触过计算机网络,但是跟那些考研已经强化过一遍的同学一比,相对来说基础还是不大行的,而且这学期老师是全英文授课,考试也是全英文,所以针对期末考试这档子事儿,在深度学习和Pyth...

计网笔记_2

计网笔记_2

第2章 应用层应用层内容很多,有很多协议和应用,但是这学期课程中涉及得比较少,基本只在QoS部分有所涉及,笔记里就大概罗列一下知识点。2.1 应用层原理应用层协议最多可能的应用架构:C/S、peer2peer、混合架构C/S模式:服务器ip...

计网笔记_4

计网笔记_4

第4章 网络层:数据平面4.1 导论数据平面:网络服务模型;转发和路由;路由器的组成和工作原理;通用转发。 网络层服务:在发送主机和接收主机之间传送段;在发送端将段封装到数据报中;在接收端将段上交给传输层实体;网络层协议存在于每一...

计网笔记_5

计网笔记_5

第5章 网络层:控制平面5.1 导论传统方式:根据路由信息怎么算路由表;SDN方式。  5.2 路由选择算法Link state链路状态算法 & distance vector距离矢量算法 路由协议的目...

计网笔记_6

计网笔记_6

第6章 链路层和局域网LAN6.1 引论和服务链路层的功能基本通过网卡/网络适配器NIC (Network Interface Controller)实现。存在一些寻址问题和网络控制问题。 链路层导论:包括优先链路、无线链路,也可...

计算机网络 - 总结

计算机网络 - 总结

到这儿基本郑老师课上的内容就都结束了,后面一些网络安全技术的延申个人觉得对计算机网络而言不甚重要,所以没有学习笔记,另外第八版中有关MPLS、wireless网络的一些内容,比如VPN、CSMA/CA等技术和协议,虽然对本科生不作要求,但是...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。