数据包是怎样从内网发往公网并且获得公网返回的数据包

一个路由器最少有两张网卡,一张网卡对外即公网网卡,是运营商在出厂的时候赋予的.
另一张网卡对内, 即内网网卡

路由器的路由表中最少也有两条规则
1>第一条规则匹配的 是 默认网关 (后面会有解释) —公网网卡
2>第二条规则匹配的 是 局域网                 —内网网卡

路由器是怎样分配IP地址呢?

每当我们的pc连接wifi的时候,路由器就会给这台pc一个IP地址. 因为路由器上面跑这一个服务, DHCP server 程序. 对应的是,pc上肯定也会跑着 DHCP client .

如图:查看DHCP client
在这里插入图片描述
当我们的DHCP client拿到 ip 地址之后就会把它设置在对应的网卡上面.

为什么连上wifi就能上网 ?

思考这样一个问题, 我们的pc没有公网的ip, 但是为什么连接上 wifi 就能和公网互通了呢? 立马想出的答案肯定是路由器搞的鬼
但是里面的具体操作是什么呢 ?

首先,我们先看数据包是怎样出去的
假设我们要访问百度 – 14.215.177.38 (只是其中一个服务器)

发包
我们首先查看pc路由表. 如图
简要说明一下:

Destination: 目的地址
Gateway:   网关
Genmask:   掩码
Flags:      标志位, 其中 G 代表网关 -即 Gateway 不为空
Iface:       网卡

其中 Iface 这个网卡和 Gateway 这个是直连的,属于同一个LAN
在这里插入图片描述
一个数据包发送的时候,会查看路由表
首先 目的地址 和 Genmask 进行 操作,然后和Destination 进行匹配.
14.215.177.38 与 0.0.0.0 = 0.0.0.0
匹配第一条
然后需要知道目标地址(路由器)的MAC地址.

此时通过ARP 协议得到路由器的MAC地址. 就可以发送数据包了

数据包 (mac 地址就不详细写了)

src ip 192.168.30.214
dst ip 14.215.177.38
src mac pc mac
dst mac 路由器 mac

路由器的角度:

我(路由器)收到了一个数据包, 首先查看MAC地址和我的MAC地址是否一致, 不一致则丢弃 .
发现一致后,开始解包. 发现 ip 地址不是我的ip地址. 我就把数据包发给默认的网关.

默认网关: 公网的IP地址,这个地址是运营商给的.

路由器在把数据包发送到公网前会进行源地址改写 即 SNAT 源地址映射
同时 dst mac地址会变成 运营商的网络节点的MAC地址

此时的数据包

src ip 路由器 ip
dst ip 14.215.177.38
src mac pc mac
dst mac 运营商的网络节点 mac

好了,此时的包就可以顺利的发给百度了.

回包
百度收到数据包后会做对应的回应. 回应包的 四元组如下

src ip 14.215.177.38
dst ip 路由器IP
src mac pc mac
dst mac 路由器 mac

路由器接收到数据包后,它会还原目标地址 .因为在第一次改写的时候会有做一个记录, 当返回的包到来是会在返回为源目标只

src ip 14.215.177.38
dst ip 路由器IP
src mac pc mac
dst mac 192.168.30.214

还原后发现这个数据包不是给它的, 它在此找到路由表 匹配到了 对内网卡的这条规则 - - 局域网
然后它会发给局域网中的pc. 此时回包也搞通了.

以上就说明了一个数据包从pc发往公网并且公网返回一个数据包到pc 的过程.

猜你喜欢

转载自blog.csdn.net/qq_43701555/article/details/108421141
今日推荐