本文仅对Web页面请求历程进行简单的介绍, 由于作者初学计算机网络, 同时也没有学习图论的知识, 若有不妥之处还请指出.
一、准备DHCP、UDP、IP和以太网
- 以我的笔记本为例,我的笔记本与网络连接,此时笔记本没有ip地址,所以无法进行操作
- 先获取ip地址,笔记本的操作系统生成一个DHCP请求报文,并将次报文放入目的端口67,源端口68的UDP报文段中,该UDP报文段被放在目的地址255.255.255.255(广播地址),源地址0.0.0.0
- 包含该ip数据报被放置在MAC地址为FF:FF:FF:FF:FF:FF(广播)的以太网帧中。
- 包含DHCP的帧发送到以太网交换机,以太网交换机在所有出端口广播该帧
- 路由器收到该帧,并取出ip数据报,发现其地址为广播ip地址,就交于更上一层协议处理,因此提取出该数据报的载荷:即包含的UDP报文段
- DHCP请求报从此UDP报文段中取出,此时DHCP服务器有了这个DHCP请求报文
- 服务器根据自己的块分配地址给我的笔记本,并将IP地址、DNS服务器的ip地址、默认网关路由器的ip地址、子网块都包含在一个DHCP ACK报文段中,这个报文段被放入一个ip数据报中,再被放入有一个以太网帧中发回(原路返回)
- 由于交换机是自学习的,我的笔记本的MAC地址会被记住,便可以通过交换机原路返回
- 收到以太网帧后抽取数据报再抽取UDP报文段,再抽取ACK的内容,记录下自己的ip地址和DNS服务器的ip地址。并在ip转发表中加入默认网关的地址
二、准备DNS和ARP
- 现在我在电脑上意图跳转www.google.com
- 电脑的操作系统生成一个DNS查询报文,将字符串www.google.com放入DNS报文的问题段中.这个DNS查询报文被放在目的端口53的UDP报文段中,并生成ip数据报
- 数据报生成以太网帧将要发往默认网关,然而现在我的笔记本只知道默认网关的ip地址不知道MAC地址,就要使用ARP协议获取MAC地址.
- 笔记本先生成一个具有目的ip68.85.2.1(默认网关ip地址)的ARP查询报文,这个报文放在具有目的MAC为FF:FF:FF:FF:FF:FF(广播)的以太网帧中,并向交换机发送该帧,交换机将其广播.网关路由器则会收到该广播
- 网关路由器传回一个ARP回答,传回来了他的MAC地址和ip地址
- 我的笔记本接收到了这个回答的帧,并抽出了网关路由器的MAC地址
三、到DNS服务器
- 网关路由器终于可以收到该帧了,接收该帧并抽取包含DNS查询的ip数据报.路由器查找该数据报的目的地址(DNS服务器的地址)并转发该帧
- 该帧被isp网络接收,根据其域内协议,将ip数据报送到DNS服务器.DNS服务器抽取出DNS查询报文并在库中搜寻www.google.com对应的ip地址(或者询问其他层级的DNS服务器)
- 查询成功后,DNS服务器形成了一个包含主机名到ip地址的映射的DNS回答报文,将此报文发回.
四、web客户和服务其交互(TCP和HTTP)
- 现在我的笔记本可以生成TCP套接字并利用TCP进行数据传输,
- 先进行三次握手:
- 发送目的端口80的TCP SYN报文段,目的ip地址为google的ip地址,经过路由器的转发,到达www.google.com
- 欢迎的报文会被返回,笔记本接收到欢迎的报文后就可以向www.google.com发送字节.可以发送一个HTTP GET报文,放置进数据报中,并交付到www.google.com
- google返回http响应,笔记本从响应中抽取html文件,显示web网页