在浏览器中输入网址后,计算机背后都做了些什么事? - Go语言中文社区

在浏览器中输入网址后,计算机背后都做了些什么事?


首先感谢阮一峰老师的讲解

很长一段时间,都不清楚计算机通信背后所作的事情。经过长时间的经验积累与查询第三方资料,今天我就我所知道计算机通信与大家分享,错误之处还请指正!

1.确定访问的目标地址

浏览器中输入网址后,首先浏览器需要知道访问的目标地址(也就是IP地址),如果,输入的是IP地址(如:172.217.24.14),那就跳过这一步了。

如果是字符串域名,先去DNS域名服务器查询对应域名的IP地址,DNS服务器返回该域名的IP地址,域名服务器的默认访问端口是53。

2.准备HTTP通信包,分为请求头,请求行,请求体,详细的细节这里不在叙述,网上有很多资料。

浏览器(应用层)根据获得的目标IP组装好HTTP请求包。假如是4096个字节,通过建立传输层TCP连接进行通信。

3.准备TCP通信包

首先TCP通信包分为包头(head)和包体(data),上一步中的http通信包放在TCP通信包的包体(data)部分。TCP数据包需要设置端口。

第一步可以拿到接收方的端口,发送方的端口是一个随机端口,范围为0~65535,0~0124端口默认系统占用,一般使用大于1024的端口

TCP数据包包头长度为20字节,加上HTTP协议包4096个字节,总共是 4116字节。

4.准备网络层通信包

IP协议包分为包头和包体,将TCP协议包再嵌入IP协议包的包体(data)部分,IP数据包需要设置访问方和接收方的IP地址,到这一步,IP地址已经是已知的了。

IP协议包的包头为20个字节,加上TCP协议包,总共是4136字节。

5.准备以太网协议通信包

以太网协议包分为包头和包体,将TCP协议包嵌入以太网协议包的包体(data),以太网协议包需要设置双方的MAC地址(物理网卡地址),

发送方为本机的MAC地址,接收方的MAC地址分两种情况:

用双方的IP地址分别与访问方的子网掩码做二进制的与运算,如果结果一致,则双方处于统一子网下,

如果双方处于同一子网下,可以通过ARP协议拿到对方的MAC地址。反之不相等,则不处于同一子网下,比如我的电脑和谷歌的服务器肯定处于不同子网下,

那接收方的MAC地址就是当前子网的网关的MAC地址,以太网协议数据包的数据部分,最大长度为1500字节,所以IP数据包需要拆分成三个包,

每个包都有自己包头,所以三个IP协议包长度为1500,1500,1196

 

 

备注:上图多画了一个数据包,应该是三个不是四个

6.发送数据包

以太网数据包通过网卡发送到多重网关发送到目标服务器,目标服务器根据IP表头的序号,将三个包拼接起来,取出完成的TCP数据包,读出里面的HTTP请求包,

做出响应后,再通过上面的顺便发送响应包到接收方的电脑上,呈现在浏览器中,至此,一次http通信就完成了。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/itpika/article/details/90407903
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-16 04:32:49
  • 阅读 ( 839 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢