计算机网络——域名解析后的TCP协议详解

举报
Vista_AX 发表于 2023/06/28 07:28:07 2023/06/28
【摘要】 计算机网络——域名解析后的TCP协议详解

点赞后看,养成习惯
喜欢的话 可以点个关注哟
你们的点赞支持对博主们来说很重要哦 !!!

本文将要说明的是,当你使用http协议访问某域名时,对应网络层中TCP协议的具体工作情况。

本文将针对以下问题逐条进行解答:

01 域名解析后,TCP进程此时传送的是什么?

02 TCP进程三次握手连接的原因和步骤?

03 建立握手后,TCP如何传送HTTP?

04 TCP如何确定对方拿到了HTTP数据?

05 TCP为什么要释放连接?

06 TCP如何关闭连接?

image.png


01 TCP传输的HTTP包

域名解析后,浏览器回根据应用层协议,将用户访问 某域名 的请求打包成HTTP/HTTPS格式,如何将打包好的HTTP告诉TCP进程,同时告诉TCP进程 域名对应的IP地址

所以说,TCP进程此时传送的是HTTP包


02 TCP进程三次握手

TCP进程属于低调、稳健的老司机,属于不见兔子不撒鹰的狡猾猎人。既然是老司机,开车一定很稳,那么稳在哪里呢?

image.png

老司机心想,如果将浏览器发来的IP地址+HTTP直接发送个IP进程,最后会产生一个IP包,但最终这个IP包是死是活,自己是无法知道的。

也许IP包遭遇了线路硬件故障、网络路劲堵塞被丢弃或者服务器压根就没有开机,最终这个IP包消失的无影无踪。

那么老司机该怎么办么?

老司机想出一个办法,先不发HTTP,想要确保自己的IP包(不包含任何用户数据)可以到达服务器,并且服务器的IP包也可以返回。(确定可以有来有回,就是可靠的)

这样的话,就可以保证

①双向路由路径是通畅的,没有防火墙或访问列表的阻挡

②如果IP包是可以返回的,说明服务器是正常工作的。

那么三次握手连接具体是什么呢?

image.png

A:老大,有空吗?想和你说说话,听到请回答
image.png

B:小A,听得到,你能听得到我吗?

A:听得到

TCP三次握手本身是使用IP进程来完成发送,由于通常通信的两台主机不在同一个网段,所以是三次不同网段的通信

在IP进程的眼里,三次握手就是三个IP包的交互(不考虑超时传输的情况下),还没有传输浏览器的HTTP之前,已经花费了三个IP包的代价


03 TCP三次握手后的数据传输

TCP进程经历了三次握手之后,只要使用TCP头将HTTP包打包起来,包的格式为TCP + HTTP ,发给IP进程就好了。

那么在IP进程看来,这只是一个IP包而已,IP包的格式为 IP + TCP + HTTP


04 TCP的确认机制

如何确定对方是否接收到这个IP包呢?

TCP确认收货机制:对方发一个确认,喊一嗓子,IP包已经收到,那么本地TCP进程就放心了

那么,本地TCP进程如何知道是哪个IP包被对方确认收货了呢?

序列号,就和网购时,卖家发货时,会在外包装打上一个序列号,当买家收货时确认产品序列号,这样卖家就会知道某件产品已经安全无误送到买家手中。 image.png

TCP头就有一个序列号,比如A的TCP进程要传输1000字节数据,初始序列号就是从1开始,然后TCP把这1000个字节打包,然后层层封装、传输,并最终到达服务器TCP进程。这是发送端的序列号,从1-1000


而服务端确认收货号截至为1001,这是告诉对方1-1000序列号已经成功接受,在等着收1001的数据呢。本地TCP进程接受到服务端确认收货的消息,就安心等待服务器将 对应页面的内容发送过来了

这个过程一个数据,一个确认收货,一共两个IP包

服务器接受到请求后,将自己的主页封装成HTTP格式,服务器TCP进程发给本地一个包含网页的IP包,本地回复一个收货确认(IP+TCP),这又是两个IP包


05 TCP释放连接机制

本地浏览器将接受到的网页输出到屏幕上之后,为什么还需要将之前建立的TCP连接断开呢?继续保持不行吗?

答案是不行的,因为TCP连接回占用资源,如果你依然保持TCP连接,回占用TCP端口连接、内存资源。如果你是老板,你肯定不会养一个闲着没事干,占着茅坑不拉屎,还吃你工资的人对吧。
image.png

所以我们要释放TCP连接,把他给有需要的应用程序使用。


06 TCP关闭连接

TCP连接可以看成两个水管,一个进水,一个出水
image.png

从本地TCP进程来看,发数据用的时出水管,接受服务器数据使用进水管,释放连接意味着两个水管都关闭。

如果本地TCP进程数据已经发完了,大可关闭自己的出水管,但是不能关闭进水管,因为你不确认对方是否还要运水过来。所以进水管的关闭需要由对方来关闭,因为对方知道还有没有数据来传输

那具体时如何关闭TCP连接呢?

A:老大,我没有水要运了,准备关闭我的出水管了,收到请确认
B:小A,你出水管里的数据我已经接受完毕了,你可以关闭你的出水管了,确认完毕。

这样子,A接受到B的回应,就会关闭出水管

如何,假设服务器也没有水要运给本地了,所以决定关闭服务器的出水口

B:小A,我也没有水要运了,准备关闭我的出水口,收到请确认!
A:老大,我已经接受完你出水管里的水,可以放心关闭了,确认完毕!

这样,一旦服务器接受小A的确认,就会关闭自己的出水口,服务器TCP进程释放资源

而此时本地TCP因为无法确认服务器是否已经释放TCP连接,那本地TCP进程会怎么做呢?

启动定时器等待,如果超时以内没有接受到任何重传的消息,说明对方已经接受到自己的确认,已经关闭了TCP连接,释放了资源。 而如果超时以内接受到了对方的超时重传,自己再确认,如何再等待,知道最终确认对方接受到自己的确认。


07 那么在本次的通信过程中,一共使用了多少个IP包呢?

不考虑超时重传的情况下,整个通信过程一共使用了多少IP包呢?
建立三次握手,3个IP包
双向通信,2个IP包
释放连接,4个IP包

共计11个IP包




*

以上文章,作为自己的学习笔记,仅供参考

本文完,感谢你的阅读!!!

最后,如果本文对你有所帮助,希望可以点个赞支持一下。你们的鼓励将会是博主原创的动力。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。