我只是好奇“网络请求包”是如何从我的浏览器(当我输入 www.google.com 时)传输到 Google 服务器并返回的。
请回答我两种可能的情况;一种是当我从家里输入 www.google.com 时(家里只有一个无线路由器);另一种是我使用办公室网络时,办公室网络有交换机、DNS 服务器、默认网关等等。
据我对办公网络的理解,请求流从我的机器->交换机->默认网关(我假设是路由器)->DNS 服务器->数据中心->Web 服务器..我说的对吗?
答案1
请求从我的机器流向 -> 交换机 -> 默认网关(我假设是路由器) -> DNS 服务器 -> 数据中心 -> Web 服务器.. 我说的对吗?
不。
PC -> Ethernet broadcast: ARP-request:
"what is ethernet address for IP-address of DNS server?"
DNS-Server: ARP-response: "My Ethernet address is a:b:c:d:e:f"
PC -> DNS: "What is the IP-address of www.google.com?"
DNS-Server -> ISP DNS: "What is the IP-address of www.google.com?"
ISP-DNS -> DNS server
"I don't do recursive, do your own work, google.com DNS at 2.3.4.5, 4.5.6.7"
DNS-Server -> 2.3.4.5 "What is the IP-address of www.google.com?"
2.3.4.5 -> DNS-Server "I refuse your connection attempt!"
DNS-Server -> 4.5.6.7 "What is the IP-address of www.google.com?"
4.5.6.7 -> DNS Server
"www.google.com is 1.2.3.4; google.com DNS at 4.5.6.7, 3.2.1.3"
DNS-server -> PC "www.google.com is 1.2.3.4"
PC -> Ethernet broadcast: ARP request:
"what is ethernet address for IP-address of router?"
Router -> PC: "my ethernet address is d:e:a:d:b:e"
PC -> Router: IP to 1.2.3.4 "get / HTTP1.1; host: www.google.com"
Router -> PC: ICMP redirect: "for 1.2.3.x use router2.internal at 192.168.0.253"
PC -> Ethernet broadcast: ARP-Request:
"what is ethernet address for 192.168.0.253?"
Router2 -> PC: "my ethernet address is b:e:e:f:f:o"
PC -> Router2: IP packet for 1.2.3.4 ("get / HTTP1.1; host: www.google.com")
Router2 -> Router3 "1 IP packet for 1.2.3.4 (...)"
Router3 -> Router4 "3 IP packets for 1.2.3.4 (...)" (he split em)
Router4 -> Router5 "3 IP packets for 1.2.3.4 (...)"
Router3 -> Router2 "Routing change, line to Router 4 outage, find new route!"
Router5 -> Akamai mirror
"{external IP of Router2} sent you 'get / HTTP1.1; host: www.google.com'"
...
etc etc etc etc etc etc etc
(thousands of packets later)
PC .... { hmm, I still need 4 images and two CSS files, can't display page yet ... }
(hundreds of packets later)
我省略了交换机细节、冲突、退避、节流、重新传输、生成树、超时、NAT、三次握手、并发持久 HTTP 连接以及数百种其他经常发生的事情。填写所有步骤将需要数千行(如果不是数万或数十万行)代码,就像上面那样。
答案2
你把很多东西放在一起:
无论您在家还是在办公室,数据包都会通过交换机和路由器在您的计算机和服务器之间传输。当然,在家里,这些交换机等可能不位于您的家中。
默认网关只是一个信息如果没有明确给出其他路由,则使用哪个路由器。
DNS 服务器响应额外的请求查找服务器地址,其他流量都不会通过 DNS。
数据中心只是一个地方服务器和网络设备就在那里。所以是的,事实上你正在通过数据中心,但它们也可能被安置在森林深处的帐篷里。
这就是数据包的全部内容。网络请求建立在纯网络之上。参见HTTP 标准为了那个原因。
答案3
尝试从命令提示符进行跟踪路由(尽管这只是一个方向,因此会到达目的地但不返回)。这不能保证有效或提供有关每个步骤的详细信息,但它可能会给你一个想法。
在命令提示符下(假设是 Windows),输入
tracert 8.8.8.8
8.8.8.8 是 Google DNS
更多详情路由追踪