前端网络基础-TCP为啥这么可靠

如果可以解决以上四种问题,基本上就可以实现可靠传输。那么TCP协议是如何解决上面四个问题的呢?

我们知道数据到达传输层后,会按照一定字节数分段,即一个完整数据报文,会被分为多个大小相同的数据段。

TCP协议会将每个数据段都封装为TCP报文,并且在头部插入TCP报文头。

而TCP报文头就是实现可靠传输的基础。

我们可以再次认识一下TCP报文头格式

开始是:源端口和目标端口,这两个数据是面向应用层时实现准确数据传输的。保证数据可以根据端口号准确投递给对应的应用程序。因为每个应用程序和其端口号一一对应。这里实现了向上传输的可靠。

接着是:序号

这里序号是两个部分之和。第一部分是一个随机初始值,这个随机初始值由发起方生成。第二部分是TCP报文体中封装的数据段,在原始数据报文中的字节偏移位置值。

之后是确认号:

确认号有两个作用

1、确认号就是告诉TCP通信的另一方,自己已经收到了对方发的TCP报文。

2、告诉另一方下次该请求哪个数据包

在TCP建立连接阶段:

发起方第一次握手时,发送的TCP报文的头部会携带一个序号(随机值),接收方收到第一次握手报文后,会反馈第二次握手报文给发起方,该报文头中有一个确认号,它的计算规则是:“确认号 = 第一次握手时序号 + 1”

例如:

发起方收到第二次握手报文后,检查确认号是否比第一次握手时序号大1,是的话,则认为就是接收方确认接收到了。

并且确认号也表示希望发起方下次从 确认号指定的位置开始发起请求。

在TCP通信阶段:

比如浏览器会请求服务器的某个资源文件而发起HTTP请求,服务器会对HTTP请求回应,回应报文中包含了资源文件的大小,此时服务器会通过TCP连接来传输资源文件。注意资源文件首先会被分解为多个数据段,服务器将数据段封装为TCP报文,然后依次发送给浏览器。

此时服务器发送的TCP报文中,报文头会带一个确认号,该确认号此时的工作不再单纯是告诉浏览器自己确认收到了你的TCP请求,即确认号不再是 seq + 1了,而是告诉浏览器下次该请求哪个数据段对应的TCP数据包了。它的计算规则是: 确认号 = seq + 请求资源文件大小 - 54

为什么要减去54呢?

因为这里通过HTTP获取到请求资源文件的大小不仅包含了 原始数据段,还有各层对原始数据段的封装头信息,比如:

14字节Ethernet报头(数据链路层),20字节的IP报头(网络层),20字节的TCP报头(传输层),它们加起来就是54字节

减去这54字节,才能得到原始数据段大小。

例如:

这里ack确认号 396的计算过程就是 = 1 + 449 - 54
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

整理面试题,不是让大家去只刷面试题,而是熟悉目前实际面试中常见的考察方式和知识点,做到心中有数,也可以用来自查及完善知识体系。

《前端基础面试题》,《前端校招面试题精编解析大全》,《前端面试题宝典》,《前端面试题:常用算法》PDF完整版点击这里免费领取

前端面试题宝典

前端校招面试题详解

18191877)**

[外链图片转存中…(img-rxztpPcV-1713728890533)]

[外链图片转存中…(img-G0Jqw8wA-1713728890533)]

[外链图片转存中…(img-1LpxzrMe-1713728890533)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值