广州网站设计流程,管理咨询公司是做什么,徐州百度网站快速优化,电子商城网站建设文章目录 前言一、传输层提供的服务1.1、传输层的功能1.2、传输层的两个协议#xff08;TCP、UDP#xff09;1.3、传输层的寻址与端口#xff08;常见端口介绍#xff09; 二、UDP协议2.1、认识UDP功能和特点2.2、UDP首部格式2.3、UDP伪首部字段分析2.4、伪首部校验UDP用户… 文章目录 前言一、传输层提供的服务1.1、传输层的功能1.2、传输层的两个协议TCP、UDP1.3、传输层的寻址与端口常见端口介绍 二、UDP协议2.1、认识UDP功能和特点2.2、UDP首部格式2.3、UDP伪首部字段分析2.4、伪首部校验UDP用户数据报过程 三、TCP协议3.1、TCP协议特点与报文格式3.1.1、TCP协议的特点3.1.2、TCP报文段首部格式 3.2、TCP连接管理3.2.1、TCP连接传输三个阶段3.2.2、TCP连接建立过程3.2.2.1、连接三次握手详解3.2.2.2、三次握手可能出现的问题泛洪攻击 3.2.3、TCP的连接释放过程四次挥手 3.3、TCP可靠传输四种TCP实现可靠传输的机制方式一校验方式二序号机制方式三确认机制基于序号机制方式四重传RTTS加权平均往返时间、快速重传机制 3.4、TCP流量控制3.4.1、TCP流量控制产生的原因以及滑动窗口过程3.4.2、TCP流量控制详细过程 3.5、TCP拥塞控制3.5.2、认识拥塞控制以及与流量控制的区别3.5.3、拥塞控制的四种算法3.5.3.1、认识拥塞控制的四种算法3.5.3.2、组合一慢开始和拥塞避免理解拥塞窗口、传输轮次含义慢开始和拥塞避免的详细过程 3.5.3.3、组合二快重传和快恢复 前言
目前正在备考24考研现将24计算机王道的408学习整理的知识点进行汇总整理。
博主博客文章目录索引博客目录索引(持续更新) 一、传输层提供的服务
1.1、传输层的功能
传输层只有主机才有的层次。 传输层的功能
1、传输层提供进行和进程之间的逻辑通信。
逻辑通信表面上是连个主机的进程之间进行通信实际在通信的时候会首先发送方会从最上层一步步封装到物理层将比特流放入到链路中传输接着中间经历多个中间系统最终到达主机再一步步解封装最终指定的应用请求得到数据。 对于网络层提供主机之间的逻辑通信。
2、复用与分用。
例如微信与QQ发送的数据最终都会使用同一个传输层的协议进行传输复用最终目标方手机同时会在传输层将数据报进行拆分来进行分用传给到不同的应用当中分用。
3、传输层对收到的报文进行差错检测。
在网络层阶段包含一个首部校验这个是用来校验IP数据报的首部的没有检错的功能原因是因为其上层传输层中会对传输层报文段进行差错检测。对于传输层网络层可以实现一个可靠传输的功能。传输层中并不一定能够一个可靠传输因为包含有一个UDP和TCP其中TCP是保证可靠传输的。 1.2、传输层的两个协议TCP、UDP
两个协议为TCP、UDP。前者可靠后者不可靠。
TCP与UDP协议的对比
①TCP面向连接的传输控制协议。
传输数据过程传输数据之前必须建立连接数据传送结束后要释放连接。不提供广播或多播服务。由于TCP要提供可靠的面向连接的传输服务因此不可避免增加了许多开销确认、流量控制、计时器及连接管理等。是否可靠可靠面相连接时延大。应用场景适用于大文件。
②UDP无连接的用户数据报协议UDP。
传输数据过程传输数据之前不需要建立连接收到UDP报文后也不需要给出任何确认。是否可靠不可靠无连接时延小。应用场景适用于小文件。 1.3、传输层的寻址与端口常见端口介绍
复用与分用
复用应用层所有的应用进程都可以通过传输层再传输到网络层。分用传输层从网络层收到数据后交付指明的应用进程。
端口传输层的SAP用来标识主机中的应用进程一个应用进程运行都会有端口号。
主要分为逻辑端口/软件端口指的是应用进程的端口。对于硬件端口则指的是真实物理世界中主板上的一些接口。端口关系端口号只有本地意义在因特网当中不同计算机的相同端口是没有联系的。端口号长度为16bit可以表示65536个不同的端口。
端口号按照范围分包含有服务端的端口号、客户端使用的端口号 其中一些常见的固定应用服务的使用端口如下 在网络中采用发送方和接收方的套接字组合来识别端点。
套接字唯一标识了网络中的一个主机和它上面的一个进程。
套接字Socket 主机IP地址端口号其中主机IP地址能够去标识定位一个网络中的主机而对于端口号则是用来表示主机上的某个进程。 二、UDP协议
2.1、认识UDP功能和特点
UDP功能只在IP数据报服务之上提供了很少的功能如复用分用和差错检测功能。
UDP的主要特点
1、UDP是无连接的减少开销和发送数据之前的时延。
2、UDP使用最大努力交付即不保证可靠交付。
若是UDP协议不能够保证可靠交付那么可靠交付就交由传输层的上一层应用层来保证可靠以及顺序的交付。
3、UDP是面向报文的适合一次性传输少量数据的网络应用。
应用层给UDP多长的报文UDP也会照常发送即一次发一个完整报文由于也是不可靠的交付容易导致数据丢失若是传输的数据量不大这样即使发生丢失的的情况损失也比较小。 若是数据太大那么在网络层就需要分片因为对于接下来传递给链路层在链路层中有一个MTU的要求。若是数据太小小到比首部还少那么就会降低网络层的效率希望的是一个数据报当中数据信息尽可能多首部附加信息尽可能少。
4、UDP无拥塞控制适合很多实时应用。
**并不是说没有拥塞控制那么网络即使再拥塞UDP也不会让发送方的速度放缓一些此时就不会控制这个问题。对于这种情况是否会觉得这个协议不好**实际上不是正因为UDP没有拥塞控制也带来了一些优点如适合很多实时性的应用如IP电话、视频会议并且是允许在网络出现拥塞的情况下丢弃一些数据的因为这些实时性的应用不能允许数据有太大的延迟实际上丢一点也是允许的。对于拥塞情况特别严重也会有一定的补救措施例如向前纠错或者重传已经丢失的报文。
5、UDP首部开销小8BTCP为20B。 2.2、UDP首部格式
首部字段总和固定是8B其中包含源端口号、目的端口号、UDP长度、UDP检验和都是2B16位。 16位UDP长度指的是数据字段首部字段若是数据字段为7B那么这个UDP长度就是15。
16位UDP检验和
情况1检测整个UDP数据报是否有错错就丢弃。情况2分用时接收端接收到时需要进行分用给不同进程根据端口号若是找不到对应的目的端口号那么此时就会丢弃报文并给发送方发送ICMP 端口不可达的差错报文。 2.3、UDP伪首部字段分析
伪首部只有在计算校验和的时候才出现不向下传送也不向上递交。伪首部就是模仿的IP数据报的首部。 源IP地址4个字节。目的IP地址4个字节。01个字节全0也就是为首部的第三个字段固定全0。在伪首部中的171个字节封装UDP报文的IP数据报首部协议字段是17。UDP长度2个字节UDP长度 UDP首部8B 数据部分长度不包括伪首部 2.4、伪首部校验UDP用户数据报过程
如何使用伪首部来校验UDP用户数据报有没有发生差错
将它看成有许多16位的字串连接起来的也就是很多个4个字节的组成部分如下图中的右半部分每16位作为一组并排写 在发送端
1、填上伪首部。
2、全0填充检验和字段。
3、全0填充数据部分UDP数据报要看成许多4B的字串接起来。
4、计算将伪首部首部数据部分采用二进制反码求和。
5、将求和反码填入到首部的检验和字段。
6、去掉伪首部发送。
在接收端
1、填上伪首部。
2、伪首部首部数据部分采用二进制反码求和。
注意在发送端中的检验和计算求和时是全0而在接收端的时候此时检验和是之前的求和结果取反我们这边是加上的检验和。
3、最终得到结果全为1则无差错否则丢弃数据报 或 应用层 附上出差错的警告。
如下在求和中有区别的就是检验和部分在接收端时这个检验和为发送端时候的一个检验和不再是使用全0来计算 **为什么最终和为1**可以看到在发送端时最终的结果取得是反码放入到检验端那么将计算得到的值反码值那就是全1如下两行相加。 三、TCP协议
3.1、TCP协议特点与报文格式
3.1.1、TCP协议的特点
1、TCP是面向连接虚连接的传输层协议。
虚连接与传输层逻辑通信一样并不是实际的一个物理连接物理连接指的是把这个数据报加上各个层次的首部后放入到链路上传输然后再到接收端进行一步一步的解封装这个是一个完整的物理连接。TCP协议的使用则好像这两个进程建立了一个点对点的连接所以说是一种虚连接。
2、每一条TCP连接只能有两个端口每一条TCP连接只能是点对点的。
3、TCP提供可靠交付的服务无差错、无丢失、不重复、按序到达。【可靠有序不丢不重】
4、TCP提供全双工通信。
全双工通信两端都可以同时发送、接收数据。对于其特点TCP协议连接的两端都会设置有发送缓存准备发送的队列以及接收缓存准备接收的队列。 发送缓存准备发送的数据 已发送但尚未收到确认的数据。对于一些已经发送但是还没有收到确认的数据不能够直接从缓存中删除因为一旦出现超时的情况那么就需要进行重发接收缓存按序到达但尚未被接受应用程序读取的数据 不按序到达的数据。对于每按序到达的数据只有将数据顺序排好了接收方才能够逐一一个有一个的来从接收缓存当中取出数据交付给对应的进程。
5、TCP面向字节流
指的是TCP把应用程序交下来的数据看出仅仅是一连串的无结构的字节流。流流入到进程或从进程流出的字节序列。
如下图文件包含多个字节我们将10个字节放入到缓存中等待发送 此时开始发送可能会先取3个字节组成一个TCP的报文段接着在这个报文段上加入TCP的首部形成一个完整报文段再放到链路上进行一个传输对于这个字节传输的个数根据具体情况不定 所以说TCP协议是面向字节或者说字节流的。 3.1.2、TCP报文段首部格式
TCP报文段首部整体描述
TCP报文段由TCP首部和TCP数据部分组成。TCP首部数据位数要求是4B的整数倍此时就需要TCP首部填充一些数据一般是全0。首部包含有固定的20B对于其他选项、填充字段则是另外计算。 下面是TCP首部的11个个字段详细描述
①-②源端口、目的端口各自占用2B也就是16位。
③序号位占用4B在一个TCP连接中传送的字节流中的每一个字节都按顺序编号本字段表示本报文段所发送数据的第一个字节的序号。
举例1中可以看到连续发送的是1、2、3字节那么TCP头部中的序号就是1传输的第一个字节表示的是第一个字节。举例2中可以看到连续发送的是4、5、6字节那么TCP头部中的序号同样也就是4传输的第一个字节表示的是第四个字节。 ④确认号期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N则证明到序号N - 1为止的所有数据都已正确收到。
这个确认号是通过目标方主机发来的。当我们第一个报文传输的字节数1、2、3到达时那么目标方会返回一个确认报文段此时确认报文段的首部中就包含有一个确认号4表示的是当前已经收到了1、2、3字节我现在希望收到4号字节。 ⑤数据偏移首部长度TCP报文段的数据起始处位置J距离TCP报文段的起始处有多远以4B位单位即1个数值是4B。
TCP报文段长度指的是如下图 由于是以4B作为单位对于数据偏移若是1111那么就是16 x 4B 64B当前TCP首部就是64字节固定20B可选填充就是44B。
⑥6个控制位
紧急位URGURG 1时标明此报文段中有紧急数据时高优先级的数据应尽快传送不用在缓存里排队配合紧急指针字段使用。如下当在缓存中已经拆分多段待发送的报文那么此时途中处于第4段的报文里由于包含URG1那么就表示该数据需要尽快传送赋予其一个优先级此时就可以移动到最前面而不用等地啊排队轮到它。 确认位ACKACK 1时确认号有效在连接建立后所有的传送报文段都必须把ACK置为1。推送位PSHPSH 1时接收方尽快交付应用进程不要再等到缓存填满后再向上交付。指的是接收方进行的一个紧急处理如下图中若是缓存区第二个段是PSH1那么此时就被赋予了一个报文段的优先级会赶紧交付给应用层上面的进程。 复位RSTRST 1时表明TCP连接中出现了严重差错必须释放连接然后再重新建立传输链接。同步位YSNSYN 1时表明是一个连接请求/链接接受报文。如下图中发送方发送给出了SYN 1那么接收端也会返回一个SYN 1。 终止位FINFIN 1时表明此报文段发送方数据已发完要求释放连接。
对于推送位、复位考试不考做一个简单了解。
⑦窗口字段指的是发送本报文段的一方的接收窗口即现在允许对方发送的数据量。
举例1此时接收端发送过来的报文段首部有窗口位65536那么此时发送端A接收到了那么就会设置自己发送缓冲区窗口大小设置为65536。 举例2此时接收端B发送过来报文段中确认号701窗口字段1000此时发送方会设置自己的发送缓冲区为1000并且将自己的701-1700字节发送给接收方B。
⑧校验和检验首部数据检验时要加上12B伪首部第四个字段相对应协议字段为6。
⑨紧急指针URG 1时才有意义指出本报文段中紧急数据的字节数。
示例若是紧急指针为50那么说明这个TCP数据部分从第1个字节到50个字节这些都是紧急数据。
10选项最大报文段长度MSS、窗口扩大、时间戳、选择确认…。
11填充字段若是选项字段不是4B的整数倍那么此时就需要进行填充其为4B的整数倍。 3.2、TCP连接管理
3.2.1、TCP连接传输三个阶段
TCP连接传输三个阶段 TCP连接的建立采用客户/服务器方式主动发起连接建立的应用进程叫做客户被动等待连接建立的应用进程叫做服务器。
连接时三次握手 3.2.2、TCP连接建立过程
3.2.2.1、连接三次握手详解 ROUND1客户端发送连接请求报文段无应用层数据。
SYN 1seq x随机
SYN 1连接请求时即为1。seq x随机序号位这个序号是随机产生的可以从一开始任意一个随机数开始。对于确认号在这里无效因为客户端并没有收到服务器端发够来的报文段因此客户端就不知道自己接下来要期待服务端发来的哪个序号报文段此时确认号无意义。
对于SYN只有两种情况下置为1一个是连接请求另一个是连接请求的确认。
ROUND2服务端为该TCP连接分配缓存和变量并向客户端返回确认报文段允许连接无应用层数据。
SYN1ACK1seqy(随机)ackx1
SYN1连接请求的接受依旧为1。ACK1当ACK1时此时小写ack也有效了这两个需要进行搭配使用。ackx1此时确认号应该填期待对方接下来发送的报文段的第一个字节。由于上次客户端请求的这个序号表示段为x此时服务器端想要收到的下一个字节应该是从x1开始。seqy(随机)此时对于确认报文段同样也有一个序号字节这个序号自己同样也是主机自己随机分配的。
ROUND3 客户端收到服务端的确认接下来应该返回一个确认的确认告诉服务器我们已经建立连接了接下来就可以给你发送数据与前两个报文段不同的是这个第三个报文段可以携带数据了此时可以将正式要发送的数据放入到报文段。
客户端为该TCP连接分配缓存和变量并向服务端返回确认的确认可以携带数据。
SYN0ACK1seqx1acky1
SYN0当前并不连接请求也不是连接请求的确认此时就是0。之后所发送的数据SYN都为0。ACK 1当ACK1时此时小写ack也有效了这两个需要进行搭配使用。seq x 1它所发送的这个报文段的第一个字节是x1。ack y 1由于上一个seq序列想要收到的是y那么此时接下来要期待的这个序号就是y1。 3.2.2.2、三次握手可能出现的问题泛洪攻击
对于第二步、第三步中服务器和客户端都围着TCP连接的过程分配了缓存和变量此时就会导致出现问题洪泛攻击。
原因由于三次握手才产生的黑客攻击问题。
攻击描述SYN洪泛攻击发生在OSI第四层这种方式利用TCP协议的特性就是三次握手。攻击者发送TCP SYNSYN是TCP三次握手的第一个数据包而当服务器返回ACK后该攻击者就不对其进行再确认那么这个TCP连接就处于挂起状态也就是所谓的半连接状态。服务器收不到再确认的话就会重复发送给ACK给攻击者此时就会更加浪费服务器的资源。
此时攻击者趁其上面描述进入不断重复发的情况就继续对服务器发送非常大量的这种TCP连接由于每一个都没法完成三次握手此时在服务器上这些TCP连接会因为挂起状态而消耗CPU和内存最终服务器可能死机就无法为正常用户提供服务。
解决syn洪泛攻击的办法设置的是syn cookie。 3.2.3、TCP的连接释放过程四次挥手
关闭连接时四次挥手 参与一条TCP连接的两个进程中的任何一个都能够终止该连接连接结束后主机中的资源缓存与变量将被释放。 ROUND1客户端发送连接释放报文段停止发送数据主动关闭TCP连接。
FIN 1seq u
FIN 1当结束释放连接的时候此时FIN结束位要设置为1。seq u指的就是这样一个报文段的第一个字节的序号由于这个报文段通常其中并没有数据此时一个序号可以表示这样的一个报文段。
ROUND2服务器端回送一个确认报文段客户到服务器这个方向的连接就是释放了。此时处于半关闭状态
ACK 1seq vack u1
ACK 1此时ack生效。seq v取决于它之前发送到哪里如这个服务器之前上一个发送的报文段最后一个字节是v - 1此时seq标为1。ack u 1表示对于上一个报文段的确认上一个报文seq u。
主机收到了这样的一个确认报文段时不用予以回复因为这个主机现在已经结束通话了只需要等待这个服务器告诉它它也结束接着它们俩之间的连接就算是正式关闭。
注意在这个过程中还会发送完剩余数据。
ROUND3服务器端发送完数据就发出连接释放报文段主动关闭TCP连接。
FIN 1ACK 1seq wack u 1
FIN 1只要是请求关闭连接都需要发起FIN 1。ack u 1由于这个请求关闭连接时在服务器阶段二之后直接进行发送的中间客户端并没有再发送过请求此时ack回复字段依旧是u1与ROUND2中一样都是进行表示确认。seq v实际也取决于第二步之后回复确认以后服务端所发送的数据量多少。
ROUND4客户端回送一个确认报文段再等到时间等待时间计时器设置的2MSL最长报文段寿命此时连接彻底关闭。
2MSL指的是最长报文段的寿命。若是确认报文段这没有到达服务器那么此时服务器没有收到这个会进行重发关闭连接请求若是在2MSL内收到关闭连接请求那么会进行重新发起确认。
ACK1seq u 1ack w 1 3.3、TCP可靠传输
四种TCP实现可靠传输的机制
方式一校验
过程与UDP校验一样增加伪首部。
与UDP协议的校验方式一样都是通过在发送方和接收方增加一个首部接着通过使用二进制反码求和的计算方法来判断有没有发生错误。 方式二序号机制
与UDP的一样最终发送的报文段可能就是下面TCP缓存中的几个字节那么序号就表示每个段的第一个字节在整个TCP缓存当中的位置 方式三确认机制基于序号机制
下面我们可以看到当我们TCP缓存中的第一段报文在发送到服务端的时候TCP缓存里并没有将这个第一段删除掉 其原因就是要等待服务器端确认之后才进行删除若是没有收到确认报文那么就可能会出现报文丢失的情况所以对于发送端如何知道接收方已经正确、完整的接收到了这整个报文就是靠我们这个确认机制接收方收到了这个报文段之后就会返回一个确认报文段。
可以看到当我们服务端返回确认报文时其中的确认号字段为4那么就表示4之前的数据已经都完成了接收那么此时发送端就可以将TCP缓存当中的第一段删除 那如果说有1、2、3段此时中间的第二段迟迟不到可能已经丢失对于1、3段已经收到了此时TCP默认会使用累计确认此时确认号字段依旧是4也就是服务端告知客户段我下面还是要收到第4字节开始的报文
虽然说是顺序接收到但对于这种情况中间的2没到3段是也可以进行接收的。 此时客户端就会发送第2段报文也就是4、5、6当第2段报告发送到服务端时此时服务端已经接收到了第1、2、3段那么下一次发送确认段中确认号字段为9。
对于顺序、乱序到达服务端的情况说明
报文段按序完整到达此时接收方会返回这个确认来指导发送方接下来要发送哪一段报文顺序到达最后一个报文段末尾的后一位。报文段没有按序到达那么接收方会返回一个确认报文段此时这个报文段就可以指示这个发送方应该重传哪一个报文中间第一个没有到达的报文段的第一位。 方式四重传RTTS加权平均往返时间、快速重传机制
确认、重传机制不分家TCP的发送方在规定的时间内重传时间没有收到确认那么就要重传已发送的报文段。【超时重传】
问题1何时重传
若是发送方超过了一定的时间还没有收到接收方的确认时那么发送方就知道自己所发送的这个报文段应该丢失了此时他就应该将自己这个报文段从缓存中拿出来进行重传。
问题2对于这个重传的时间如何进行计算
由于TCP下层是一个互联网环境发送的报文可能会经过高速路的局域网也有可能经过低速率网络那么每一个IP数据报它所选择的路由也都是各不相同的取决于当时的一个网络情况那么就会导致发送方发送的很多报文段所走的路径都不一样所以我们不能够设置一个固定的时间。原理TCP采用了一种自适应算法来动态改变重传时间那么这个重传时间叫做RTTs加权平均往返时间也就是当我们发送第一个报文段的时候这个RTTs指的就是取的第一个报文的RTT从第一个报文的发送开始知道确认接着在发送第二段RTT时那么同样会有一个rtt接着根据第1、2个rtt就能够算出一个RTTs就作为现在的重传时间。对于之后发送第N段RTT时都会设置一个加权的平均往返时间通过一个公式来计算。
问题3若是对于超时重传若是一直没有到达这个超时时间那么就会一直进行等待有没有一种办法能够在超时事件发生之前就能够直到发送方有没有丢失这个报文段然后尽快的重传呢
方案冗余ACK冗余确认与确认机制相关。
过程每当比期望序号大的时序报文段到达时发送一个冗余ACK指明下一个期待字节的序号。
对于下面的情况可以考单由于在1段之后2没有收到此时不断到来的是3、4、5此时服务器端也就都会接收当接收完一个报文段时实际会发送一个确认号可以看到在1段之后由于2段迟迟没有到来确认报文段中确认号一直都是2可以看到此时这种连续确认号为中间2段那么就是一个冗余确认。当接收端收到了三个相同序号的报文段是基于1的确认为序号2之后的连续三个此时就会就会判断自己发送的这个2号报文段发生了丢失情况此时就会进行重传此时就实现了提前重传效果 **为什么能够乱序到达呢**TCP中接收端并不是收到一个确认机制发送一个报文段它时可以进行连续的发送多个报文段的。
这种技术也可以成为快速重传技术。 3.4、TCP流量控制
3.4.1、TCP流量控制产生的原因以及滑动窗口过程
原因在平时发送数据的时候通常都会希望这个发送数据的速率可以更快一些但是如果发送的速率过快就会使得接收方可能来不及接收此时就会导致非常严重的丢包现象此时就需要有流量控制来控制发送方的一个发送速率。
流量控制让发送方慢点要放接收方来得及接收。
TCP利用滑动窗口机制来实现流量控制。
滑动窗口过程在通信过程中接收方根据自己接收缓存的大小动态地调整发送方的发送窗口大小即接收窗口rwnd接收方确认报文段的窗口字段来将rwnd通知给发送方发送方的发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值。
资源的拥塞情况网络阻塞了说明当时网络当中使用网络嗲款网络资源的主机太多所以会导致整个网络出现了一个发送缓慢/转发缓慢、排队时间过程的一个问题。发送方的发送窗口要取决于接收窗口以及拥塞窗口这两个值的最小值。【发送窗口 Min{接收窗口拥塞窗口}】
对于发送方的窗口是可以动态变化的这个取决于接收方所返回的一个报文段可能是确认报文也有可能是一个数据报文如果窗口字段大说明现在可以让发送方多发一些数据若是窗口字段比较小那么就是让发送方少发一点数据
如下图中接受返回一个了一个确认报文其中设置了发送窗口为6此时发送方划分出了6个窗口的来进行一次发出。 3.4.2、TCP流量控制详细过程
A向B发送数据连接建立时B告诉A“我的rwnd 400字节”设每一个报文段100B报文段序号初始值为1。 详细过程描述
1、首先A向B进行请求连接建立接着B返回一个确认报文段其中设置了字段rwnd 400字节。
2、主机A收到确认报文段此时读取到rwnd 400此时就给自己的发送缓冲区窗口划分了400字节由于报文段100B那么就正好是4段。 接着会根据窗口的大小连续的发出了4个报文段每个报文段100字节根据图可以看到前两个报文段主机B成功接收对于第3段丢失 3、此时主机B发送了一个确认报文段其中指明我接下来要接收从201字节开始的一个报文段此时并指明当前可以接收的窗口为300字节。 主机A的发送窗口是从接收端暂未收到的201字节开始直到500字节 4、此时发送端的发送窗口由于有300字节由于此时201-300字节的报文段还没有收到确认报文此时就会保持在发送窗口接下来主机A发送数据就可以发送这两个格子里面的数据会从301开始第3段第4段此时就无法发出了已经窗口最大只能够开大500字节。 5、此时对于窗口201-300字节的报文段就一直处于僵持的状态一直在等待接收方发来的确认等待对于201-300字节的报文段超时时间过去之后就会进行一次重传 6、主机B能够成功接收到此时主机B发送了一个响应报文在响应报文中指明了现在主机B想要接收的报文段从501开始发送窗口大小可以限制在100。 7、主机A开始发送501字节开始的一段报文段由于窗口大小只有100字节所以发送完该段就无法继续发送。 8、此时接收端主机B返回了一个确认报文段其中表明说想要从601字节开始发送窗口大小为0。 由于窗口设置为0那么此时发送端就不能在发送数据了。
额外问题1若是主机A一直在等待主机B发送一个非零窗口的通知而主机B发送了一个新的报文段允许窗口大小为400在传输过程中丢失此时若是没有措施的话那么主机A、主机B就会一直相互等待对于这种相互等待的情况类似于死锁那么如何解决呢
解决方案TCP为每一个连接设置有一个持续的计时器只要TCP连接的一方收到对方的零窗口通知就会启动这一个持续计时器。若是计时器到时间那么主机A就会发送一个探测报文段那么主机B会重传这一个通知报文。
若是重传的这个通知报文依旧窗口是0那么主机A会重新再设置一个持续计时器此时若是在计时器结束之前还是没有通知确认报文的话那么主机A会再发送一个探测报文段让主机B再重传一次。 3.5、TCP拥塞控制
3.5.2、认识拥塞控制以及与流量控制的区别
什么叫做拥塞控制
在网络当中状况不好网络发生了阻塞导致接收数据以及发送数据整个速度全部降下来了。
出现拥塞的条件对资源需求的总和可用资源
其中的资源指的是网络当中的一些链路容量如带宽一条链路中50M带宽很多人在这条链路上发送数据导致这个链路上的带宽不够这些人使用那么此时就会导致这个网络出现了拥塞同时对于交换结点当中的缓存以及交换节点当中的处理机如路由器当中的处理机等这些都属于资源。
若是某段时间对于网络当中某一个资源的需求总和超过了这个资源它可以提供的可用部分那么网络的性能自然就会变换。此时就会有许多资源同时呈现一个供应不足的情况从而导致以下的情况发生
网络用有许多资源同时呈现供应不足 — 网络性能变坏 — 网络吞吐量将随输入负荷增大而下降。
拥塞控制作用防止过多的数据注入到网络当中。
通过协调使用这个网络资源的所有主机之间的协调就能够防止过多的数据注入到网络当中此时就可以减轻网络的堵塞情况。
拥塞控制与流量控制的区别
拥塞控制假如说下图的上边为接收方图下边式发送方都需要给接收方发送数据那么由于它们同时使用这个网络上的资源同一个交换结点那么这个路由器就会使得这个网络非常的繁忙甚至会出现一个拥塞的情况对于接收方而言并不知道这种拥塞情况具体是哪一个主机或者是哪几台主机发送速率过快造成的。 流量控制是一种点对点之间的通信量控制是一个端到端的问题如果和这个接收方它手来的这个数据来不及接收了那么此时就会直到应该照这个发送方。 小结流量控制这是点到点之间的一个问题是这个发送方的速率过快导致接收方缓存不够拥塞控制是一个全局性的问题主要是因为这个网络发生了阻塞。 3.5.3、拥塞控制的四种算法
3.5.3.1、认识拥塞控制的四种算法
四种算法慢开始、拥塞避免、快重传、快恢复。
上面的四种是每两个进行搭配使用在一种情形当中一个是慢开始拥塞避免另一个组合是快重传快恢复 在学习上面算法之前先进行几个假定
1、数据单方向传送而另一个方向只传送确认报文段并不是传输有效数据进行一个捎带确认。
实际中捎带确认也是比较常见的。
2、接收方总是有足够大的缓存空间因而发送窗口大小取决于拥塞程度。
发送窗口 Min(接受窗口rwnd拥塞窗口cwnd)
接收窗口接收方根据接受缓存设置的值并告知给对方反应接收方容量。拥塞窗口发送方根据自己估算的网络拥塞程度而设置的窗口值反应网络当前容量。 3.5.3.2、组合一慢开始和拥塞避免
理解拥塞窗口、传输轮次含义 考研中要清楚算法阿德应用过程对于四种算法的具体细节并不考察。
纵坐标指的是拥塞窗口cwnd初始值为1代表的是一个报文段一个最大的报文段长度MSS此时图中的4指的是4个MSS8指的是8个MSS随着传输轮次的增加拥塞窗口会发生变化。
横坐标指的是传输轮次一个传输轮次就是一个单位指的是发送一批报文段并收到他们的确认时间。
一个传输轮次发送了一批报文段收到了它们的确认时间一个往返时延RTT。开始发送一批拥塞窗口内的报文段到开始发送下一批拥塞窗口的内的报文段的时间。
传输轮次的理解
如下主机A给主机B发送了一个报文段此时主机B向主机A响应了一个报文段此时就算作一个轮次 由于网络情况很好此时会多发送几个报文段m2、m3此时主机B收到两个报文段之后依次返回两个确认对于这一种情况到M3确认为止这样的一段就是第二个传输轮次。 此时发送窗口再次进行调大此时窗口为4那么此时可以连续发送4个报文段接着依次收到第4个报文段的时候此时就算作第三个传输轮次 慢开始和拥塞避免的详细过程
慢开始指的是一个指数规律增长一个爆炸式增长的过程。
慢的原因主要是一开始注入的仅仅只是一个报文这对于初始注入很多报文段来说会慢很多。
过程首先对这个网络进行一个探查看一下这个网络的拥塞情况若是比较好那么此时就增加我的拥塞窗口发送方增加拥塞窗口这个倍数是2倍分为四个阶段。
①一开始是进行**【慢开始】在第一个传输轮次是1个MSS第二个传输轮次是2个MSS第三个传输轮次是4个MSS第四个传输轮次是16个MSS此时可以看到已经到达了ssthresh的初始值16其指的是一个慢开始门限**。 ②此时就会由慢开始进入到**【拥塞避免】**因为目前现在注入的报文段比较多此时会担心之后很快会发生拥塞情况此时就把速度稍微降一降。此时会在之前的拥塞窗口基础上每次增加一个拥塞窗口可以看到在5个轮次到12个轮次每次都是1此时一直到了24个MSS。
慢开始门限一旦到了这个慢开始门限初始值时速度就要稍微减一点会由慢开始进入到拥塞避免。拥塞避免过程是线性增长的过程在慢开始门限基础上每次1。 ③由于到达了24MSS时此时网络出现了拥塞发生了丢包情况此时会重新进入到**【慢开始状态】**拥塞窗口重新回到了1瞬间从24个报文段缩减为1个报文段之后的过程就是继续开始执行慢开始1、2、4、8接着在第17个轮次时注意此时的门限值变为了12。
**新的门限值如何确定**根据当前出现了网络拥塞的情况下出现的一旦出现网络拥塞就会立即将拥塞窗口/2由于之前出现网络拥塞的拥塞窗口为24那么此时24/2 12那么此时新的门限值就是12。 ④当进入到**【拥塞避免】**状态时还是会进行线性增长每次1之后的过程都是一样一旦出现网络拥塞那么会设置新的门限值并重新回到慢开始进行。 3.5.3.3、组合二快重传和快恢复
快重传出现的原因主要是解决对于等待超时时间过长而实现的一种机制机制过程如下
此时连续发送了M1、2、3、4、5这五个报文段当M1发送到B后此时会返回一个确认号其中ack2表示要收到第2个报文报文2丢失紧接着B又收到了M3、4、5的确认报文段其中ack2那么此时就是累计有四个ack2的确认报文段了基于对于最后三个相同ack2的那么就被成为冗余ack此时主机A会进行重新发送M2报文。
**快恢复是如何体现的呢**可以看到下图中在12抡次时拥塞窗口为24时由于收到了3个重复的确认后执行了【快重传】紧接着就会进入到【快恢复状态】此时并不用降低拥塞窗口为1MSS情况此时就会降到新的一个门限值此时在这个12的门限值阶段我们进行【拥塞避免】进行线性加法增大。
**门限值如何确定**此时就是将出现重复确认的时候将此时这个拥塞窗口24/212紧接着我们就进行快恢复。 **什么是快恢复**不用降到1直接降到新的门限值出现快重传的拥塞窗口/2接着使用拥塞避免的算法。
对于图中的TCP-Tahoe版本已经废弃该版本应该就是在出现快重传的时候此时拥塞窗口直接变为了慢开始的初始阶段1之后就执行相应的策略。 整理者长路 时间2023.8.7-8