从浏览器中输入一个URL(地址)之后信息是怎么进行收发的?

从浏览器中输入一个URL之后,都发生了哪些事情?
从网络传输的角度来看(协议之间是如何配合的)
在这里插入图片描述
一、第一部分 发送之前的准备工作
1.浏览器首先会根据这里的域名,查询对应的IP地址
(1)先查浏览器自身的缓存
(2)再查hosts文件
(3)再查DNS服务器
先查就近的DNS服务器,再查上一级的DNS服务器

2.浏览器会构造出一个HTTP请求
这个HTTP请求中就包含了刚才的这个域名信息(用户输入的信息)

3.浏览器就要调用操作系统的socket API,把这个HTTP请求交给TCP来进一步处理。TCP协议就需要构造一个TCP数据报。
(1)在发送TCP数据报之前,还需要进行三次握手,建立连接。
此处三次握手涉及到的SYN/ACK也是同样要经过网络层,数据链路层,物理层,依次封装到达对端服务器之后再一次分用的。
(2)具体进行数据传输,发送方就会把这个TCP数据进一步的交给IP协议在进行一次封装。

4.网络层把数据报封装成了一个IP数据报,进一步的进行封装
也可能是多个IP数据报,IP协议也会自动进行分包过程,然后把数据再交给数据链路层。

5.数据链路层会把这个数据在封装成以太网数据帧
在构造帧头的时候就需要根据IP映射到mac地址,这个构造过程依赖了ARP协议,再把这个数据交给物理层传递。

6.物理层把数据转换成电信号,继续传输。

二、第二部分 路途中间的转发过程
7.电信号沿着网线,到达了下一个设备(路由器)
路由器就会针对收到的数据进行分用。
(1)物理层把数据交给数据里链路层
(2)数据链路层交给网络层
(3)路由器拿到了网络层中的IP数据报
(4)取出其中的目的IP,查询路由表,找到下一个传输的目标,进一步的再找到下一个要传输目标的mac地址。
(5)重新进行封装(把数据交给数据链路层,和物理层)
此处的源mac和目的mac就发生改变了

三、第三部分,到达接收方以后
8.数据到达接收方(搜狗服务器),数据仍然要继续进行分用。
层层解析
(1)物理层把光电信号转成以太网数据帧,交给数据链路层
(2)数据链路层解析出IP数据报,交给网络层(都涉及到crc校验,如果发现校验和不对,说明数据是错的,就直接丢弃了)
(3)IP协议在进行解析,解析出一个数据报。(IP报头里包含着协议类型)
这个解析过程还可能涉及到组包的的过程。
(4)再根据TCP数据报中的端口号,找到对应的进程,把数据就放入到对应socket的接收缓冲区里了。

9.应用程序调用对应的socket API,从TCP接收缓冲区中读取数据,应用程序把这个数据按照HTTP协议来解析,获取到其中的URL。根据URL中指定的路径,获取到/根路径。

10.服务器内部会对/这个路径进行配置,映射到具体的index.html(也可能是其他名字)的html文件。服务器就会读取这个文件,把这个文件内容构造成一个HTTP响应数据,然后再调用socket API进行发送。

11.重复封装过程,服务器发送的响应数据也要层层封装,最终变成一个物理层上传输的光电信号。

扫描二维码关注公众号,回复: 14823265 查看本文章

四、第四部分 路途中间的转发过程
12.光电信号到达下一个路由器,路由器重复分用过程,解析到IP这一层,取出其中的目的IP,查路由表找到下一个设备在哪,重新进行封装。

13.到达下一个路由器,重复分用和封装的过程,最终到达用户主机。

五、第五步,到达一开始的发送方
14.用户主机重复分用过程,依次把数据取出来,最终交给应用程序.

15.浏览器得到了HTTP响应报文,解析这个报文,获取到其中的html内容,根据html进行渲染。

16.由于html中可能会包含一些img,link,script这些标签,可能会触发二次请求,浏览器会根据标签中的信息,构造出对应的HTTP请求发送给服务器,再从1.开始重复。

猜你喜欢

转载自blog.csdn.net/stitchD/article/details/123975360