当你随便浏览一个网页时,你知道背后做了多少工作吗?

Down一个Web页面

  • 考虑一个PC机访问一个Web页面时整个计算机网络所做的工作!
    假定条件:
  1. 假定小A在某大学内读书,当他将便携机(笔记本电脑)通过网线连接到宿舍网口,该网口与学校的以太网交换机相连,交换机又与学校的路由器相连。
  2. 学校的这台路由器与一个ISP相连,这里假定为Comcast.net;Comcast.net为学校提供了DNS服务,即DNS服务器驻留在Comcast网络中而不是学校网络中;DHCP仍运行在学校的路由器上。
  3. 小A主机的MAC地址:00:18:F5:54:81:A8
  4. 路由器的MAC地址:00:25:B4:41:F1:C2
  5. 路由器IP地址:68.85.4.1
  6. DNS服务器的IP地址:68.87.71.101
  7. 小A访问网址为:www.baidu.com
  8. www.baidu.com服务器地址:202.108.22.5
  • 在以下所有用到的专有名词缩写及全程见文末。
    当你随便浏览一个网页时,你知道背后做了多少工作吗?

当点击一个页面时的整个过程:

获取一个IP地址

  • 当小A的便携机与网络相连时,没有IP地址它就不能做任何事情。该PC采取的第一个网络相关的动作是运行DHCP协议,以从本地DHCP服务器上获得一个IP地址以及其他信息。
  1. PC的操作系统生成一个DHCP请求报文,将这个报文放入具有目的地端口67(DHCP服务器)和源端口68(DHCP客户)的UDP报文段;该报文段被放置在一个具有广播IP目的地地址(255.255.255.255)和源IP地址(0.0.0.0)的IP数据报中。
  2. 该IP数据报被放置在以太网帧中,该以太网帧具有的目的MAC地址为FF:FF:FF:FF:FF:FF,使该帧将广播到与交换机连接的所有设备中(其中包括DHCP服务器)。该帧的源MAC地址是小A的PC固有的MAC地址00:18:F5:54:81:A8。
  3. 路由器在它的固有MAC地址00:25:B4:41:F1:C2的接口接收到该广播以太网帧,该帧中包含DHCP请求,并且从该以太网帧中抽取出IP数据报。该IP数据报的载荷(UDP)报文被分解,传输到运输层UDP协议,DHCP请求报文从此UDP报文段中抽取出来。此时DHCP服务器有了DHCP请求报文。
  4. 假定运行在路由器中的DHCP服务器能够CIDP块68.85.4.0/24分配IP地址。假定DHCP服务器分配地址68.85.4.35给小A的PC。DHCP服务器生成包含这个IP地址以及DNS服务器的IP地址(68.87.71.101)、默认网关路由器的IP地址(68.85.4.1)和子网块(68.85.4.0/24)(等价为"网络掩码")的一个DHCP ACK报文段,以同样的分层方式打包到一个以太网帧中,这个以太网帧的源MAC地址是路由器连到归属网络时接口的MAC地址(00:25:B4:41:F1:C2),目的MAC地址是小A的PC机MAC地址(00:18:F5:54:81:A8)。
  5. 小A的PC机接收到包含DHCP ACK的以太网帧,抽取出DHCP ACK报文。PC机的DHCP客户记录下IP地址和DNS服务器的IP地址。它还在其IP转发表中安装默认网关的地址。小A的PC机向该默认网关发送目的地址为其子网68.85.4.0/24以外的所有数据报。至此,PC机已经初始化好它的网络组件。

DNS和ARP

  • 当小A将www.baidu.com的URL键入其Web浏览器时,它开启了一长串事件,这将导致百度网页最终显示在其Web浏览器上。小A的Web浏览器通过生成一个TCP套接字开始了该过程,套接字用于向www.baidu.com发送THHP请求。为了生成该套接字,小A的PC机器需要知道www.baidu.com的IP地址,使用DNS协议提供这种名字到IP地址的转换服务。
  1. 小A的PC机操作系统生成一个DNS查询报文,将字符串www.baidu.com放入DNS报文的问题段中。该DNS报文放置在一个具有53号目的端口得UDP报文中。该DUP报文段则被放入具有IP目的地址68.87.71.101和源IP地址68.85.4.35的IP数据报中。
  2. 小A的PC机将包含DNS请求报文的数据报放入一个以太网帧中,该帧将发送到学校网络中的网关路由器。然后此时小A的PC机并不知道学校网关路由器的MAC地址(因为以太网帧的传输所需要的是MAC地址而非IP地址),为了获取该网关路由器的MAC地址,PC机需要使用ARP协议。
  3. 小A的PC机生成一个具有目的IP地址为68.85.4.1(默认网关)的ARP查询报文,将该ARP报文放置在一个具有广播目的地址(FF:FF:FF:FF:FF:FF)的以太网帧中,并向交换机发送该以太网帧,交换机将该帧发送给所有连接的设备,包括网关路由器。
  4. 在网关路由器接收到该帧后,它准备一个ARP应答,指示它的MAC地址为00:25:B4:41:F1:C2对应IP地址68.85.4.1。它将ARP应发放入一个以太网帧中,其目的地址为小A的PC机的MAC地址00:18:F5:54:81:A8。
  5. 小A的PC机收到该帧后,最终能够将DNS查询的以太网帧寻址到网关路由器的MAC地址。注意:此时该PC机发出的DNS查询报文的MAC地址为网关路由器地址00:25:B4:41:F1:C2,而目的IP地址为DNS服务器IP地址68.87.71.101。

域内路由选择到DNS服务器

  1. 网关路由器接收到该帧并抽取包含DNS查询的IP数据报。路由器查找该数据包的目的地址(68.87.71.101),并根据其转发表决定该数据报应该发送到对应的下一跳路由器,该路由器为连接DNS服务器的路由器。
  2. 在连接DNS服务器的路由器接收到该帧后,抽取IP数据报,检查该数据报的目的地址(68.87.71.101),并根据其转发表确定出接口,经过该接口朝着DNS服务器转发数据报,该转发表已根据Comcast的域内协议(与RIP、OSPF或IS-IS)以及因特网的域间协议BGP所填写。
  3. 最后包含DNS查询的IP数据报到达了DNS服务器。DNS服务器抽出DNS查询报文,在它的DNS数据库中查找名字www.baidu.com,找到对应包含www.baidu.com的IP地址202.108.22.5的DNS源记录。该DNS服务器形成了一个包含主机名导IP地址映射的DNS回答报文,将该DNS回答报文放入UDP报文段中送到小A的PC机上。
  4. 小A的PC机从DNS回答报文中抽取出服务器www.baodu.com的IP地址。到这里,小A的PC机终于准备接触www.baidu.com的服务器。

Web客户-服务器交互:TCP和HTTP

  1. 小A的PC机有了www.baidu.com的IP地址后,它能够生成TCP套接字,该套接字用于向www.baidu.com发送HTTP GET报文。当小A的PC机生成TCP套接字时,操作系统的TCP必须首先与www.baidu.com中的TCP执行三次握手。因此PC机首先生成一个具有目的端口80(针对HTTP)的TCP SYN报文段,将该TCP报文段放置在具有目的IP地址202.108.22.5的IP数据报中,将该数据报放置在MAC地址为00:25:B4:41:F1:C2(网关路由器)的帧中,并向交换机发送该帧。
  2. 该帧沿着学校网络、Comcast网络和谷歌网络中的路由器朝着www.baidu.com转发包含TCP SYN的数据报,使用每台路由器中的转发表。
  3. 最终包含TCP SYN的数据报到达www.baidu.com。从数据报抽取出TCP SYN报文并分解到与端口80相联系的欢迎套接字。在百度服务器和小A的PC机之间的TCP连接生成一个连接套接字,产生一个TCP SYNACK报文段,之后该把报文段被放入链路层帧中,最终到达小A的PC机以太网卡。
  4. 借助于小A的PC机上的套接字,现在终于准备向www.baidu.com发送字节了。小A的浏览器生成包含要获取的URL的HTTP GET报文。HTTP GET报文则写入套接字,其中GET报文成为一个TCP报文段的载荷,之后通过该套接字传送到www.baidu.com的HTTP服务器端。
  5. 在www.baidu.com的HTTP服务器从TCP套接字中读取HTTP GET报文,生成一个HTTP响应报文,将请求的Web内容放入HTTP响应体中,并将报文发送进TCP报文段中。
  6. 包含HTTP回答报文的数据报通过百度、Comcast和学校网络转发,到达小A的PC机。小A的Web浏览器程序从套接字的读取HTTP响应,从HTTP响应体中抽取Web网页的html,并最终显示了Web页面。

我们可以看到,当我们平时在Surf The Internet时并未察觉到,访问一个百度主页竟然在计算机网络中做了如此复杂的操作。当然本次讨论仅仅考虑了基本的必要操作,忽略了一些可能的附加协议比如无线接入、数据报加密、Web缓存等。这些底层实现操作对于我们使用者来讲是并不需要知道的。可能目前在一些网络不佳的条件下访问页面仍会有肉眼可见的时延,但将来5G的普及或许使得我们再也不会感受到浏览器时延的存在。

附专有名词缩写及全称:

  • ISP(Internet Service Provider) 互联网服务提供商;
  • DNS(Domain Name System) 域名系统服务协议;
  • DHCP(Dynamic Host Configuration Protoocol) 动态主机配置协议;
  • IP(Internet Protocol) 网际协议;
  • UDP(User Datagram Protocol) 用户数据报协议;
  • TCP(TransmissionControl Protocol) 传输控制协议;
  • MAC(Media Access Control) 局域网地址/以太网地址/物理地址;
  • ARP(Address Resolution Protocol) 地址解析协议;
  • RIP((Routing Information Protocol) 路由信息协议;
  • OSPF(Open Shortest Path First) 开放式最短路径优先;
  • HTTP(Hyper Text Transfer Protocol) 超文本传输协议;
  • HTLM(Hyper Text Markup Language) 超级文本标记语言

欢迎关注【OAOA】
当你随便浏览一个网页时,你知道背后做了多少工作吗?