程序员要知道的一次网络请求的计算机网络剖析

平时冲浪的网络是咋样的?

 1. 设备连接wifi 
 2. 设备发送请求
 3. 服务器响应

哈哈 就是这么简单,我好像说了个废话。那我们从网络角度来看这个是咋搞的。

 1. 手机连接wifi 路由器接收到手机发送的DHCP数据包,然后路由器给手机就分配一个内网ip
 2. 手机发送网络数据包经过路由器转发至公网
 3. 请求经过下一跳,下一跳...  跳至 服务器前面的网络设备,再转发至服务器
 4. 服务器响应 又经过下一跳,下一跳 又跳回我们自己的路由器
 5.  路由器再次转发至 手机

下面的咱来看看比较详细的图

下面我们来抓包来详细分析分析这个过程

我们的设备连接wifi是怎么获取ip的呢?

手机连接wifi,就会自动获取ip,这个可以通过点击wifi设置 可以看到 IP设置(默认DHCP),DHCP是一个自动帮助设备获取ip(还有网关和dns信息)的技术,一般我们的路由器就是一个DHCP服务器。
设备通过发送广播,hey DHCP你在哪里?我想要一个ip还有DNS信息,我们的路由器接收到这个广播之后
image.png

通过抓包如下所示(这个是我笔记本电脑连接wifi时发送的广播 然后路由器向我回复了数据)可以看到我们最开始的地址是0.0.0.0 然后通过255.255.255.255 发送广播

image.png
可以看到这个是DHCP请求的报文(由于这个wifi我已经连接过 所以他会带上我的之前的ip 192.168.1.102缓存) 还带上了我笔记本的mac地址

image.png
这个时候我们来看路由器给我们回的报文,可以看到路由器把我们想要的信息基本都给到我们了。
image.png
到此我们的ip就能拿到了。
拿到ip 我们一般怎么会咋样呢?怎么测试网络通不通呢?一般通过ping一下 尝试一下。

ping 命令全链路是什么样的呢?

比如我们本机是 192.168.1.102 需要ping 192.168.1.104
当我们发送ping命令时 是需要获取对应ip的mac地址,ping是ICMP协议 是一个网络层的协议 网络层的下一层协议是链路层,链路层的封包是需要对方的mac地址的,没有mac地址是不能发送数据包的。发送命令时会去查看自己的mac地址缓存表 arp -a(下图),如果没有找到,会尝试通过ARP协议广播 发现是否有人回应 设置的mac地址,最后实在没有,就查找路由表中最长的匹配项,如果没找到 就通过路由表当中的默认路由将数据包转发出去?怎么验证是否是这个逻辑呢?叮咚嘿嘿抓包,通过抓包来验证一下

这个时候我们把 192.168.1.104 arp表删除。

image.png
咋回事 奥 原来没有权限。管理员运行一下cmd ,可以看到 192.168.1.104 已被删除
image.png

开始ping 并且 抓包

image.png
image.png
image.png

分析

可以看到 我们的 arp已经有104的mac地址了 可以在截图中看到 路由器一直在问 192.168.1.104 你在哪里? 然后192.168.1.104 说 我在这 我的地址是 d8-ce-3a-fa-c3-3a,并且通过下面的ICMP 可 以看到没有经过网络路由器。所以这并不能证明他经过路由表啊 怎么验证呢?所以我们可以搞一个不存在的地址试试 192.168.1.8
image.png

本机ip(广播): 我尼玛 谁是192.168.1.104?狗日的赶紧告诉我 我是 192.168.1.102
1 second later

192.168.1.104:I’m here, 我mac地址是这个d8-ce-3a-fa-c3-3a 记住了没有
本机:ok 我记住了 保存到我的小本本了(arp表)
本机:终于可以发送数据包,zing…
192.168.1.104: 我回你一个包 嘿嘿嘿。。。
本机:我又发一个 嘿嘿 好玩
。。。。
。。。。

ping 一个不存在的ip 192.168.1.8

image.png
image.png
image.png
可以看到我本机通过ARP问了一下 谁是 192.168.1.8 告诉 我(192.168.1.102)一下,发现没人回复,所以拿不到mac地址 直接说丢包了。所以 同网段的是不会经过路由表的 而是直接通过arp,如果没人回复就直接丢包了.

本机ip(广播): 我尼玛 谁是192.168.1.8?狗日的赶紧告诉我 我是 192.168.1.102
two hour later

本机:卧槽 没人吗,算了 访问不了 肯定100%不可达了

ping一个不同网段(192.168.2.8)的试试 看是否会经过路由表

image.png
卧槽 可以看到他的目标ip是 192.168.2.8 但是 目标mac地址 是下一跳地址也就是 路由器的mac地址 所以此时肯定经过了路由表的默认路由,拿到的是路由表默认路由网段的mac地址。

结论
  1. 相同网段是不经过路由器的,而是通过arp获取对应ip的mac地址来发送网络层,链路层数据包
  2. 详细流程如下

不同网络的数据请求分析

不同网络的拓扑图如下

ping 命令全链路是什么样的呢?

由于没有合适的目标公网ip 所以这里就以百度搜索引擎的公网ip地址(157.148.69.74)为例

不同网络需要arp吗?

可以看到我们的arp并没有 这个157.148.69.74 记录,并且下一跳的mac地址是网关的mac地址,那是否说明 arp就是个局域网协议 用作广播的。那我手动加一条记录是否可以生效?
image.png
image.png
添加成功后 可以看到我们已经添加成功 但是mac地址 是广播地址 这个时候再试一下ping 看我们的配置是否可以成功,从截图看到 他喵的就是不起作用 说明这个arp仅仅是局域网发现mac地址
image.png
image.png

路由表是否在不同网络当中是否起了作用?

在网络中,数据包的转发是根据路由表中的最长匹配规则进行的。这意味着,当数据包需要从一个网段转发到另一个网段时,路由器会查找路由表中最长的匹配项,然后沿着该匹配项指定的路径进行转发。
怎么认证这个猜想?
嘿嘿他喵的每次都是走的默认的网关,那我就搞一个刚好最长的匹配项的路由试试 看是否可以起作用?
我们配置 157.148.69.74的 子网掩码 为 255.255.255.255 网关地址 为我 本地ip 192.168.1.105 看这条记录是否起作用 如果起作用那么将访问不通

route -p ADD 157.148.69.74 MASK 255.255.255.255 192.168.1.105 METRIC 1

可以看到我们添加成功了一条记录 但是 这条优先级比默认的优先级要大 ,虽然比他大 但是网络号是最长匹配的。
image.png
果然可以看到神奇的事情发生了,访问不通了。那么我们的记录生效了。
image.png
路由表起到了关键作用 我们需要获取 157.148.69.74的网络号 需要 & 子网掩码 发现 157.148.69.74 与上 255.255.255.255 之后= 157.148.69.74 走的是上图当中最长匹配的第4条路由。
可以通过 tracert(linux 是 traceroute) 看到每一个下一跳的ip 可以看到并没有经过 网关 192.168.1.1 ,而且可以抓包看到 这个目标mac地址是一个广播的mac地址 ???** 为啥呢?是我配置的arp生效了 起作用了吗**
image.png
image.png
我把arp修改之后再试试 可以看到真的是arp 表当中的mac地址?
image.png
image.png

为什么配置了一条在链路上的路由规则后 我们的arp中的记录起作用了?路由表的在链路上到底是啥意思?

在链路上的路由可以通过2层链路直接访问。不需要类似路由器一样进行拆包(拆第三层包) 看目标地址是否是自己。在链路上表示直连, 可以直接通讯,不需要路由,那他怎么封包呢?因为需要mac地址 所以就拿arp表中的我们配置的数据了

结论

结论

每一种通讯都有一张表来记录信息,总共有 arp表 ,路由表,mac表,nat表

arp表(面向局域网的通讯)

通过arp协议广播的方式获得arp信息,记录局域网内的mac地址与ip的映射
image.png

路由表 (不同网络(但不一定限定死 局域网也可以通过最长匹配来匹配路由))

不同网络时,通过ip &子网掩码 来得到网络号,并通过最长匹配规则来匹配路由,得到最终的输出接口和下一跳的地址,他是决定下一跳的关键组成部分
image.png

mac表 (二层网络数据交换时需要用到)

mac表通常在家用路由器(包含了交换机的功能),或者专业交换机当中。
通过二层数据包的目标mac地址 将数据转发送至指定端口,例如ff:f5:f4:f3:f1:f8:f9 ,将发送至端口1,如果发现mac表中没有记录,那么将通过局域网广播的方式,将数据包转发。

mac地址端口/串口所属vlan
ff:f5:f4:f3:f1:f8:f9GEN/0/2vlan1
ff:f6:f4:f3:f1:f8:f9GEN/0/1vlan2

image.png

NAT表

nat是为了解决内网与外网通讯的问题而存在的,例如在普通家庭网络当中,只有一个公网ip,而不是每一个设备有一个公网ip,他们都是内网ip 例如192.168.1.2 等,当从192.168.1.2:9999端口发送数据包至其他公网ip时,如果没有这个NAT 对应公网数据包返回的时候是 路由器不知道这个数据包要给到哪台机器。数据包转到路由器时,是需要利用路由器的公网ip加端口与 内网ip+端口做一一对应建立关系,才能达到双向通讯,准确发送数据的目的。

公网ip+端口内网ip+端口
113.116.216.123:4545192.168.1.2:9999
113.116.216.123:4546192.168.1.3:9999

好的文章:
7层协议
20张图深度详解MAC地址表、ARP表、路由表
37张图详解MAC地址、以太网、二层转发、VLAN
21张图详解交换机MAC地址表的五大要素:MAC地址、VLAN、出接口等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值