HTTP请求的奇幻旅程:从发起至响应的全方位探索
1、概述
今天我们来聊一下HTTP请求相关的内容,不知道你有没有想过,当我们在浏览器中轻轻一点或者通过一个应用程序发送一个HTTP请求时,这个请求便踏上了一段既复杂又精彩的旅程。这不仅是一次数据的传递,更是一场跨越网络与服务器边界的冒险。
这背后涉及到的知识点很多,例如DNS、网络分层架构、网卡设备、路由器、ISP接入网、ISP骨干网以及城域网等等。今天我们就通过一个案例来分享一下相关的技术原理和过程
2、从浏览器开始
2.1、用户发起请求
Jerry 在浏览器中输入了 i.love.tom.com 这个域名,然后轻轻点了一下鼠标, 这个时候浏览器就开始进行一系列的操作了。
2.2、URL 解析
用户发起请求后,浏览器的解析器会将URL i.love.tom.com 解析成协议、主机、路径等部分,通常默认协议是HTTP和HTTPS,这一步得到的结果是 协议是 HTTP(S) 、主机是 i.love.tom.com访问路径是 /(根路径)。
2.3、DNS查询
所谓的DNS(Domain Name System) 主要的功能是域名解析,你可以理解成他是将域名和IP地址相互映射的一个分布式数据库。这个过程需要操作系统的 DNS 客户端 和浏览器协作完成,
首先是浏览器查询本机的DNS缓存,缓存命中浏览器直接使用缓存的 IP 地址和数据,缓存未命中,操作系统会向配置的 DNS 服务器发送请求(通常是 ISP 提供的 DNS 服务器),也就是访问 DNS服务器获取域名i.love.tom.com对应的ip地址。
2.4、建立TCP连接
有了目标端的ip地址后,浏览器通过操作系统的网络栈创建一个套接字(Socket)准备建立TCP连接,也就是三次握手,这个过程如下:
相信大家应该知道HTTP的请求头相关的概念,同样的请求在这一步通常会在请求上加上TCP头和IP头。
2.5、网卡(NIC)
TCP建立完成后请求就到了网卡,于此同时请求在这一步会被加上MAC头,这个时候的请求就是这个样子
网卡就会将上面这个形状的请求数据包发给网关,通常网关指的就是我们家里使用的路由器。这个时候 请求就会从你的主机设备(个人电脑或者手机)进入到你家里的局域网(LAN)了。
2.6、路由器
请求到了路由器之后就会转发到ISP接入网,你可能会有一个疑问,求情进入了接入网之后,怎么找到目标主机呢,好吧,在这之前还有一个步骤,那就是查询路由表。
路由表是一个表格,记录着从源端到目标端应该怎么走的路线,路由器通过查询路由表将请求发送到外部网络
3、什么是网络互联
所谓的网络互联(Network Interconnection)其实就是指将多个独立的计算机网络通过物理设备、通信协议或其他技术手段连接起来。这么做的目的就是让在不同的网络环境中的用户 可以相互通信和共享资源。我们继续分析请求接下来的路程
3.1、 ISP接入网(Access Network)
第二章节我们知道请求通过路由器走到了外部网络了,那么外部网络是什么样子的呢,首先第一站就是ISP接入网,也是就是运营商给你家开通的光纤网络(宽带),接入网承载的能力是 负责将用户的数据通过各种技术(如光纤、ADSL、VDSL、无线等)传输到ISP的骨干网络中。常见的有技术方案以下几类:
- 光纤到户(FTTH):通过光纤直接连接到用户家中,提供高速互联网接入。
- ADSL/VDSL:通过电话线传输数据的宽带接入方式,适用于较远距离的接入。
- 无线接入:例如4G/5G无线宽带、Wi-Fi等技术,通过无线信号连接用户。
- Cable(同轴电缆):通过有线电视网提供的宽带接入。
3.2、ISP骨干网(Core Network)
骨干网也就是运营商提供的一大批高速光纤链路和大型路由器组成的,他承载的能力是 将数据包高速高效地传输到其他接入网。也就是说请求数据包会在这里经过ISP的多个路由器和光纤链路,最终到达目标主机所在的接入网。骨干网你可以想象成下面这张图的样子,当然不仅仅只有路由器和光纤组成的哈还有更多其他的网络设备,这里你可以先这样理解。
3.3、不同城市之间的网络
前面请求已经到了ISP的骨干网了,那么请求接下来怎么到达Tom 所在的城市呢。当请求路过骨干网中最后一台路由器的时候,查询该设备上的路由表的时候就会进入到Tom所在城市的城域网,最后通过该地区的接入网到达Tom的家里的路由器,这个过程如下所示:
4、局域网中的请求
4.1、路由器转发
这一步请求到达了目标主机所在的局域网中的网关 (通常指的路由器),我回忆一下这个请求的样子
如果数据包的目的地址是本地网络中的目标主机,而不是下一个路由器,路由器需要查找目标主机的 MAC地址。这个过程通过 ARP(地址解析协议) 来实现。具体的过程就是
1、路由器会向本地网络广播一个ARP请求,询问谁拥有这个IP地址?
2、目标主机收到ARP请求后,会回复自己的MAC地址
3、路由器在收到ARP响应后,会将目标主机的MAC地址缓存起来,然后将数据包的目的MAC地址设置为目标主机的MAC地址
4、将数据包发送给目标主机
4.2、到达目标主机
这里请求到达了目标主机的网卡,网卡会取下MAC头判断是否是和自己匹配,匹配成功了就继续将请求传送到操作系统网络协议栈,操作系统根据目标 IP 地址识别出该数据包是发给它的,于是就取下TCP头,然后解析出对应的 TCP 协议,比如目标端口是80,
这个时候操作系统就会查找有没有监听80端口的进程,有将请求发送到对应的进程,于是监听80端口的进程就会收到这个HTTP请求了。 一个HTTP请求漫长的旅途到此结束了。
5、总结和复盘
当我们在浏览器中看到网页加载完成,或者在应用程序中收到API的返回结果时,这个HTTP请求的奇妙之旅也就宣告结束。在这个短暂的过程中,它经历了无数的挑战和考验,从本地网络到互联网,再到目标服务器,每一步都充满了技术和智慧的结晶。最后给出一张图来总结吧
我们已经知道了HTTP请求从源端到达目标主机的进程里了,那么接下来我们要分析目标主机上对应的进程时如何解析这个HTTP请求的,大家可以查阅后面一篇文章学习大话HTTP协议 手动实现一个HTTP服务器-CSDN博客