一、引言
我们每天都会上网冲浪,每天都额会打开Web网页。不论是手机,还是使用电脑,我们总会浏览新闻、看视频、查资料等等。
这些都是通过Web浏览器实现的,那么我们每天都接触到它,那么有没有想过它到底是如何从地域的这一头找到另一头的服务器,
然后请求你所需要的内容呢?一次看似简单的Http请求,背后其实做了很多你并不知道的事情。学习了计算机网络之后,我发现:
原来是这样!原来还可以这样!噢,就这样。
因为最近都在各种协议之间徘徊和困扰,计算机网络的协议真NM多的一B,实在让人看不下去。
后来根据经典——《计算机网络:自顶向下的方法》整理了一下书上的思路,根据一次Web请求使用到的各种协议和发生的
动作,画了一个拓扑图。
二、Web网络拓扑图
下面这张图是我根据一次Web请求(分配IP地址)所画的网络拓扑图。
假设以下条件:
(1)请求的地址是www.baidu.com,
(2)而且我们现在是从川大发出去的请求,川大校园有一台本地的DNS服务器。
(3)有以下自制系统:AS1、AS2、AS3、AS4
(4)我们接入的网络是以太网
(5)假设Host文件里面没有存储DNS解析信息,需要询问DNS服务器来获得目的域名的解析IP
三、Web请求所经历的过程
其实,感觉计算机网络就是现实生活的一个映射。比如:邮局邮件的发送过程、旅游全过程、快递全过程等等。都跟计算机网络采取的
方式如出一辙。
下面我举一个旅游的例子来说明一下。呃,就大概意思意思吧,感觉不是太符合,将就用一下。大神直接略过。
就像我们去旅游一样,得先有目的地(IP),然后才能出发吧。但是出发之前我们是不是还得准备一下行李(自己的IP等信息)吧,然
后再去订票:火车、机票、船票、汽车票(不同应用层协议);上车的时候要检票、排队、上车等过程(层层封装);火车、汽车、船、飞
机在各个大小站会有中途停顿的时候(网关、路由器、交换机),乘客或者换乘(路由)、或者下车(送至上一层解析);然后继续行驶,最
后到站下车,检票、排队、出站(层层递交)。最后到达目的地,开始高大上的旅程了!
发送请求的前提条件是:获得本机IP和目标IP
因此,在正式发送HTTP请求前,需要通过一系列的协议来查询本地IP、目的域名的IP。同时,获得目的域名IP之后,又通过一系列的路
由协议来将信息发送到指定的IP,从而达到双方联通交换数据的目的!
大致的历程(建立在上面的网络拓扑图基础上):
(1)DHCP请求IP地址分配及子网、网关IP、DNS服务器IP信息——>
(2)发送DNS解析请求至网关(外网需获得网关MAC),网关路由至DNS服务器,进行DNS解析——>
(3)建立TCP连接,发送HTTP请求——>
(4)返回Web页面对象 ,并显示 。
历程分解
(1) DHCP请求:获得本机IP和本地DNS服务器IP
动作
1、以太网链路连接
2、DHCP报文准备(该时刻主机并不知道子网网段、网关IP、本机IP等信息,因此,必须要用特殊的广播到达路由器以获上述信息)
3、UDP准备
4、IP报文准备(具有广播性质,源IP:0.0.0.0 目的:255.255.255.255只能被网关截获——特殊的广播)
5、以太网帧准备,然后广播
6、交换机将信息传到所有临近接口(包括路由器)。
7、路由器接收并解析,生成DHCP ACK报文返回路由器端口IP、本地DNS服务器地址、主机地址、子网网段信息。
协议和技术
1、以太网:链路层帧传输
2、DHCP:主机IP分配
3、RIP:自治系统内部路由
4、UDP:传输层不可靠传输协议,DHCP建立在UDP之上
5、IP:网络层IP段报文
6、NAT(如果有NAT转换的话):专用网络地址转换
7、MAC:链路层寻址
(2) DNS请求:解析目的URL的IP地址
我们知道,在发送HTTP请求之前,先要获得目标网址的的IP。同时在发送DNS请求之前,我们先要获得网关路由器的MAC地址,因为
在子网内部室通过MAC地址来交换数据的,如果直接发送外网的IP地址或者MAC地址,交换机会直接丢弃!因此先要获得网关路由器的MAC
地址,将DNS请求发送到网关,然后由网关来发送DNS请求导本地DNS服 务器。
动作
1、主机生成一个HTTP请求,假设目的网址为:www.baidu.com,
2、生成ARP查询报文(使用2.1获得的网关IP),获得网关MAC地址
3、生成DNS请求(此时已经有了网关MAC和DNS的IP),请求解析目的域名IP,向网关发送!
4、网关收到DNS请求,将DNS请求拆封,查看目的IP信息(DNS服务器地址),通过转发表、路由表选择相应出口打包并发送。
5、本地DNS服务器接收到DNS请求。查询缓存,如果有该地址则返回,否则请求根服务器,然后可以采用两种方法:迭代、递归,
以此查询顶级域名DNS服 务器、权威DNS服务器等等。直到获得目标地址。
6、本地DNS服务器将获得的目标IP信息封装到DNS报文中,返回给主机。
协议和技术
1、以太网:链路层帧传输
2、RIP:自治系统内部路由
3、BGP:自治系统之间路由
4、HTTP(只是包装了信息,还未完成TCP连接)
5、UDP :传输层不可靠传输协议,DNS建立在UDP之上
6、DNS:域名解析系统协议
7、IP:网络层IP段报文
8、MAC:链路层寻址
(3)HTTP请求:建立TCP连接,请求Web页面信息
此时已经获得了目标的IP:119.75.218.70(www.baidu.com)
可以建立HTTP请求了。
动作
1、发送HTTP GET报文
2、建立TCP连接:使用获得的目的IP
3、三次握手(1、SYN 2、ACK 3、具体请求)
4、百度Web服务器返回Web页面对象
协议和技术
1、以太网:链路层帧传输
2、RIP:自治系统内部路由
3、BGP:自治系统之间路由
4、HTTP:应用层超文本传输协议
5、TCP:可靠数据传输协议,HTTP建立在它之上,保证数据可靠交付
6、IP:网络层IP段报文
7、MAC:链路层寻址
(4)、加载web并解析Web对象,显示
第四步完成之后,我们就看到了熟悉的百度一下搜索框啦。其实在网速不错的情况下,这些动作只是一秒钟的事
情我们根本无法察觉到。之前在没有了到解和学习计算机网络的时候,只是知道有了IP和端口就能够发送数据,但是并
不知道IP从哪里获得?又是怎么获得的?那么多的电脑是如何寻址的?计算机网络又是如何划分不同区域的电脑IP?
等等问题都并没有想过,也不知道答案。学习了计算机网络之后,才对这些有了一定的了解。便记下来了,希望与大
家分享,大神请不要见笑。
参考书籍:《计算机网络:自顶向下的方法》