Bob的网络大冒险:从无名小卒到网页英雄

概要

Bob的网络大冒险:从无名小卒到网页英雄

在一个风和日丽的下午,Bob决定在他的便携机上浏览他最喜欢的网站——Google。但是,在这个看似简单的动作背后,隐藏着一场惊心动魄的网络大冒险。让我们跟随Bob的脚步,看看他是如何一步步克服重重障碍,最终在屏幕上看到那熟悉的Google首页。

第一章:寻找身份 - DHCP协议的召唤

故事开始于一个没有IP地址的世界。Bob打开他的电脑,插入了以太网线缆,但他很快发现,没有IP地址就像是没有身份证一样,根本无法上网。于是,他的电脑向整个网络发出了求救信号:“谁可以给我一个IP地址?”

  • 第一步:Bob的电脑生成了一个特殊的请求报文,就像是一封信,这封信被封装在了一个叫做UDP的信封里。信封上的收件人是DHCP服务器(端口67),寄件人则是Bob的电脑(端口68)。

  • 第二步:由于Bob还没有IP地址,所以信封上的寄件人地址是0.0.0.0,而收件人地址则是255.255.255.255,这意味着这封信将被广播给所有人。这封信随后被装进了一个更大的包裹——IP数据报,并再次被放入一个更大的箱子——以太网帧中。箱子上写着“送给所有人”(目标MAC地址FF:FF:FF:FF:FF:FF)。

  • 第三步:Bob的请求像一阵风一样传遍了整个学校网络。交换机接收到这个广播消息后,立刻把它转发给了所有连接的设备,包括学校的路由器。

  • 第四步:学校的路由器听到了Bob的呼喊,它内部的DHCP服务器收到了这份请求。经过一番考虑,DHCP服务器决定帮助Bob,给他分配了一个IP地址68.85.2.101,同时还附赠了一些重要的信息,比如DNS服务器的地址68.87.71.226、默认网关68.85.2.1以及子网掩码68.85.2.0/24。

  • 第五步:DHCP服务器精心准备了一份回信,确认Bob的身份,并且告诉了他所有的必要信息。这份回信同样被封装在一系列的信封中,然后送回给了Bob。这次,信封上的地址明确指向了Bob的电脑(目标MAC地址00:16:D3:23:68:8A)。

  • 第六步:Bob终于收到了这份珍贵的回信。他仔细阅读,记下了自己的新身份——IP地址68.85.2.101,还有其他重要的联系信息。现在,他已经准备好进入互联网的世界了。

第二章:找到方向 - DNS查询与ARP协议

有了自己的身份之后,Bob想要访问Google,但他只知道Google的名字(www.google.com),却不知道它的住址(IP地址)。为了找到正确的方向,Bob需要求助于DNS服务器。

  • 第八步:Bob在浏览器中输入了www.google.com。这时,他的电脑意识到需要找到这个域名对应的IP地址,于是它准备了一封询问信,放进了目的端口53(DNS服务器)的信封里,再放进IP数据报中。

  • 第九步:但是,要发送这封信,Bob还需要知道通往DNS服务器的路。为此,他必须先找到学校网关路由器的物理地址(MAC地址)。Bob发出了一条寻人启事,也就是ARP查询。

  • 第十步:ARP查询通过广播的方式发送出去,问的是:“谁是68.85.2.1?”这条消息到达了网关路由器,它看到了自己的名字,就回复说:“我就是68.85.2.1,我的MAC地址是00:22:6B:45:1F:1B。”

  • 第十一步:Bob得到了网关路由器的MAC地址后,终于可以正确地封装DNS查询报文,并通过网关路由器将其发送给DNS服务器。

第三章:穿越迷宫 - 域内路由选择
  • 第十四步:网关路由器接收到DNS查询报文后,查看了自己的地图(转发表),决定将报文送往Comcast网络中最左边的路由器。

  • 第十五步:经过几番辗转,DNS查询报文终于到达了DNS服务器。服务器迅速查找记录,找到了www.google.com的IP地址64.233.169.105。它马上准备了一份答复,告诉Bob正确的方向,并通过同样的路径返回。

  • 第十六步:Bob的电脑收到了这份宝贵的答复,知道了前往Google的道路。现在,一切准备就绪,只等出发。

第四章:建立桥梁 - TCP三次握手
  • 第十八步:Bob的电脑创建了一个TCP套接字,准备与Google建立通信的桥梁。首先,它发送了一个SYN报文段,这是TCP三次握手的第一步。

  • 第十九步:这个SYN报文段通过多台路由器接力传递,最终抵达了Google的服务器。

  • 第二十步:Google服务器回应了一个SYN-ACK报文段,表示同意建立连接。

  • 第二十一步:Bob的电脑收到了SYN-ACK报文段,立即回复了一个ACK报文段。至此,TCP连接成功建立,一条安全可靠的通信通道已经形成。

第五章:获取宝藏 - HTTP请求与响应
  • 第二十二步:借助已经建立好的TCP连接,Bob的电脑发送了一个HTTP GET请求,要求获取Google的首页内容。

  • 第二十三步:Google服务器接收到请求后,快速处理并准备了包含网页内容的HTTP响应报文,通过TCP连接发送回Bob的电脑。

  • 第二十四步:Bob的Web浏览器接收到了HTTP响应报文,解析出HTML代码,并将美丽的Google首页展示在屏幕上。

结论

在这场充满挑战的网络之旅中,Bob经历了从无名小卒到拥有自己身份的过程,学会了如何找到正确的方向,还掌握了穿越复杂网络迷宫的方法。最终,他不仅建立了与远方服务器的沟通桥梁,还成功获取了梦寐以求的宝藏——Google首页。这一切都离不开众多网络协议和技术的支持,它们共同确保了网络世界的高效与安全。对于任何对计算机网络感兴趣的人来说,理解这些基础概念都是至关重要的第一步。


 

详情

准备:DHCP、UDP、IP 和以太网

我们假定 Bob 启动他的便携机,然后将其用一根以太网电缆连接到学校的以太网交换机,交换机又与学校的路由器相连,如图6-32所示。学校的这台路由器与一个 ISP 连接,本例中 ISP 为 comcast.net。在本例中,comcast.net 为学校提供了 DNS 服务; 所以,DNS 服务器驻留在 Comcast 网络中而不是学校网络中。我们将假定 DHCP 服务器运行在路由器中,就像常见情况那样。"

当Bob首次将其便携机与网络连接时,没有IP地址他就不能做任何事情(例如下载一个Web网页)。所以,Bob的便携机所采取的一个网络相关的操作是运行动态主机配置协议(DHCP)协议,以从本地DHCP服务器获得一个IP地址以及其他信息。

  • 1. Bob便携机上的操作系统生成一个DHCP请求报文,并将这个报文放入具有目的端口67(DHCP服务器)和源端口68(客户)的UDP报文段)。该UDP报文段则被放置在一个具有广播IP目的地(255.255.255.255.255)和源IP地址0.0.0.0的IP数据报中,因为Bob的便携机还没有一个IP地址。
  • 2. 包含DHCP请求报文的IP数据报则被放置在一个以太网帧中。该以太网帧具有目的MAC地址FF:FF:FF:FF:FF:FF,使该帧将广播到与交换机连接的所有设备(如果顺利的话包括DHCP服务器);该帧的源MAC地址是Bob便携机的MAC地址00:16:D3:23:68:8A。
  • 3. 包含DHCP请求的广播以太网帧是第一个由Bob便携机发送到以太网交换机的帧。该交换机在所有的出端口广播入帧,包括连接到路由器的端口。
  • 4. 路由器在其具有MAC地址00:22:6B:45:1F的接口接收到该广播以太网帧,该帧中包含DHCP请求,并从该以太网帧中抽取IP数据报。该数据报的广播IP目的地指示了这个IP数据报应当由该节点的高层协议处理,因此该数据报的载荷(一个UDP报文段)被分解向上到达UDP,DHCP请求报文从此UDP报文段中抽取出来。此时DHCP服务器有了DHCP请求报文。
  • 5 我们假设运行在路由器中的DHCP服务器能够以CIDR块68.85.2.0/24分配IP地址。所以本例中,在学校内使用的所有IP地址都在Comcast的地址块中。我们假设DHCP服务器分配地址68.85.2.101给Bob的便携机。DHCP服务器生成包含这个IP地址以及DNS服务器的IP地址(68.87.71.226)、默认网关路由器的IP地址(68.85.2.1)和子网掩码(68.85.2.0/24)(等价于“网络掩码”)的一个DHCP ACK报文。该DHCP报文被放人一个UDP报文段中,UDP报文段被放人一个IP数据报中,IP数据报再被放人一个以太网帧中。这个以太网帧的源MAC地址是路由器连到归属网络时接口的MAC地址(00:22:6B:45:1F:1B),目标MAC地址是Bob便携机的MAC地址(00:16:D3:23:68:8A)。
  • 6) 包含DHCP ACK的以太网帧由路由器发送给交换机。因为交换机是自学习的,并且先前从Bob便携机收到(包含DHCP请求的)以太网帧,所以该交换机知道寻址到00:16:D3:23:68:8A的帧仅从通向Bob便携机的输出端口转发。
  • 7) Bob便携机收到包含DHCP ACK的以太网帧,从该以太网帧中抽取IP数据报,从IP数据报中抽取UDP报文段,从UDP报文段抽取DHCP ACK报文。Bob的DHCP客户端记录下它的IP地址和它的DNS服务器的IP地址。它还在其IP转发表中安装默认网关的地址。Bob便携机将向该默认网关发送目标为其子网68.85.2.0/24以外的所有数据报。此时,Bob便携机已经初始化好的它的网络组件,并准备好开始处理Web网页获取。(注意到在第4章给出的四个步骤中仅有最后两个DHCP步骤是实际必要的。)

准备DNS ARP阶段

当Bob将www.google.com的URL键入其Web浏览器时,他开启了一长串事件,这将导致谷歌首页最终显示在其Web浏览器上。Bob的Web浏览器通过生成一个TCP套接字(2.7节)开始了该过程,套接字用于向www.google.com发送HTTP请求(2.2节)。为了生成该套接字,Bob便携机将需要知道www.google.com的IP地址。我们在2.4节中学过,使用DNS协议提供这种名字到IP地址的转换服务。

  • 8) Bob便携机上的操作系统因此生成一个DNS查询报文,将字符串www.google.com放入DNS报文的问题段。该DNS报文则放置在一个具有53号(DNS服务器)目的端口的UDP报文段中。该UDP报文段则被放入有一个IP目的地68.87.71.226(在第5步的DHCP ACK返回的DNS服务器地址)和源IP地址68.85.2.101的IP数据报中。
  • 9) Bob便携机则将包含DNS请求报文的数据报放入一个以太网帧中。该帧将发送(在链路层寻址)到Bob学校网络中的网关路由器。然而,即使Bob便携机经过上述第5步的DHCP ACK报文知道了学校网关路由器的IP地址(68.85.2.1),但仍不知道该网关路由器的MAC地址。为了获得该网关路由器的MAC地址,Bob便携机将需要使用ARP协议。
  • 10) Bob便携机生成一个具有目的IP地址68.85.2.1(默认网关)的ARP查询报文,将该ARP报文放置在一个具有广播目的地(FF:FF:FF:FF:FF:FF)的以太网帧中,并向交换机发送该帧,交换机将该帧交付所有连接的设备,包括网关路由器。
  • 11) 网关路由器在通往学校网络的接口上接收到包含该ARP查询报文的帧,发现在ARP报文中目标IP地址68.85.2.1匹配其接口的IP地址。网关路由器因此准备一个ARP回复,指示它的MAC地址00:22:6B:45:1F:1B对应IP地址68.85.2.1。它将ARP回复放在一个以太网帧中,其目的地为00:16:D3:23:68:8A(Bob便携机),并向交换机发送该帧,再由交换机将帧交付给Bob便携机。
  • 12) Bob便携机接收到包含ARP回复报文的帧,并从ARP回复报文中抽取网关路由器的MAC地址(00:22:6B:45:1F:1B)。Bob便携机现在(最终!)能够使包含DNS查询的以太网帧寻址到网关路由器的MAC地址。注意在该帧中的IP数据报具有IP目的地68.87.71.226(DNS服务器),而该帧具有目的地00:22:6B:45:1F:1B(网关路由器)。Bob便携机向交换机发送该帧,交换机将该帧交付给网关路由器。

域内路由选择到DNS服务器

网关路由器接收该帧并抽取包含DNS查询的IP数据报。路由器查找该数据报的目的地(68.87.71.226),并根据其转发表决定该数据报应当发送到图6-32的Comcast网络中最左边的路由器。IP数据报放置在链路层帧中,该帧适合将学校路由器连接到最左边Comcast路由器,并且该帧经这条链路发送。

  • 14) 在Comcast网络中最左边的路由器接收到来自学校路由器的帧,抽取IP数据报,检查该数据报的目的地(68.87.71.226),并根据其转发表确定出接口,朝着DNS服务器转发数据报,转发表已根据Comcast的域间协议(如RIP、OSPF或IS-IS,)以及因特网的域间协议BGP所填写。
  • 15) 最终包含DNS查询的IP数据报到达了DNS服务器。DNS服务器抽取DNS查询报文,在它的DNS数据库中查找名字www.google.com,找到包含对应www.google.com的IP地址(64.233.169.105)的DNS源记录。前面讲过这种缓存数据源自google.com的权威DNS服务器。该DNS服务器形成了一个包含这种主机名到IP地址映射的DNS回答报文,将该DNS回答报文放入UDP报文段中,该报文段放入寻址到Bob便携机(68.85.2.101)的IP数据报中。该数据报将通过Comcast网络反向转发到学校的路由器,并从这里经过以太网交换机到Bob便携机。
  • 16) Bob便携机从DNS报文抽取服务器www.google.com的IP地址。最终,在大量工作中,Bob便携机此时准备接触www.google.com服务器!

客户端-服务器交互:TCP HTTP

  • 18) 既然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(网关路由器)的帧中,并向交换机发送该帧。
  • 19) 在学校网络、Comcast网络和谷歌网络中的路由器朝着www.google.com转发包含TCP SYN的数据报,使用每台路由器中的转发表,如前面步骤14~16那样。前面讲过分派分支经过Comcast和谷歌网络之间区域间链路转发的路由器转发表项,是由BGP协议决定的。
  • 20) 最终,包含TCP SYN的数据报到达www.googele.com。从数据报抽取TCP SYN报文并分解到与端口80相联系的欢迎套接字。对于谷歌HTTP服务器和Bob便携机之间的TCP连接生成一个连接套接字。产生一个TCP SYNACK  报文段,将其放入向Bob便携机寻址的一个数据报中,最后放入链路层帧中,该链路适合将www.google.com连接到其第一跳路由器。
  • 21) 包含TCP SYNACK报文段的数据报通过谷歌、Comcast和学校网络,最终到达Bob便携机的以太网卡。数据报在操作系统中分解到步骤18生成的TCP套接字,从而进入三次握手。

借助于Bob便携机上的套接字,现在(终于!)准备向www.google.com发送字节了,Bob的浏览器生成包含要获取的URL的HTTP GET报文(2.2.3节)。HTTP GET报文则写入套接字,其中GET报文成为一个TCP报文段的载荷。该TCP报文段放置进一个数据报中,并交付到www.google.com,如前面步骤18~20所述。

  • 22) 在www.google.com的HTTP服务器从TCP套接字读取HTTP GET报文,生成一个HTTP响应报文,将请求的Web页面内容放入HTTP响应体中并将报文发送进TCP套接字中。
  • 23) 包含HTTP回应报文的数据报通过谷歌、Comcast和学校网络转发,到达Bob便携机。Bob的Web浏览器程序从套接字读取HTTP响应,从HTTP响应体中抽取Web网页的html,并最终(终于!)显示了Web网页。

上面的场景已经涉及许多网络基础!如果你已经理解上面例子中的大多数或全部,则你也已经涵盖了本书的大部分内容与计算机网络协议有关,而且你也许想知道一个协议实际上是什么样子!

上述例子看起来是尽可能详尽,我们已经忽略了一些可能的附加协议(例如,运行在学校网关路由器中的NAT,到学校网络的无线接入,接入学校网络或对报文段或数据报加密的安全协议,网络管理协议),以及人们将在公共因特网中遇到的一些考虑(Web缓存,DNS等级体系)。我们将在这本书的第二部分涉及一些这类主题和更多内容。

最后,我们注意到上述例子是一个综合、完整的例子,还观察了本书第一部分所学过的许多协议的十分“具体的细节”。该例子更多地关注“怎样做”而不是“为什么做”。对于一般的网络协议设计的更广泛、更具反思性的观点,你可能需要重新阅读4.5节中的“互联网架构原则”,以及其中的参考文献。、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值