前言
学完计算机网络应用层、运输层、网络层、链路层。书中给出了一个综合性的小例子。当Bob通过校园网访问ww.google.com发生了什么。 感觉是个能够将知识融汇贯通的例子。因此打算花一天时间好好研究一下。
文章目录
问题背景
一名学生Bob使用它的笔记本和学校的以太网交换机相连,并通过浏览器访问www.google.com
。整个过程动态PPT。
我是谁——DHCP
想要上网,首先得有一个身份(IP),而IP通过DHCP服务器分配。DHCP服务器通常存放在路由中,其作用就是给新加入的主机分配一个IP。传统的IP分配一般需要经历DHCP发现
、DHCP应答
、DHCP请求
、DHCP ACK
四个过程,但是在实际过程中,只有后两个过程是必须的,我们逐层剖析这两个过程。
DHCP 请求
- 应用层:生成
DHCP请求报文
。 - 运输层:将DHCP请求报文放在
目的端口
为67
的UDP报文段
中(端口67是DHCP服务器专用端口)。 - 网络层:将UDP报文段放在
目的IP
为255.255.255.255
(广播),源IP
为0.0.0.0
(在主机没有IP的情况下表示本机)的IP数据报
中。 - 链路层:将
IP数据报
放在目的MAC地址
为FF:FF:FF:FF:FF:FF
(广播)的以太网帧
中。
上述4个过程如图中所示向下红箭头
的过程。然后Bob主机发送以太网帧,交换机接收
,然后在所有出端口
广播。最后被含有DHCP服务器的路由器
接收。然后经过向上红箭头
的过程,逐层解包,到达DHCP服务器。
DHCP ACK
在DHCP服务器接受到DHCP请求报文
后,分析报文,其生成一个DHCP ACK报文
返回给Bob。具体的DHCP ACK报文中包括。
- Bob主机地址:这个无话可说,Bob就是希望DHCP服务器分配给他这个地址。
- 本地DNS服务器IP地址:Bob输入 www.google.com,需要由DNS服务器解析为IP地址才能寻址访问,因此将本地DNS服务器地址返回给Bob也是有必要的。
- 网络掩码: 需要有网络掩码,Bob主机才能知道自己的网络号和主机号。
- 默认网关IP地址:当Bob访问外网时,需要经过网关,因此需要该IP地址。
- 应用层: 将上述内容打包生成
DHCP ACK
报文。 - 传输层:将DHCP ACK报文放在UDP报文段中。(目的端口为Bob发送DHCP请求报文的端口)
- 网络层:将UDP报文段放在IP数据报中。
- 链路层:将IP数据报放在
目的MAC地址为交换机对应端口的MAC地址
的以太网帧中。
上述4个过程为上图中向下红色箭头
所示4个过程。然后数据到达交换机
,由于交换机自学习
, 因此数据直接发送到Bob主机
而不用广播。
小结
经过上述两个步骤,现在Bob主机就拥有了自己的主机IP
,也知道了本地DNS IP
和默认网关IP
。这样,他就可以开始正式发送请求了。
我要找的人在哪里——DNS, ARP, BGP、RIP、OSPF
Bob主机的最终的目的是生成浏览器和google服务器之间的TCP连接
, 并通过此连接向www.google.com
发送HTTP请求报文
。基于此目的,现在会遇到如下问题。
- 生成TCP连接的过程中,我们需要googe服务器的
IP
。怎么办?
解决:访问DNS服务器
。 - DNS服务器和Bob主机不在同一个子网内,无法直接访问。怎么办?
解决:通过网关
访问外网。 - 我们现在有网关的ip地址,但是没有网关的
MAC
地址。无法完成寻路,怎么办?
解决:使用ARP协议获得MAC地址。具体的:- 生成具有
目的地址为网关ip地址的ARP查询报文
。 - 将查询报文放在MAC地址为
FF:FF:FF:FF:FF:FF
的以太网帧中。 - 发送到交换机。交换机广播,网关路由器接受。
- 网关路由器识别,匹配对应接口,然后将对应接口
MAC
地址存放在ARP回答
中。 ARP回答
按原路返回,发送给Bob主机。
现在Bob生成MAC地址为网关路由器
的以太网帧(包含目的IP为DNS服务器IP
的数据报),并将以太网帧发送到网关。
- 生成具有
- 数据经过网关,然后在
RIP、BGP、OSPF
等协议的帮助下,成功到达DNS服务器。 - DNS服务器经过一系列的想上解包,得到
DNS查询报文
, 然后生成包含www.google.com
到其IP地址
的映射的回答报文
。 - 然后按原路将
回答报文
送回到Bob主机
。
小结
这样,Bob主机终于有了www.google.com
的IP地址,由此就可以建立TCP
连接了。
和要找的人建立联系——TCP,BGP、RIP、OSPF,HTTP
- 基于
www.google.com
的IP地址, 经过3次握手
建立TCP套接字
。- Bob主机发送
TCP SYN
报文段。报文段借助BGP、RIP、OSPF
等协议到达谷歌服务器。 - 服务器抽出
TCP SYN
报文,分配到欢迎套接字
。并建立连接套接字
, 然后生成TCP SYNACK
,发送给Bob主机。 - Bob主机进入连接状态,将
HTTP请求
发送到TCP套接字
中。
- Bob主机发送
HTTP请求
经过网络到达谷歌服务器,谷歌服务器生成HTTP响应报文
,然后送回到Bob主机浏览器。