计算机网络之 本机获取IP过程和Web页面请求过程
本节内容节选自《计算机网络自顶向下》
通过DHCP获取本机IP地址
- 主机可以通过DHCP协议从本地DHCP服务器获取IP地址以及其他网络信息。
- 生成DHCP请求报文:主机上的操作系统生成一个DHCP报文,并将这个报文放入具有目的端口的67(DHCP服务器)和源端口68(DHCP客户)的UDP报文段中,该UDP报文将被放入IP数据报,最终封装成以太网帧,通过广播到与交换机连接的所有设备。包含DHCP请求的广播以太网帧是第一个由该主机发送到以太网交换机的帧。该交换机在所有出端口广播入帧,包括连接到路由器的端口。
- DHCP服务器(一般运行路由器中)返回IP地址及其他网络信息:路由器接收到该以太网帧通过识别目的地址得知这个数据报应该由该节点的高层协议处理,因此该数据报的载荷分解向上到达UDP,DHCP请求报文从UDP报文段中抽取出来。DHCP服务器生成包含这个IP地址以及DNS服务器的IP地址,默认网关路由器的IP地址等内容的一个DHCP ACK报文。该DHCP ACK报文被放到一个UDP报文段中,UDP报文段被放入一个IP数据报,IP数据报再被放到一个以太网帧中。以太网帧通过路由器发送给交换机,交换机将DHCP ACK报文返回给主机。主机接收到DHCP ACK以太网帧,最终抽取出DHCP ACK报文段。主机则记录下DHCP分配的IP地址和DNS服务器地址等信息。还在其IP转发表中安装默认网关的地址。
Web页面请求过程
- 生成DNS查询报文:主机生成一个DNS查询报文,将要访问的主机名放入DNS报文中。该DNS报文则放置到一个具有53号目的端口(DNS服务器)的UDP报文段中。报文段则放入以DNS服务器为目的IP地址的数据报中。主机则将包含DNS请求报文的数据报放入一个以太网帧中。该帧将被交换机发往学校网络中的网关路由器。
- 通过ARP查询报文获取目的IP地址的MAC地址:主机在发送DNS查询报文前先生成一个ARP查询报文,将该以太网帧(ARP查询报文所在的)通过交换机发送到所有连接的设备,包括网关路由器。路由器发现该以太网帧的目的IP地址与自己的IP地址相符则准备一个ARP回应报文,将ARP请求报文中IP地址对应的MAC地址写入ARP回应报文,通过交换机再交还给请求主机。主机从ARP回答报文中抽取网关路由器的MAC地址,至此,主机终于能够使包含DNS查询的以太网帧寻址到网关路由器的MAC地址。注意:DNS查询报文中,IP数据报具有目的IP地址,报文所在的以太网帧具有网关路由器的MAC地址,该MAC地址是用来寻找下一跳路由器的物理地址。
- 获取IP地址:网关路由器接收到以太网帧(DNS请求报文所在的)并抽取其中包含DNS查询的IP数据报。通过转发表确定下一跳路由器。依次,最终以太网帧到达DNS服务器,DNS服务器通过对比目的地址,从而抽取到DNS查询报文,在它的DNS缓存数据库中查找该主机名所对应的IP地址。DNS服务器生成包含这个IP地址的DNS回答报文并发给请求主机。最终主机通过从DNS报文中抽取出需要请求网页web服务器的IP地址。
- 通过三次握手建立连接:有了目的地址的IP地址后,他能够生成TCP套接字。该套接字将用于向目的web网址发送HTTP请求报文。客户端必须先与服务器的TCP程序执行三次握手。客户端生成一个具有目的端口80(针对HTTP)的TCP SYN报文段,该报文段放置在具有目的IP地址为服务器IP地址的IP数据报中。数据报放置在MAC地址为网关路由器的帧中,并通过网关路由器发送该帧。路途中各个路由器通过转发表确定该帧的下一跳路由器。数据报最终到达服务器。服务器抽取TCP SYN报文并分解到端口80相连接的欢迎套接字,对于服务器和客户端之间的TCP连接生成一个连接套接字。产生一个TCP SYNACK报文段,通过套接字将其发往客户端。ACK报文最终到达客户端。IP数据报在操作系统中分解到上面生成的TCP套接字,从而进入连接状态。借助于该套接字,客户端浏览器可以生成获取URL的HTTP报文。HTTP报文则写入套接字。TCP报文则承载HTTP报文,生成一个IP数据报,最后封装成帧发送给服务器。服务器读取HTTP请求报文,将生成HTTP响应报文,将请求的Web网页内容放入HTTP响应体,并将报文放入TCP套接字。客户端收到报文后从套接字中读取HTTP响应,从响应体中抽取Web页面,并渲染最终得到用户眼中的网页。
时间并不会因为你的迷茫和迟疑而停留,就在你看这篇文章的同时,不知道有多少人在冥思苦想,在为算法废寝忘食,不知道有多少人在狂热地拍着代码,不知道又有多少提交一遍又一遍地刷新着OJ的status页面……
没有谁生来就是神牛,而千里之行,始于足下!