在浏览器输入url时发生了什么?

在浏览器输入url(即网址)后,会发生什么?
这是一个面试被问烂的问题,今天结合《自顶向下方法》这本书来总结一下。
在这里插入图片描述
如图,某台主机想要访问www.goolge.com,在输入url后,会发生什么?
分析如下:
要访问该url的内容,就要生成TCP套接字,然后发送HTTP报文。所以,我们需要获取主机的IP地址,谷歌网站的IP地址以及路由器的MAC地址。

解答如下:

//利用DHCP获取主机IP地址

1.主机上的操作系统生成一个DHCP请求报文,将这个报文放入具有目的端口号67(DHCP服务器)和源端口号68(DHCP客户)的UDP报文段。这个UDP报文段被放置在一个具有广播IP目的地址(255.255.255.255)和源IP地址(0.0.0.0)的数据报中(因为主机还没有被分配IP地址)。

2.DHCP请求报文被封装成帧,传输到交换机,这个帧的目的MAC地址为FF:FF:FF:FF:FF:FF,接下来,交换机将这个帧广播到所有与交换机相连的设备,包括路由器。

3.路由器的MAC地址为00:22:6B:45:1F:1B(如图所示),路由器接收到该帧后,从帧中抽取出IP数据报,IP数据报的目的地址表明该IP数据报应该由该节点的高层协议处理,因此该数据报的载荷(即UDP报文段)被分解,向上到达UDP。这时,DHCP请求报文被抽取出来,DHCP服务器有了DHCP请求报文。

4.此时,DHCP服务器为主机生成一个IP地址,同时,它也生成DNS服务器的地址,路由器的IP地址和子网块(即图中掩码)的DHCP ACK报文。这个DHCP报文被放入UDP报文段中,封装成帧。这个帧的源MAC地址是00:22:6B:45:1F:1B,目的MAC地址是主机的MAC地址(如图所示)。

5.接下来,包含DHCP ACK的帧由路由器发给交换机,由于交换机是自学习的,之前从主机收到帧,所以该交换机知道应该向通向主机的输出端口转发。

6.主机收到帧后,逐层抽取,最后取出DHCP报文。主机的DHCP客户则记录下它的IP地址和它的DNS服务器的地址。

//获取谷歌的IP地址

7.主机的操作系统生成DNS查询报文,将字符串www.google.com放入DNS报文段中。该DNS报文放置在一个具有53号(DNS服务器)目的端口的UDP报文段中。该UDP报文段的目的IP地址即为第4步中发给主机的DNS服务器地址,源IP地址即为主机的IP地址。

8.同样封装成帧,但此时并不知道路由器的MAC地址,为了获取路由器MAC地址,需要ARP。

9.主机生成ARP查询报文,放在具有广播目的地址(FF:FF:FF:FF:FF:FF)的帧中,交换机向与其相连的所有设备发送该帧,包括路由器。

10.路由器发现68.85.2.1匹配其接口的IP地址,查ARP表,获取其MAC地址。然后路由器发送ARP回答,封装成帧,送给交换机,交换机再发给主机。此时,便获得了路由器的MAC地址。

11.接下来,主机就可以发送DNS查询报文了。Comcast网络中最左边的路由器收到该帧,抽取IP数据报,检查目的地址,根据其转发表确定发送给哪一接口。

12.DNS服务器收到DNS查询报文,将其抽取,在权威DNS服务器缓存中(假设它在缓存里)查找www.google.com对应的IP地址,发送DNS回答报文,放入UDP报文段中,发送给主机。主机便知道了www.google.com的IP地址。

//TCP连接的建立

13.在主机生成套接字时,主机中的TCP必须先与www.google.com中的TCP执行三次握手。TCP连接建立完毕。

14.此时,主机发送HTTP GET报文,写入套接字,封装成帧,按照上面的步骤发送。

15.www.google.com的HTTP服务器从TCP套接字中读取HTTP GET报文,生成HTTP响应报文,将请求的Web页面的内容放入HTTP响应体中,并将报文写入套接字。

16最后,主机的Web浏览器程序从套接字读取HTTP响应,从HTTP中抽取Web网页的HTML,最终显示出了Web网页。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值