当我们在浏览器地址栏中敲下回车键之后,整个计算机网络将会发生什么呢?
首先我们应用层的浏览器决定向 DNS 服务器请求解析域名【www.baidu.com】,那么就要遵循 DNS 协议。
DNS 运行在 53 号端口,于是浏览器会创建一个 UDP 套接字,标识该套接字的二元组分别是『目的 IP 地址』和【目的端口】。而套接字本质上就是为了唯一标识应用层进程,就是为了让响应报文能够找到目的地。
接着,浏览器将 DNS 请求报文封装好推入套接字,开始我们的 DNS 解析过程。
最终我们会从【本地 DNS 服务器】得到 baidu 的 IP 地址
应用层
浏览器封装 HTTP 请求报文,然后创建一个 TCP 套接字。
运输层
运输层收取了报文,与目的主机是否建立 TCP 连接【三次握手】
运输层将应用层发过来的数据报又一层封装,添加进【源端口号】和【目的端口号】以及相关差错检验字段。
最后将 TCP 数据报向下传递到网络层。
网络层
网络层其实很简单,拿到数据报并封装成 IP 数据报,即在原 TCP 报文的前提之上添加【源 IP 地址】和
【目的 IP 地址】等字段信息。
链路层
数据链路层拿到 IP 数据报,它需要封装成以太网帧才能在网络中传输,也就是它需要目的主机的 Mac 地址,然而我们只知道目的主机的 IP 地址。
所以,链路层有一个 ARP 协议,直接或间接的能够根据目的 IP 地址获得使用该 IP 地址的主机 Mac 地址。
当然,ARP 协议运行的前提是,目的 IP 地址和当前发送方主机处于同一子网络中。如果不然,发送方将目的 Mac 地址填自己网关路由的 Mac 地址,然后通过物理层发送出去。
网关路由由于具有转发表和路由选择算法,所以它知道目的网络该怎么到达,所以一路转发,最终会发送到目的网络的网关路由上。
最后,目的网络的网关路由同样会经由 ARP 协议,取得目的主机的 Mac 地址,然后广播发送,最后被目的主机接受。
这样百度的服务器就接受到一个 HTTP 请求,于是它解析这个请求,确定该请求的动作是什么,也就是它需要什么东西,并构建响应报文,以同样的方式从网络到达源主机。