当我们在浏览一个网页时,就是发送一个http请求。可你们知道一个简单的http请求在底层在经过哪些处理吗?今天我们就来讲解一下。
首先我们打开某个网站:www.xxxx.com,然后就会出现一个网页,这就是一个http请求。
首选处于应用层的dns服务,返回了这个网址所对应的ip地址,因为http请求实际都是向ip发送请求的,只是我们表名是看不出来的,获取到ip之后,http协议生成请求报文,然后通过Tcp协议传输请求报文。
现在的tcp协议一般都将报文切分为报文段进行传输,按序号分为多个报文段,然后又通过IP协议搜索请求方地址。
这里大家就纳闷了,请求方地址不是dns服务就返回了ip地址了吗。
ip协议和ip地址是两个不同概念,在访问域名的时候dns服务就已经给我们服务器的ip地址了,但是我们访问互联网上的网站,都不是在同一局域网,都要经过中转。
同一局域网内不需要中转,我们有了服务器的ip地址。Ip地址指明了节点被分配到的地址,tcp传输报文不止需要ip地址,还需要mac地址,Ip间的通信依赖于Mac地址,然后进行中转时,会利用下一站中转设备的Mac地址来取得下一个中转目标,这是,就要采用Arp协议。
此协议是一种解析地址的协议,根据通信双方的ip地址就能反查出对用的mac地址,经过多次中转,Tcp协议将报文传送到了服务器,然后服务器对请求的报文进行处理,并返回对应数据,请求的处理数据同样也用tcp/ip通信协议向用户进行回传。由此可见。我们总结下,访问一个域名所要经过的过程。
Dns服务获取到服务器ip,然后Tcp协议向这个ip地址发送请求报文,ip协议根据此ip地址进行中转,然后发送到目标服务器,目标服务器收到此报文进行处理,然后已相同的方式进行数据返回。大致就是这样了。
配图(配图均摘自于《图解Http》):
Dns服务获取ip地址:
IP协议中转
总流程: