上一节说了TCP可能就有童鞋问如果我发的数据分片完怎么组合,都发乱了那我数据不恢复不了吗?
这里我就要说一下我们的seq序列号的作用了,通过他进行排序,也就是TCP的有序传输。
我们还有一点就是要知道seq是如何增长的,我们的seq值假如=100 len长度=7 那么我们下一个的seq就是107 通过107确定我们前面的数据接收到了不然可以通过前面的SEQ+len减去后面的seq来确定哪一部分的数据丢弃如何进行重传即可。
我们的TCP是双向也就意味着每方都维护着一个seq,当然ack也自然维护者,另一方面我们的数据还得考虑每次传输的大小,专业的说是窗口大小,假设大小固定,每次发送数据过去然后不断的清空缓存然后继续发送,比如固定窗口大小5000,第一次发送2000还有3000,第二次发送2000还有1000,然后发送数据确确认ack我们清空缓存继续重新发送5000继续减小,但是一旦多个客户端同时进行这个就会变得缓存就需要一个滑动窗口大小来进行解决。
滑动窗口根据我们的实际情况进行调整,比如一个5000的窗口大小,发送2000之后第二次发送2000的时候我这里就还有1000不够下一次,如果不调整数据就会丢弃,所以我进行调整告诉他我现在固定大小1000,就会发送的调整为1000,这样就解决了数据大小发送接收时候的尴尬局面。
当然我们的数据或者服务器出问题的时候,就必须启动秘密武器零窗口,告诉我现在零窗口不能发送给我,但是我们保持着连接的关系,直到可以发送的时候我发送一个固定大小值然后继续进行。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。