美文网首页
Web 页面请求的历程

Web 页面请求的历程

作者: Shaodw | 来源:发表于2019-07-15 09:25 被阅读0次

    以书中实例为例

    1. 获取IP地址及其他网络配置
      Bob的计算机目前还没有IP地址,如何动态获取IP地址?
      运行动态主机配置协议(Dynamic Host Configuration,DHCP),以从本地的DHCP服务器获取一个IP地址以及其他信息。

    Bob计算机上的操作系统生成一个DHCP请求报文,并将这个报文放入目的地端口67(DHCP服务器)和源端口68(DHCP客户)的UDP报文段。该UDP报文段则被放置在一个具有广播IP目的地地址(255.255.255.255)和源IP地址0.0.0.0的IP数据报中,因为此时Bob的计算机还不具有一个IP地址。

    该IP数据报则被放置在以太网帧中,目的MAC地址FF:FF:FF:FF:FF:FF,使该帧将广播到与交换机连接的所有设备,源MAC地址为Bob计算机的网卡MAC地址00:16:D3:23:68:8A。

    包含DHCP请求的广播以太网帧是第一个有Bob计算机发送到以太网交换机的帧。该交换机在所有的出端口广播帧,包括连接到路由器的端口。同时交换机会在交换机表(switch table)中新添加一条记录,内容包括MAC地址,通往该MAC地址的交换机接口,该记录放置在表中的时间。

    路由器在它的接口(该接口MAC地址00:22:6B:45:1F:1B)接收到该广播以太网帧,该帧包含DHCP请求,并且从该以太网帧中抽取出IP数据报。该数据报的广播IP目的地址指示了这个IP数据报应当由在该结点的高层协议处理,因此该数据报的载荷(一个UDP报文段)被分解向上到达UDP,从此UDP报文段中抽取出DCHP请求报文。

    我们假设运行在路由器中的DHCP服务器能够以CIDR块68.85.2.0/24分配IP地址,然后分配地址68.85.2.101给Bob计算机。DHCP服务器生成一个DHCP ACK报文,包含内容
    IP地址
    DNS服务器IP地址(68.87.71.226)
    默认网关路由器(第一跳路由)IP地址 68.85.2.1
    子网块(网络掩码) 68.85.2.0/24

    包含DHCP ACK报文的以太网帧由路由器发送给交换机。因为交换机是自学习的,并且先前从Bob计算机收到(包含DHCP请求的)以太网帧,所以该交换机从交换机表中查询到通往Bob计算机MAC地址00:22:6B:45:1F:1B的相应接口。

    Bob计算机接收到包含DHCP ACk的以太网帧,从该以太网帧中抽取IP数据报,从IP数据报中抽取UDP报文段,从UDP报文段中抽取DHCP ACK报文。Bob的计算机DHCP客户则记录下它的IP地址和它的DNS服务器的IP地址。它还在其IP转发表中安装默认网关的地址。

    如果Bob计算机想向初子网68.85.2.0/24之外的目的地址发送数据报,则先要经过默认网关。

    1. DNS & ARP
      当Bob将www.google.com的URL键入其Web浏览器时,他开启了一长串事件,这导致Google主页最终显示在其Web浏览器上。Bob的Web浏览器通过生成一个TCP套接字开始了该过程,套接字用于向www.google.com发送HTTP请求。为了生成套接字,Bob的计算机机需要知道www.google.com的IP地址。这就需要DNS协议提供这种域名到IP地址的转换服务。
      Bob计算机上的操作系统生成一个DNS查询报文,将字符串www.google.com放入DNS报文的问题段中。该DNS报文则放置在一个具有53号(DNS服务器)目的端口的UDP报文段中。该UDP报文段则被放入具有IP目的地址68.87.71.226(在DHCP ACK返回的DNS服务器地址)和源地址68.85.2.101的IP数据报中。
      Bob的计算机则将包含DNS请求报文的数据报放入一个以太网帧中。该帧将发送到(在链路层寻址)Bob学校网络中的网关路由器。目前仅从DHCP ACK报文知道学校网关路由器的IP地址65.85.2.1,但不知道网关路由器的MAC地址。此时就需要ARP协议提供IP地址到MAC地址的转换服务。

    2.1 ARP
    Bob计算机生成一个具有目的IP地址68.85.2.1(默认网关)的ARP查询报文,将该ARP报文放置在一个具有广播目的地址FF:FF:FF:FF:FF:FF的以太网帧中,并向交换机发送该以太网帧,交换机将该帧交付给所有连接的设备,包括网关路由器。

    网关路由器在通往学校网络的接口上接收到包含该ARP查询报文的帧,发现在ARP报文中的目标地址68.85.2.1与其接口IP地址相同,网关路由器此时将准备一个ARP回答,指示IP地址68.85.2.1对应的MAC地址为00:22:6B:45:1F:1B。它将ARP回答放在一个以太网帧中,其目的地址为00:16:D3:23:68:8A(Bob的计算机),并向交换机发送该帧,再由交换机将帧交付给Bob的计算机。
    Bob计算机收到包含ARP回到报文的帧,并从ARP回答报文中抽取网关路由器的MAC地址(00:22:6B:45:1F:1B)。并在本地ARP表中创建一条新的记录。

    现在,Bob的计算机能够使包含DNS查询报文的以太网帧寻址到网关路由器的MAC地址了。

    2.2 DNS
    网关路由器接收该帧并抽取包含DNS查询的IP数据报。路由器查找该数据报的目的地址(68.87.71.226),并根据其转发表决定该数据报应道发送到Comcast网络中最左边的路由器。

    Comcast最左边的路由器接到该帧,抽取IP数据报,检查该数据报的目的地址(68.87.71.226),并根据其转发表确定接口,经过该接口朝着DNS服务器转发数据报,而转发表已根据Comcast的域内协议(如RIP、OSPF或IS-IS)以及因特网的域间协议BGP所填写。

    最终包含DNS查询的IP数据报到达了DNS服务器。DNS服务器抽取出DNS查询报文,在它的DNS数据库中查找域名www.google.com,找到包含对应www.google.com的IP地址(64.233.169.105)的DNS源记录。该DNS服务器形成了一个包含这种主机名到IP地址映射的DNS回答报文,将该DNS回答报文放入UDP报文段中,该报文段放入寻址到Bob计算机的IP数据报中。该数据报将通过Comcast网络反向转发到学校的路由器,并从这里经过以太网交换机到Bob计算机。
    Bob计算机从DNS报文抽取出服务器www.google.com的IP地址。
    经过大量的工作后,Bob的计算机终于可以与www.google.com服务器通信了。

    1. Web客户——服务器交互:TCP和HTTP
      Bob计算机有了www.google.com的IP地址,它就能够生成TCP套接字,该套接字将用于向www.google.com发送HTTP GET报文。当Bob生成TCP套接字时,在Bob计算机中的TCP必须首先与www.google.com中的TCP执行三次握手。Bob计算机首先生成一个具有目的端口80(针对HTTP)的TCP SYN报文段,将该TCP报文段放置在具有目的IP地址64.233.169.105(www.google.com)的IP数据报中,将该数据报放置在MAC地址为00:22:6B:45:1F:1B(网关路由器)的帧中,并向交换机发送该帧。

    在学校网络、Comcast网络和Google网络中的路由器朝着www.google.com转发包含TCP SYN的数据报,使用每台路由器中的转发表。

    最终,包含TCP SYN的数据报到达www.google.com。Google服务器从数据报抽取出TCP SYN报文并分解到与端口80相联系的套接字。对于Google HTTP服务器和Bob计算机之间的TCP连接生成一个连接套接字。产生一个TCP SYNACK报文段(SYNACK segment),将其放入一个向Bob计算机寻址的数据报中。包含TCP SYNACK报文段的数据报经过Google、Comcast和学校网络,最终到达Bob计算机的以太网卡。
    Bob的Web浏览器生成HTTP GET报文。HTTP GET报文则写入套接字,其中GET报文成为一个TCP报文段的载荷,该TCP报文段则被放进一个数据报中,并交付到www.google.com
    www.google.com的HTTP服务器从TCP套接字读取HTTP GET报文,生成一个HTTP响应报文,将请求的Web页面内容放入HTTP响应体重,并将报文发送进TCP套接字中。包含HTTP响应报文的数据报经过Google、Comcast和学校网络转发,到达Bob计算机。Bob的Web浏览器从套接字读取HTTP响应,从HTTP响应体中抽取Web网页的HTML,最终渲染出页面效果。
    客户端发起TCP连接
    客户端
    CLOSED -> (发送SYN)SYN_SENT -> (接收到SYN&ACK 发送ACK)ESTABLISHED
    服务器端
    CLOSED -> (服务器应用创建一个监听套接字)LISTEN -> (接收到SYN并发送SYN&ACK)SYN_RCVD -> (接收到ACK 不发送)ESTABLISHED

    其中一端主动关闭TCP连接
    主动关闭TCP一端
    ESTABLISHED -> (发送FIN)FIN_WAIT1 -> (接收到ACK 不发送)FIN_WAIT2 -> (接收到FIN 发送ACK)TIME_WAIT -> CLOSED
    被动关闭TCP一端
    ESTABLISHED -> (接收到FIN 发出ACK)CLOSE_WAIT -> (发出FIN)LAST_ACK -> (接收到ACK 不发送)CLOSED

    1. 非持续链接HTTP和持续链接HTTP
      非持续链接(non-persistent connection)HTTP
      必须为每一个请求的对象建立和维护一个全新的连接。对于每个连接,在客户和服务器中都要分配TCP的缓冲区和保持TCP变量。每一个对象经理两倍RTT(Round-Trip Time)的交付时延,一个用于创建TCP,另一个RTT用于请求和接收一个对象。

    持续链接(persistent connection)
    服务器在发送响应后保持该TCP连接打开。在相同的客户与服务器之间的后续请求和响应报文能够通过相同的连接进行传送。一个完整的Web页面可以用单个持续TCP连接进行传送,甚至位于同一台服务器的多个Web页面可以在单个持续TCP连接中进行传送。如果一条持续连接经过一定时间间隔仍未被使用,HTTP服务器就关闭该连接。

    相关文章

      网友评论

          本文标题:Web 页面请求的历程

          本文链接:https://www.haomeiwen.com/subject/ecdgkctx.html