在浏览器中输入网址后,计算机背后都做了些什么事?
首先感谢阮一峰老师的讲解
很长一段时间,都不清楚计算机通信背后所作的事情。经过长时间的经验积累与查询第三方资料,今天我就我所知道计算机通信与大家分享,错误之处还请指正!
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通信就完成了。