(笔记demo)TCP协议部分原理

1.UDP协议

        特点:

        1.不管理拥堵

        2.无序

        3.不管理流量速度

        4.单向发送,非连接

        常用:

        内 广播:单方面发送,不需要建立连接,流量小,对丢包不敏感

        游戏,直播:只需要即时消息,不需要完整时间段

2.客户端和服务器

        客户端作为发送端没有固定端口,而是类似端口池使用再释放,接收数据时也是随机端口接收

        服务器必须绑定端口,以此稳定接收数据包,不同的端口对应不同的服务器,1~1023端口 大多都被常用软件占用,自己配置时注意端口 选择

3.TCP协议,此处概括,后续细写

        1.顺序稳定

        2.拥塞控制

        3.流量速度控制

        4.稳定连接

4.顺序稳定原理

        有序性:

        建立连接时,会商定数据包起始ID(seq),顺序应答

        例:序 起点为1,当收到序 11的应答,说明前面10个数据包都已被收到,这样即便先收到靠后的数据包,也会先不处理

        序 重置一次需要4个小时,没有数据包能在 络中存活4个小时

        例:序 999在序 1前,因为999是上一轮的末尾,不存在这种可能,不可能同时存在相隔极远的数据包

                序 2在序 1前,因为2是上一轮的,更不可能,数据包不可能存活4个小时

        必达性:

        超时重发:当超时未收到ACK收到确认的数据包,有几种可能

        1.数据包未送达

        2.数据包送达,ACK包未送达        

        重发,并且加倍等待时间,多次加倍后,说明 络拥堵,不适合连接,会提示超时断开连接

        检测未送达数据包,当接收端表中3,  5,  6,7都收到时,四个包都会返回3 数据包ACK送达的包,当接收端收到大于等于3次相同的ACK包,就会重发后一个包

        比较关键的收发观念是:每个数据包发送出去都会经历三个状态,发出未送达,收到后回复的应答包未送达,收到应答也就发送成功,前两个环节任一不成功都会触发超时重发

5.流量控制

        建立连接时两端会商定能接收的最大数据包以及能缓存的数据包最大数量,称为窗口

        接收端会根据发送端的最大数据size设置接收数据的窗口大小为n倍size,对应接收n个数据包

        发送端会根据接收端每次接收数据包的最大尺寸设置每次发送的数据包尺寸,小于等于才能被接收完全啊

        避免数据包溢出:

        当两端协定好窗口大小后,还需要知道接收端窗口还剩多少空间,所以接收端每次应答都会回复自身还剩多少空间

        避免低能窗口:

        数据包被接收端收到并答复后,如果不被应用提取处理,就会一直累积在窗口中,直到窗口塞满,此时不能再接收数据        

        假设,应用层处理数据包速度比较慢,接收端就有可能有一个空位产生,就发送一个应答包使发送端继续发送,这样就会产生n个数据发送n次应答,效率降低,此时就是低能窗口情况

        解决办法:设置当多个空位产生时才会发送一次应答包,告诉发送端此时有多少个空位

6.拥塞控制

        流量控制是控制数据包在两端的接收与发送,拥堵控制则是控制数据包在传输途中会遭遇的情况,比如上面提过的发出但未被对方收到

        数据包的传输途径中最重要的就是路由器和带宽,路由器转发每个数据包,带宽表示这条 络中最多能存在多少个数据包,类比高速公路的收费站和路长宽,车就是数据包,当收费站(路由器)需要处理的车(数据包)过多时,数据包就会被堵在路由器处,时间一长就会导致超时,超时发送端就会重发,就会导致更堵,路的长宽(带宽)一条路最多容纳一百辆车,塞不下还继续往里塞就会导致车丢失(数据包丢失)

        解决方法:拥塞控制状态机,cwnd窗口

        拥塞控制有三种状态:

        慢启动:传输速度从1开始指数级增长,刚开始启动比较慢

                超时:即第一次指数增长就超时,重新开始慢启动,指数增长重新开始,阈值减半

        拥塞控制:超过阈值就指数分母级增长,平缓运行

                超时:则回到慢启动,并且阈值减半

        快速恢复:单个数据包收到三次应答,即包丢失,发送端直接重发,不用等待超时

                超时:继续快速恢复

        总结三态:

        慢启动保证了小窗口依然可以稳定(持续慢启动),并且指数增长也保证了大窗口速度提升极快

        拥塞控制稳定了高速情况下的持续运行

        快速恢复可以应对少量丢包情况下,不必回到慢启动而是适当减速的情况,保证了速度

7.稳定连接

        TCP的连接与断开分别要经历三次握手与四次挥手,并且由一个状态表维护连接,每次传输数据包中状态表的不同位都会根据想表达的功能改变

        连接中的多层套娃:

        两个陌生人交流时,至少会先说一句话试探对方是否能听懂自己说话,再靠对方的回复得出自己是否能听懂对方说话

        这俩陌生人再见时,a提出再见时,收到b回复后,b出于礼貌,b也会提出再见,b得到a回复后,才算结束,此处,最后回复的那一方a必须得等一会儿,看b是否收到自己的回复了,如果a直接走了,b又恰好没听到a的回复,b就只能在原地继续叫a,最后等太久自己才离开,a再多等一会儿的话,就算b没收到回复,b肯定会再问一句”真再见咯,所以结束前a应该再等一会儿

        如果任何一句话没被对方听见或者没收到回复就会重复上一句

        模型建立:

        三次握手前两次确定了发送端的发和收,后两次确定了接收端的发和收

        四次挥手前两次确定了发送端的关闭,后两次确定了接收端的关闭    

        任何一次动作没有得到对应的回复,就会继续重复上一次或者等待对方回应

8.TCP三次握手(hello),建立连接

        1.客户端向服务端发送客户端序 seq,SYN(连接位)置1

        2.服务端接收,向客户端发送服务端序 seq,SYN、ACK(接收位,代表接收成功)置1,ack=客户端seq+1,ack作为辨识回应的服务器

        3.客户端接收,向服务端发送客户端序 seq+1(按照序 发送,此时发送第二条,所以加一),ACK置1,ack=服务端seq+1

        连接建立成功        

8.TCP四次挥手,关闭连接

        1.客户端向服务端发出seq1,FIN(结束位,提出关闭连接)

        2.服务端回复ack=seq1+1,ACK

        客户端“说了再见”以后进入等待,等待服务端“说再见”

        3.服务端向客户端发出seq2,FIN,ACK,ack=seq+1(此处ack与上一条不变是因为应答的数据包始终是客户端发的第一个数据包,也就是seq1那个数据包,为了使客户端能正确处理数据包,所以ack始终等于应答数据包的seq+1)

        4.客户端回复seq3,ACK,ack=seq2+1

        此时还没结束,因为客户端无法确定服务端是否收到了自己的应答包,如果客户端直接关闭,应答包又丢失了,那服务端就只能等待超时关闭了,因为它永远收不到客户端的应答包了,所以客户端发出应答后必须等待一会儿,这段时间内如果服务端没有收到,一定会重发3

        客户端等待时间结束,双方close

        连接断开成功

文章知识点与官方知识档案匹配,可进一步学习相关知识 络技能树支撑应用程序的协议应用层的作用22418 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年11月11日
下一篇 2021年11月11日

相关推荐