3 魔道TCP协议 外公家的82年巧克力

TCP(Transmission Control Protocol传输控制协议)

在这里插入图片描述
问题来了,它控制个什么呢?看上图

  1. 序号:控制包的顺序,解决乱序的问题。
  2. 确认序号:发出去的包应该有确认,解决丢包问题。
  3. TCP Flag ()URG、ACK等,控制连接状态,有始有终。
  4. Window size,控制流量大小。
  5. Checksum它是有发送端计算,然后接收端进行验证,保证包数据的正确性。
  6. 拥塞控制,根据网络情况调节流量。看下面。

3次握手

理解了上图,为什么3次握手就很简单了。
AB是连接的两端。
A要和B建立TCP连接。(和打电话差不多)
A要先打招呼了:A->B:你好b,我是a
B收到消息B->A:啊,原来是你。
A:对对对。是我没错。

哪里是3次握手,明明是发了3条消息,真要3次握手应该一人发两条合计6条才对嘛。
专业名词坑人。
看图:
在这里插入图片描述

4次挥手

还是A和B。不过B是A的外公。
A到外公家玩了之后要走了。
A->B:外公我要走了。
B->A:哦。
过了会儿。
B->A: 这里还有我珍藏的82年巧克力。带回去吃吧。
A->B: 泪眼汪汪😭,谢谢外公。

也是4条消息而已。
如图:左边是A。
在这里插入图片描述

累计应答(cumulative acknowledgment)

按说为了保证以上的特性,每收到一个包都需要一个回复,但这样就太傻了。

就像你处理公司的问题一样,最好把一天的问题都解决差不多了,一次性统一汇报。而不是,处理一个就给老板说一次。

那么就需要一个TODO LIST任务清单来存储任务。

在TCP协议中也是这样。
在这里插入图片描述在这里插入图片描述
大家批量处理,如果遇到问题(没收到ACK确认)发送方就需要处理。

第一种:重新发。
等多久重新发呢?这个时间T需要考虑双方的消息往返时间再加点盐。是个动态变化的时间。
如果重新发送还是超时了。那么这个T就会加倍。因为网络不好就不要再去添乱了。体现最前面第6点拥塞控制。

第二种:根据序号通知发送方缺了什么,那么马上重发。Selective Acknowledgment (SACK)

流量控制,体现在这里是窗口大小可调节,如果接收端收不了,发送方的窗口大小就会变小,直到0就发不了。

拥塞控制

上面讲到可以避免包丢失包重发。
因为带宽是有限的。那么怎么知道一次发多少才合适?
上面的发送窗口,最开始从1个开始尝试,如果成功那么就指数增长。1、2、4、8这样。
丢包了就除以二。

这样有点问题:丢包不一定就是带宽满了。而且指数加得太多了会填满中间设备的缓存,不一定能更快。
TCP BBR 拥塞算法就是为了解决这个出现的。

TCP Flag

NS:隐藏保护。
CWR:发送主机设置拥塞窗口减少(CWR)标志,以指示它收到了一个设置了ECE标志的TCP段,并在拥塞控制机制中作出响应。
ECE:ECN-Echo具有双重角色,具体取决于SYN标志的值。它表明:
如果SYN标志设置为(1),则TCP对等体具有ECN能力。
如果SYN标志为清除(0),则在正常传输期间接收到IP报头中具有拥塞经历标志设置(ECN = 11)的分组。这用作TCP发送方的网络拥塞(或即将发生的拥塞)的指示。
URG:表示紧急指针字段是重要的
ACK:表示确认字段是重要的。客户端发送的初始SYN数据包之后的所有数据包都应设置此标志。
PSH:推送功能。要求将缓冲的数据推送到接收应用程序。
RST:重置连接
SYN:同步序列号。只有从每一端发送的第一个数据包应该设置此标志。其他一些标志和字段会根据此标志更改含义,有些仅在设置时有效,有些仅在明确时有效。
FIN:来自发送方的最后一个数据包。

参考:
刘超 趣谈网络协议
搜狗百科

联系我:
JS、JAVA程序调试;
网站、小程序、APP项目;
qq:1582508336 魔道工程师

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值