一个HTTP数据包是怎样在网络上传输的

一个HTTP数据包是怎样在网络上传输的

精选文章moguli202025-04-07 18:02:0815A+A-

当我们请求了一个
https://www.baidu.com/index.hml的网址时,这个数据包是怎样到达对方服务器上,又是如何返回的呢?

第一步:浏览器会将www.baidu.com 单独拿出来,来进行dns解析出对应的ip地址,这就是著名的DNS协议。DNS协议具体的流程是怎样的呢?让我们慢慢看一看下图。

  1. 首先会检查hosts文件中有没有对应的域名到ip的映射关系
  2. 然后会去本机配置的dns服务器上去获取域名到ip的映射关系
  3. 然后会去根dns服务器上去查找对应的顶级域名.com
  4. 然后会去.com下寻找对应的baidu.com
  5. 最好会去baidu.com下找到www.baidu.com 的ip地址,也叫A记录
  6. 然后找到对应的ip地址后,数据包会返回给本机指向的dns服务器,在此服务器上记录上且加载至缓存中
  7. dns服务器会返回数据包给本机,本机达到ip地址后,也会在内存里做一下对应域名的缓存,最后应用层便拿到了www.baidu.com的ip地址。


第二步:此时第一步中拿到的ip地址便派上了用场,大家知道,在不同主机间的通讯中,是通过TCP/IP协议簇来实现的,浏览器属于应用层,当数据要从我们本机发送出去时候,需要从有上层到下层的一个封包,即应用层->传输层->网络层->数据链路层。

因为默认用的是http协议,所以它会再应用层先封装一个http的数据包,后面经过传输层,传输层主要确认的是主机上的端口。因为一个主机上可能会有很多服务的,不同的服务是通过端口来区分的。传输层将应用层的数据包整体当做自己的数据体,向下继续封包。



此时到了网络层,网络层的作用是要确定目的主机是在哪,此时,第一步中的ip地址便起到了作用,将目标ip及一些其他校验的参数写入后,继续向下封包。

互联网网上的主机可谓是太多太多了,所以光靠一个ipv4的地址就全部想标记完事不现实的,所以网路上规定了私网和公网,公网地址是可以被直接访问的,而私网地址不能被直接访问。为什么要说这个呢,因为到了数据链路层的话,就是数据包从网络层下来后,会现在本地的私网里穿梭来回,直到找到出口,才会从出口出来,然后再去一步步的到达对应的目标地址。

在私网中很有用的一个协议叫做ARP协议,他会通过广播,将对应私网下的ip地址映射为mac地址(也叫硬件地址 ),然后找到私网中的对应的网关或者路由,将数据包一步步的传输过去。


第三步:当数据包一步步的通过网关或路由到达我们的目的主机后,首先内核会判断tcp/ip协议栈中的目标host是否为本机,如果是的话,会通过我们内核的防火墙,看是否匹配上对应的规则,这里假设没有设置防火墙,这样这个数据包就进入了我们主机。



进入主机后会通过本机的TCP/IP协议栈,逐层解包,当解到传输层的时候,这里会拿到对一个的目标端口,通过目标端口我们的主机就可以判断出来是哪个进程提供的服务,在这里的话就是web服务,一般是有nginx/apache/tomcat等来提供。

这里找到对应的进程后,比如说这里是nginx来提供的web服务,会把传输层的数据包交给对应的nginx进程来处理。首先可以通过对应端口的nginx配置文件来确定提供web服务的rootdir在哪里,rootdir下一般就是用于处理请求的逻辑代码所在的目录。nginx会把对应目录的代码从磁盘加载至内存。

当通过对应的uri匹配到对应的路由之后,会通过路由找到对应的代码处理逻辑来处理该数据包,然后服务端就会给客户端会返回数据包答复。


好了,本篇文章大致讲了一下数据包的传输过程,中间有很多细节的地方都粗略过了一下,希望各位大佬略过。

点击这里复制本文地址 以上内容由莫古技术网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

莫古技术网 © All Rights Reserved.  滇ICP备2024046894号-2