从一个网址到Web页面的请求历程
看完《计算机网络 自顶向下方法》这本书后,想要详细的描述一下从一个网址到Web页面的请求历程,如果有错误,欢迎各位小伙伴在评论中指出。
前言
我们每天都会在浏览器中输入许多的网址,比如google等等,但是当我们输入完网址后,他又是具体怎么变成一个Web页面的呢?
简单来说就是根据域名解析出IP地址,然后找到具体的服务器,完成连接后,服务器就会发出Http response,然后我们就可以看到google的搜索框啦。
当然,具体去看的话,里面就会涉及到许多有趣的协议,下面我们一起来看看一个网址时怎么变成Web页面的吧。
1.域名解析
首先,我们在浏览器中输入一个网址,比如www.baidu.com,但是这时候我们只知道了我们要去的小伙伴家的名字叫百度,但却不知道他家的具体地址,那我们要怎么过去呢?
当然,可能有人说,我认识百度,我知道他家在哪儿,那他就会按照自己印象中的百度的地址,直接去他家。
不要急,我们可以向周围的路人打听一下,首先我们去问问本地DNS,他是个刀子嘴豆腐心,当我们问他的时候,他只会说知道或不知道,不过,如果他不知道的话,他就会帮我们去问问根DNS服务器,问他百度住哪儿,他可能会告诉你一个地址,比如说com,但他可能不知道百度具体住在com哪儿,于是他会说:我帮你去问问顶层DNS吧。但是如果顶层DNS只知道百度住在baidu.com,但也不知百度具体住哪儿呢?那他就会去问管理方DNS服务器,如果管理方DNS服务器知道的话,他就会告诉本地DNS服务器百度的住址是192.168.30.01,这是DNS服务器的迭代查询。然后本地DNS服务器就会告诉我们,当然,他这么高冷,只会和我们说百度的地址,而不会说问了好多人才知道的。也不会告诉你他悄悄记下了百度的地址,这样下次有人问他他就可以直接告诉那个人啦。这就是本地服务器的递归查询。
当然,有了地址,我们要先在小本本上记下来,这样我们下次就不用去问本地DNS服务器啦。那我们接下来就去找百度吧。
之后百度家的地址后,很多小伙伴可能会大吃一惊,他家竟然后65535扇门,不过没关系,我们看看本地DNS给我们的地址上有没有告诉我们从哪扇门进去,如果没说的话,我们就从正门,编号是80的那扇门走吧。
HTTP
HTTP请求
知道百度的地址后,我们还是不能直接进去,因为百度不知道我们是谁,这时候就轮到了HTTP协议出场,在HTTP请求中,包含了请求行,请求头和请求正文。请求行中包括请求方法、url、版本号,请求头包含了host,User-Agent,Connection,Accept-Charset, Accept-Encoding, Accept-Language。通过这些信息,百度知道了你是谁。
TCP三次握手
当然,直接走肯定是进不去的,我们要先打电话问一下百度在不在家,于是我们问了一下百度,你在家吗?这是百度听到我们的声音,他知道外面有人想进来,于是他说里面有人,这时候我们知道百度听到了我们的声音,并且他也能顺利发出请求,于是我们说了一声,好,那我进来啦。这时候百度知道了我们听到了他的请求,这就是3次握手了。
路由选择协议
内部网关协议
既然获得了百度的同意,那我们就要去找百度了,但是我们得先知道怎么去找他最快。我们和百度在两个不同的城市之间,这就是两个AS,在城市内部,我们需要坐地铁,可以是RIP,也可以是OSPF协议,他们会告诉我们怎么去高铁站最快。
外部网关协议
来到高铁站后,我们需要去问一下BGP协议,怎么去百度所在的城市最快,然后我们就可以坐上高铁,去百度家啦。
ARP协议
通过IP地址找到百度家的小区后,我们还不知道他的服务器的具体的MAC地址,但是ARP协议知道呀,我们只需要问一下ARP协议就好了。
HTTP响应
我们终于来到了百度家门口,百度会给我们一个响应,告诉我们可以进来了。当我们收到HTTP响应后,就可以看到百度完整的Web页面了。