
前面我们学习了各种协议,应用层的 HTTP、DNS 协议,传输层的 TCP 协议,网络层的 IP 协议等等,今天我就带你看看一道常见的面试题:当在浏览器输入一个网址后会发生什么?探究一个数据包在网络的心路历程。
解析 URL当我们在浏览器输入一个 URL 后,第一步就是对 URL 进行解析,得到里面的参数,将域名和需要请求的资源分离开来,从而知道需要请求的是哪个服务器,请求的是服务器上的哪些资源等。我们首先看看 URL 各元素的组成:
服务器上面的资源的文件路径为:
封装 HTTP 请求报文对 URL 进行解析之后,浏览器确定了目标服务器和文件名,接下来就需要根据这些消息封装成一个 HTTP 请求报文发送出去。例如将上面的请求URL解析之后封装成下面这样的 HTTP 请求报文:
封装好报文之后,就是将该报文发送出去,但是怎么知道服务器的地址呢?别忘了,我们之前学的 DNS 协议。
DNS 域名解析获取 IP 地址在浏览器解析完 URL 后我们可以得到域名,但是域名并不是服务器的真实地址,IP地址才是每一台计算机在全世界的唯一标识,所以我们需要根据域名解析出 IP 地址,关于 DNS 协议不懂的可以看这篇。
根据域名解析出 IP 地址我们在上一篇文章中讲解的很详细了,这里简单的复习一下获取IP地址的过程:
通过上面的过程我们就知道服务器的IP地址了,于是就可以将请求发送给该服务器,但是在发送请求之前,我们还需要和服务器建立连接,那就是我们都知道的 TCP 连接了。
建立 TCP 连接知道了服务器的 IP 地址之后,就可以和服务器建立连接了。关于和服务器建立连接,就是我们熟悉的 TCP 三次握手和四次挥手了,什么,你还不知道,等我。
这里简单的介绍一下 TCP 的三次连接:
在建立好连接之后,我们就可以将请求发送给服务器了,但是上面的 HTTP 请求不问不能在 TCP 层进行传输啊,于是 TCP 会将HTTP 报文按序号分割成若干报文段并加上 TCP 首部,分别进行传输。接收方在收到这些报文段后,按照序号以原来的顺序重组 HTTP 报文。
远程定位的 IP 协议实际上,TCP 在三次握手建立连接、四次握手断开连接、以及连接建立过程中的收发数据(TCP 报文段)等各阶段 *** 作时,都是基于 IP 协议进行传输的,IP 协议将这些阶段的数据添加 IP 首部封装成 IP 数据报再进行传输。
IP 数据报的首部存有源 IP 地址和 目标 IP 地址。所谓源 IP 地址就是发送方的 IP 地址;目标 IP 地址就是通过 DNS 域名解析得到的目标服务器的 IP 地址。
其实,TCP 数据报并不是直接发送给目的服务器的,而是会经过很多路由器的中转 *** 作才能到达目标服务器,但是怎么每次中转的时候怎么知道转到哪个路由器呢?于是,ARP 协议就出现了。
使用 ARP 解析 MAC 地址我们知道 IP 协议的作用就是把各种数据包传送给对方,但是我们必须通过路由器中转才能将请求发送给目标服务器,这是因为客户端和服务器一般不会在同一个局域网内。这就需要利用中转设备的 MAC 地址来搜索下一个中转目标,并将 IP 数据报封装成 MAC 帧进行传输。就像下面这样:
不知道 ARP 协议的,可以去看看我们之前写的文章,可以说是很清楚了。
服务器响应请求通过上面一系列的步骤之后,就可以将请求发送给服务器了。这里我说一下请求时封装数据包和到达服务器时拆解数据报的方法:
服务器处理完请求之后,也会以同样的方式将响应返回给客户端浏览器,浏览器就会将请求的资源渲染出来。
当服务器和客户端没有数据需要发送之后,就会断开连接,到此为止一个相应就完成了。
总结这篇文章我们只是简单的总结了一下网络通信的过程,并没有写很详细的步骤,如果对具体步骤不是很了解的同学可以去看看之前的文章,这里就没有重复了,这里我们简单的总结一下上面的过程:
应用层:
- 浏览器封装 HTTP 请求报文
- DNS 解析域名获得目标服务器地址
传输层:
- 建立连接
- 把应用层传过来的 HTTP 请求报文进行分割,并在各个报文上打上标记序号及端口号转发给网络层
网络层:
- 利用 ARP 协议根据 IP 地址获取作为通信目的地的 MAC 地址后转发给链路层
服务端在链路层收到数据,按序往上层发送,一直到应用层接收到浏览器发送来的 HTTP 请求报文,然后处理该请求并返回 HTTP 响应报文,浏览器接收到响应报文之后解析渲染界面。最后 TCP 断开连接。
引用:
https://mp.weixin.qq.com/s?__biz=MzI0NDc3ODE5OQ==&mid=2247484696&idx=1&sn=ba933d74c77104ed282315ec37b9d72f&scene=19#wechat_redirect
https://mp.weixin.qq.com/s?__biz=MzUxODAzNDg4NQ==&mid=2247483989&idx=1&sn=7e2ed852770743d3955ef9d5561fcef3&chksm=f98e46ffcef9cfe98e6c753afac86125b0d5891ca5e63968b5f3a8da4905d14274088f40c34e&scene=178&cur_album_id=1337204681134751744#rd
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)