DC's blog DC's blog
首页
  • 计算机基础
  • linux基础
  • mysql
  • git
  • 数据结构与算法
  • axure
  • english
  • docker
  • opp
  • oop
  • 网络并发编程
  • 不基础的py基础
  • 设计模式
  • html
  • css
  • javascript
  • jquery
  • UI
  • 第一次学vue
  • 第二次学vue
  • Django
  • drf
  • drf_re
  • 温故知新
  • flask
  • 前后端不分离

    • BBS
    • 订单系统
    • CRM
  • 前后端部分分离

    • pear-admin-flask
    • pear-admin-django
  • 前后端分离

    • 供应链系统
  • 理论基础
  • py数据分析包
  • 机器学习
  • 深度学习
  • 华中科大的网课
  • cursor
  • deepseek
  • 杂文
  • 罗老师语录
  • 关于我

    • me
  • 分类
  • 归档
GitHub (opens new window)

DC

愿我一生欢喜,不为世俗所及.
首页
  • 计算机基础
  • linux基础
  • mysql
  • git
  • 数据结构与算法
  • axure
  • english
  • docker
  • opp
  • oop
  • 网络并发编程
  • 不基础的py基础
  • 设计模式
  • html
  • css
  • javascript
  • jquery
  • UI
  • 第一次学vue
  • 第二次学vue
  • Django
  • drf
  • drf_re
  • 温故知新
  • flask
  • 前后端不分离

    • BBS
    • 订单系统
    • CRM
  • 前后端部分分离

    • pear-admin-flask
    • pear-admin-django
  • 前后端分离

    • 供应链系统
  • 理论基础
  • py数据分析包
  • 机器学习
  • 深度学习
  • 华中科大的网课
  • cursor
  • deepseek
  • 杂文
  • 罗老师语录
  • 关于我

    • me
  • 分类
  • 归档
GitHub (opens new window)
  • 计算机基础

    • 前奏(介绍)
    • 计算机硬件组成
    • 操作系统
    • 计算机网络概览
    • 计算机网络之网络接口层
    • 计算机网络之网络层
      • 引言
      • IP协议
      • IP地址
        • IP地址的组成
        • IP地址的分类
        • 私有地址
        • NAT
      • 子网掩码
      • 网络地址
      • 子网划分(了解)
        • 未划分子网
        • 划分子网
        • 练习
      • VLAN(了解)
        • 二层隔离与三层隔离
        • vlan简介
      • ARP协议
        • IP数据包的走向
        • ARP的广播包
      • 网络层整个流程
    • 计算机网络之传输层
    • 计算机网络补充
  • linux基础

  • mysql

  • git

  • 数据结构与算法

  • axure

  • english

  • docker

  • IT_Need
  • 计算机基础
DC
2022-10-13
目录

计算机网络之网络层

# 引言

IP地址+mac地址可以标识全世界范围内唯一一台计算机.
IP地址找到对方主机处于哪个局域网,mac地址找到对方主机处于该网络的哪里..

因为有ARP协议的存在, ARP会将ip地址转换成mac地址
(要么是局域网内一台计算机的mac地址,要么是网关的mac地址,不能也不会是在公网中的设备的mac地址)

网络层(IP协议)本身没有传输包的功能,包的实际传输是委托给数据链路层(以太网中的交换机)来实现的!!

[补充:n进制转十进制]
123(n为10,8,16) --> 1*n^2 + 2*n^1 + 3*n^0  '1的后面有2位数,2的后面有1位数,3后面有0位数'
101 (n为2) --> 1*2^2 + 0*2^1 + 1*2^0 = 5
Ps: 十进制转二进展 -- 除2取余法

求二进制数 01111111 转成十进制, 有个小窍门! 
01111111先加1,因为二进制逢二进一,原二进制数变成了10000000即2^7=128 所以01111111 = 2^7-1 = 127
1
2
3
4
5
6
7

敲黑板! 先简单了解一些网络层的专业名词...
Q: 解释下 IP地址、网段、局域网、子网、子网掩码、默认网关、ARP

参考链接: https://blog.csdn.net/qq_43450715/article/details/120031497

用自己的话笼统解释:
1> IP地址 由网络号+主机号组成.
2> 若某一网段内主机数量太多,广播域太大就会影响传播效率.所以会对IP划分子网.
   eg: 192.168.1.0/27这个c类网络,网络号向主机号借了27-24=3位,即可产生2^3-2个子网;
       每个子网都是一个网段(每个子网的网络号是不一样的)
3> 未划分子网时候,可以大胆的说这里网段/子网/局域网一个意思.因为只有一个网络.
   划分子网后,准确点说: 一个网络 = 一个(大)网段 = 多个子网/多个(小)网段/多个局域网,
   但通常为了省事,混着叫.没有做这么准确的区分..
4> IP地址与子网掩码进行与运算得到子网地址,⽤来确定⽬标主机的IP是否与源主机在同⼀个⽹络/网段内.
5> ARP协议可以将IP地址转换成MAC地址
6> 每个主机会设置默认网关表明路由器的位置.

注意哦!属于同一网段/局域网的主机可以直接进行通信,不同网段的主机要通过路由器(网关)才能通信.
也就是说局域网一般指二层设备(数据链路层的交换机)可达的网络
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# IP协议

IP协议是规定网络地址的协议,定义的地址称为IP地址.

IP协议的组成就不展开来具体阐述了.. 只需要知道IP协议里面有32位的源IP地址和32位的目的IP地址就行!!

1> 依照IP协议在网络里传输的数据,称为 'IP数据报/数据包'
2> IP数据报 = head + data
     head里面放有<源IP地址>和<目标IP地址>
提一嘴: IP地址的通信 在公网里 -- 采用的是 路由协议.. (不做过多阐述,知道就行)

从网络层下来的数据到数据链路层封装成帧: 
帧首部 源mac地址 目的mac地址  源IP地址	目的IP地址 IP数据报数据 帧尾部

Ps: 帧数据 = IP数据报 = IP报头 + IP数据报数据 = 源IP地址 + 目的IP地址 + IP数据报数据
1
2
3
4

# IP地址

先说在前面, IP地址有两大作用:
     1> arp协议会把ip地址解析成mac地址;
     2> 标识子网/局域网地址

# IP地址的组成

IPV4版本的IP地址占4个字节,由32位二进制数组成,通常用点分十进制数表示.每8位为一组..

IP地址 = 网络号Network + 主机号Host
Ps: 网络号标识这台计算机在哪个局域网内;主机号标识该计算机是属于局域网的哪台机器..

IP地址的范围
00000000.00000000.00000000.00000000 ==> 0.0.0.0
11111111.11111111.11111111.11111111 ==> 255.255.255.255
例如: 10101100.00010000.00001010.000000100 ==> 172.16.10.4

# IP地址的分类

2^32个IP地址将网络号和主机号固定下来后,分为了5类

拿到一个IP地址,只需要看IP地址的第一组十进制数, 就能判断IP地址是属于哪一类的!!
约定前1、2、3个8位组分别为A、B、C类IP地址的网络号!(也就约定了子网掩码) D类组播地址;E类研究地址.
这5类IP地址都以固定的二进制数开头,分别是 0、10、110、1110、11110.

网络类别 最大可指派的网络数 第一个网络号 最后一个网络号 每个网络的主机数
A 0 2^7 - 2 = 126 1 126 2^24-2 = 16777214
B 10 2^14 - 1 = 16383 128.1 191.255 2^16-2 = 65534
C 110 2^21 - 1 = 2097151 192.0.1 223.255.255 2^8-2 = 254

解析: IP地址分类后,路由器仅根据目的主机所在的子网进行转发(不考虑主机号),这样可以减少路由表所占的存储空间以及查找路由表的时间!!!

     1> A至C类网络支持的网络数(局域网个数)依次增多,每个局域网所含的主机数依次减少.
     2> A类 127 .0.0.0和0 .0.0.0 这两个网络地址不能使用;
          B类 128.0.0.0 这个网络地址不能使用;
          C类 192.0.0.0 这个的网络地址不能使用;
     3> 每个局域网/网段都需要减去网络地址和广播地址这两个IP地址..它两不能作为主机的IP..
     4> A至C类网络中还包含的有只能在局域网内使用的私有地址...

[一些特殊的ip地址]

1> 网络地址: 网络号保留,主机号全为0     用于标识网络的
2> 广播地址: 网络号保留,主机号全为1 -- 会在该网段/子网进行广播
3> 全网广播地址(IPV4最大的地址): 255.255.255.255
     会在整个网络(该网络划分的所有子网)里进行广播; 各路由器均不转发
4> 0.0.0.0(IPV4最小的地址): 指已经不是真正意义上的ip地址,不知道本机IP时,可以用它!
5> 回环地址: 数字127用于给系统做诊断用..
     127.0.0.1 -- 用于本地软件环回测试 数据包到网卡了,没有往交换机走,原路返回,自己发给自己
对于每一台linux主机,都有本地回环网卡,此网卡上配置的IP地址就是127.0.0.1
相当于一台计算机即当客户端也当服务端,用于保证软件本身的开发没问题,排除网络的因素
6> 私有地址(内网地址):只能在局域网内使用!!!!! 公网上是没有这些IP地址的..

# 私有地址

IP地址 = 公网地址 + 私有地址

私有地址类别 所有的私有IP地址 (闭区间) 私有网络地址 (闭区间) 应用场景
A 10.(0~255).(0~255).(0~255) 10.0.0.0/8 --- --- ---
B 172.(16~31).(0~255).(0~255) 172.(16~31).0.0/12 商用服务器集群化作业
C 192.168.(0~255).(0~255) 192.168.(0~255).0/16 办公室

Ps: 可以算嘛,172.(16~31).0.0/12 网络号位12位, 第二个8位组前4位最大为'1111',转成10进制为31
     B类私有地址 -- 2^4 = 16个连续的B类网络; C类私有地址 -- 2^8 = 256个连续的C类网络..

# NAT

网关都具备NAPT功能,能够只通过一个公网IP地址就能让N台主机与外界通信.
NAPT,它相对于传统的NAT,多了端口号用于找到私有网络里的目的主机..

花钱办宽带实际上是要了一个在公网里的地址, 光猫 = 交换机 + 路由器..

方向 旧的IP地址和端口号 新的IP地址和端口号
出 192.168.0.3:30000 172.38.1.5:40001 (公网)
出 192.168.0.4:30000 172.38.1.5:40002 (公网)
入 172.38.1.5:40001 (公网) 192.168.0.3:30000
入 172.38.1.5:40002 (公网) 192.168.0.4:30000

私有地址不同端口号相同, 表明私网内不同主机上的同一软件发起的通信,到了网关这,进行NAPT转换,使用的是同一个公网IP,但分配的是不同的端口号.. 仔细想想,这是为了一一对应..

具体来说,假设家里的两台电脑,计算机A和计算机B私有地址分别是192.168.0.3和192.168.0.4, 计算机A和计算机B上的QQ软件都要发送一个聊天信息出去, 数据包到了网关这,需要进行转换:         192.168.0.3:30000 转换成 172.38.1.5:40001
        192.168.0.4:30000 转换成 172.38.1.5:40002
接着,计算机A和B上的QQ软件需要接受聊天信息, 响应的数据包根据路由器的映射表进行IP和端口的转换:
        172.38.1.5:40001 转换成 192.168.0.3:30000
        172.38.1.5:40002 转换成 192.168.0.4:30000

可以这样理解, 40001、40002分别代表了计算机A和计算机B,30000代表的是计算机上的QQ软件...


# 子网掩码

如何确定IP地址哪些部分是网络号呢?就要用到子网掩码!!

子网掩码(netmask): 用来标识一个ip地址的网络号个数
        从左到右连续的1,连续的0. 只要属于网络号,子网掩码就标记为1;
可以简写 -- eg 172.16.10.2/24 (24代表IP地址的前24位是网络号)

单独的IP地址没有意义,要与子网掩码一起工作: IP地址 + 子网掩码 --> 标识某个局域网的位置
Ps: 即子网掩码告诉了我们IP地址的网络号..或者是通过子网掩码我们能知道网络地址(IP所处的局域网)..
通常为了方便只会说IP地址,自己要明白还有子网掩码!


# 网络地址

二进制的IP地址与二进制的子网掩码做按位与运算得到网络地址/子网地址 -- 同1为1,否则为0

例1> 求IP地址172.16.10.4/24的子网地址
     10101100.00010000.00001010.00000100 ==> 172.16.10.4
     11111111.11111111.11111111.00000000 ==> 255.255.255.0
     10101100.00010000.00001010.00000000 ==> 172.16.10.0
例2> 求IP地址172.16.10.5/24的子网地址
     10101100.00010000.00001010.00000101 ==> 172.16.10.5
     11111111.11111111.11111111.00000000 ==> 255.255.255.0
     10101100.00010000.00001010.00000000 ==> 172.16.10.0
1
2
3
4
5
6
7
8

子网地址相同,代表处于同一个LAN(局域网)中,
So, 172.16.10.4/24 与 172.16.10.5/24 是处于同一个网段/局域网.它两通信靠mac地址就行.


# 子网划分(了解)

借主机位给网络位使用,也就是子网掩码连续1的个数会增多..
通常会在内网中用私有地址进行子网划分...

# 未划分子网

172.16.10.2/16这个IP所处的网络是一个B类网络.(因为此IP是B类且子网掩码是16位,所以此网络未划分子网)
1> 在此网络里所有主机的:
     子网掩码 -- 255.255.0.0
     网络号 -- 172.16. 
     网络地址 -- 172.16.0.0 (网络号+主机号全0)
     广播地址 -- 172.16.255.255 (网络号+主机号全1)
2> 此网络可用主机IP -- <172.16.0.1 ~ 172.16.255.254> 共2^(8+8)-2=65534个可用主机.
     即主机地址,可分配给网络中终端设备的地址,介于网络地址与广播地址之间
3> 172.16.10.2/24 这个IP的主机号 --  10.2
1
2
3
4
5
6
7
8
9

# 划分子网

划分成多个子网后, 每个子网分配一个独立的广播域, 能节约地址、缓解内网广播负担.

172.16.0.0/16 将这个B类网络地址切割成一个个小的网段/局域网.如何进行子网划分呢?

172.16.0.0/17 向主机号借一位 借的这一位称为子网位(可为 0 亦可为 1)
1> 若子网位为0:
  子网地址/网络地址: 172.16.0.0/17
  子网掩码: 255.255.128.0
  广播地址(剩下15个主机位全为1): 172.16.127.255
  主机: 172.16.0.1~172.16.127.254  共128*254个
1> 若子网位为1:
  子网地址/网络地址: 172.16.128.0/17
  子网掩码: 255.255.128.0
  广播地址(剩下15个主机位全为1): 172.16.255.255
  主机: 172.16.128.1~172.16.255.254 共(255-128+1)*254个
1
2
3
4
5
6
7
8
9
10
11
12
13

两个公式
1> 2^m = 向主机位借位后产生的子网个数 (m为所借位数)
     Ps: 通常至少会借两位,因为划分子网后,处于头和尾的子网拿来用是没问题的,但大家约定不会用..
2> 2^n – 2 = 向主机位借位后产生的每个子网中可用主机IP数
     (n为原主机位的个数减去被借位的个数后的剩余位数) 减2是因为每个子网中的网络地址和广播地址不能用

# 练习

★问: 192.168.1.64/27能否分配给PC使用?

首先可以看出是将192.168.1.0/24 这个C类网络做了一个子网划分,借了3位,变成了192.168.1.0/27, 产生了2^3 = 8个子网,同时每个子网有2^5-2=30个可用IP.

192.168.1. 000 _ _ _ _ _      网络地址: 192.168.1.0 / 27        广播地址:192.168.1.31
192.168.1. 001 _ _ _ _ _                        192.168.1.32 / 27                               63
192.168.1. 010 _ _ _ _ _                        192.168.1.64 / 27                               95
192.168.1. 011 _ _ _ _ _                        192.168.1.96 / 27                               127
192.168.1. 100 _ _ _ _ _                        192.168.1.128 / 27                            159
… … …

以上这个方法太笨!!有聪明一点的办法.
这样思考 借了3位,那么8个子网,每个子网都有32个主机IP(不管那两个是否看可用),也就是说每个子网块的大小为32个. 所以 往后加32, 就是每个子网的网络地址; 知道了相邻子网的网络地址, 再看看广播地址的概念, 广播地址使用的是该网络范围内最大地址, 所以看下一个相邻子网的网络地址再减一就行啦!


# VLAN(了解)

# 二层隔离与三层隔离

隔离是指属于不同的局域网
二层隔离: 两台计算机接入不同的交换机
三层隔离: 子网地址不同

假设一个教室ABCD四台计算机都接入同一个交换机.
1> 那么这个教室的四台计算机在二层是连通的,但不能说这四台计算机都处于同一个局域网;
2> 若进行了子网划分,那么处于不同子网的计算机实现了三层隔离;
     arp计算的时候可不会管这些计算机是否连在同一个交换机,它只管相互通信的计算机网络地址是否相同.
        A: 192.168.1.1/25 B: 192.168.1.2/25 -- 子网位为0
        C: 192.168.1.129/25 D: 192.168.1.130/25 -- 子网位为1
数据包的走向: 计算机A - 教室交换机 - 教室路由器 - 教室交换机 - 计算机D 
3> 二层连通,三层是隔离的. 这种设计很不合理!! 因为二层连通,交换机进行广播时(交换机会在两种情况下广播),不同子网的计算机因为连在同一个交换机上都能收到!!! 一般情况下,二三层应该同时隔离!
4> 怎么实现二三层同时隔离呢?现在的交换机都支持划分多个vlan(虚拟局域网).. ,AB划分到一个vlan里,CD划分到另外一个vlan里,这样的话,第一个vlan的广播不能蔓延到第二个vlan里面!!!

192.168.1.0 这个网络地址进行子网划分,根据真实需求划分出多个子网,每个子网都支持多台主机.. 再结合交换机的vlan.. 实现二三层同时隔离.

综上:
     二层连通,三层是可以隔离的,即两台计算机接入同一个交换机,不一定在同一个局域网内... 不合理;      二层隔离应该与三层隔离保持一致;

# vlan简介

参考链接: https://www.cnblogs.com/linhaifeng/p/6710751.html

1> 带vlan的交换机的端口分为两类: (结合这两个端口可以实现跨交换机划分vlan)
     Access port -- 主要用于连接电脑 这些端口会被打上VLAN Tag(交换机才能知道计算机属于哪一个vlan)
     Trunk por -- 主要将交换机与交换机进行一个串连..
2> vlan的不足之一:
     它最多只支持 4096 个 VLAN 网络(还要除去几个预留的), 对于大型数据中心的来说,这个数量是远远不够.

交换机做集群提升性能,防止单点故障.站在物理层面是两台交换机,站在逻辑层面是一台超级交换机.
在物理层面,一台服务器需要有两根线分别连接到这两个交换机同一个端口(eg 10号端口).. 增加性能,防止单点故障(有时间解决问题) 所以在逻辑层面端口数是没有增加的!!!


# ARP协议

[承上启下]
计算机A如何确定与计算机B是否在一个局域网内? 算IP所处的子网/网络地址.
1> 若在一个局域网内,如何通信?
     通过数据链路层的学习,我们知道该用以太网协议,基于mac地址通过数据链路层的二层交换机进行广播 2> 若跨局域网,如何通信?
     提一嘴,这涉及到公网的路由协议啦.(不过多深究). 但局域网到公网的过程还是需要了解的..

剧透: 不管是否在一个局域网内,交换机都需要事先将ARP协议的广播包进行广播!!! 
细节: 数据链路层的<数据帧>里的目的mac地址是通过ARP协议的广播包广播后得到的!!!

# IP数据包的走向

1> 通信第一步先拿到目标主机的IP地址
2> 判断出目标主机与自己(源主机)是否在同一个子网里.
     ○ 若在同一个子网里,数据包的走向:
          源主机 ---> 本地交换机 ---> 目标主机
     ○ 若不在,数据包的走向:
          源主机 ---> 本地交换机 ---> 本地路由器 ---> 公网(运营商的一系列的网络设备) ---> /
          目标路由器 ---> 目标交换机 ---> 目标主机
Ps: 本地路由器算不算局域网里的设备?算!因为它连到了交换机上.

# ARP的广播包

源主机A IP -- 172.16.10.10/24
目标主机B IP -- 172.16.10.11/24  
目标主机C IP -- 101.200.10.22/24  

要晓得: 每台计算机都有自己的MAC地址、会提前设置自己的IP地址、子网掩码和默认网关的IP地址.. 
注意哦!每台电脑里都有个ARP缓存表(IP地址与mac地址的映射关系表),一开始的时候这个表是空的,通过大家不断广播 arp 请求,最终所有电脑里面的arp 缓存表都会更新完整...

step1: 拿到目标主机的IP与子网掩码
step2: arp协议会算出本机和目标主机的网络地址/子网地址.
step3: 判断源的子网地址与目标的子网地址是否一样.
先要明确,这里发的广播包不是真正通信的数据,而是通过ARP协议得到目标主机或网关的MAC地址. 

1> A与B 处于同一个局域网, 那么 通信就是在同一个子网内通信,靠的是mac地址定位到对方在哪里.
     A如何得到B的mac地址呢?
        △ A发送ARP协议的广播包.
        △ 交换机拿到这个广播包,看到目标MAC是FF:FF:FF:FF:FF:FF,会将此广播包进行广播
        △ 此局域网的主机会拆开广播包看目标IP是不是自己,是的话就会带上自己的mac地址回包..
                  这样A就能得到B的mac地址.. 主机A的ARP缓存表也得到了更新..
                  A再重新封装发起真正的通信..
真正的通信数据: mac(A) mac(B) IP(A) IP(B) 数据部分
2> A与C 是跨局域网传输, 那么 通信不在同一个子网内通信,靠路由器把数据包转发出去
     A下一步需要得到所处局域网的默认网关的mac地址!(A是知道/设置了默认网关的IP地址的)
        △ A同样会发送ARP协议的广播包.交换机拿到这个广播包同样也会进行广播.
        △ 但只有路由器会响应,于是乎A拿到了局域网里网关/路由器的mac地址..
真正的通信数据: mac(A) mac(网关) IP(A) IP(C) 数据部分

数据包通过路由器到了公网,在公网中需要根据路由表hop-by-hop!!

广播包的格式如下:

源MAC 目标MAC 源IP 目标IP 数据部分
源主机A mac A FF:FF:FF:FF:FF:FF 172.16.10.10/24 B主机的IP or 网关的IP 数据

Ps: FF-FF-FF-FF-FF-FF 是用于广播的mac地址 广播包的目标IP是谁,就在跟谁要mac地址

交换机只有在两种情况才把包进行广播,拆包时发现:
1> 目标mac是: FF:FF:FF:FF:FF:FF
2> 目标mac不存在于mac地址表中

为啥说IP地址不可或缺:
1> ARP协议需要. 以太网协议里的目的mac地址起初是不知道的,需要事先通过ARP协议得到.
2> 处于网络层的路由器作为一台每个端口都拥有独立的MAC地址的设备,可以把数据包做一次转发.
1
2
3
4
5
6
7

# 网络层整个流程

A给F发送一个数据包!

网络拓扑图中,路由器1与路由器2进行了连接..路由器1的路由表如下:
Ps:路由表是根据很多路由算法/基于ip地址的路由协议得来的,不是我们研究的范围..
    |     目的地址      |    下一跳      | 端口 |
    | :--------------: | :-----------: | :--: |
    |  192.168.0.0/24  |               |  0   |
    |  192.168.1.0/24  |               |  1   |
    |  192.168.2.0/24  | 192.168.100.5 |      |
    | 192.168.100.0/24 |               |  2   |
若路由器转发的数据包里目的IP地址是192.168.1.0/24这个子网里的,则通过1号端口进行转发.
若匹配到的是下一跳,则需要再次匹配路由表,找到其端口..

1> 首先根据A与F各自的IP和子网掩码与运算得到网络地址分别为 192.168.0.0, 192.168.2.0 
   得知AF处于不同的局域网. 于是乎A会先将数据包发给默认网关/路由器1(192.168.0.254)  
   再细化这一过程,主机A里是设置的有默认网关的IP地址的.
      ○ 主机A会通过交换机1对arp广播包进行广播..
      ○ 主机A拿到交换机1连接到路由器1上的那个端口的mac地址(ABAB).. 并更新主机A的arp缓存表
      ○ 主机A将源MAC地址(AAAA)与网关MAC地址(ABAB)封装在数据链路层头部;
        将源IP地址(192.168.0.1)和目的IP地址(192.168.2.2)封装在网络层头部,然后发包..
        广播包的格式:  AAAA FF:FF:FF:FF:FF:FF IP(A) IP(默认网关) 数据
        数据包的格式:  MAC(主机A) MAC(默认网关) IP(A) IP(F) 数据部分
       注意:数据包里的源IP和目的IP在整个过程是不会变的!!!
2> 交换机1拿到数据包后,拆包发现目的MAC地址是ABAB,查询MAC地址表,从对应的交换机端口将数据包转发给了路由器1.
3> 数据包到了路由器1这,拆包发现目的mac就是自己的,收下了数据包
   路由器继续拆包发现目标IP地址是192.168.2.2,此IP处于192.168.2.0/24这个子网/局域网下,
   路由器1查询自己的路由表,发现下一跳的地址是192.168.100.5,此IP处于192.168.100.0/24网段,
   再次匹配自己的路由表,匹配到的端口为2.. arp广播后得到192.168.100.5的mac地址为D2D2 重新封装数据包.
        数据包的格式: D1D1 D2D2 IP(A) IP(F) 数据部分
4> 数据包到了路由器2这,拆包发现目的mac就是自己的,收下了数据包
   路由器2继续拆包,看到其目的地址是192.168.2.2,路由器2查询自己的路由表,匹配到端口号为1.
   路由器2查询自己的ARP缓存表,查询到192.168.2.2对应的mac是FFFF(若ARP缓存表中没有则依旧需要arp广播).
   将mac地址封装在数据链路层头部,并从1号端口把数据包发出去
        数据包的格式: EFEF FFFF IP(A) IP(F) 数据部分
5> 交换机3收到了数据包,发现目的MAC地址为FFFF,查询自己的MAC地址表,将数据包从对应的交换机6号端口发了出去.
6> 数据包到了F这里,F拆包发现目的mac地址就是自己,于是收下了这个包.

可以发现发送的真正数据,数据包的源IP和目标IP是不变的!!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

网络层(IP协议)本身没有传输包的功能,包的实际传输是委托给数据链路层(以太网中的交换机)来实现的!!

注意哦: 源mac和目的mac每次都会更换.. mac地址表、交换机广播、路由表、ARP广播

站在不同的视角观察,得到些许规则:

[电脑视角]
    首先我要知道我的 IP 以及对方的 IP
    通过子网掩码判断我们是否在同一个子网
    在同一个子网就通过 arp 获取对方 mac址直接扔出去
    不在同一个子网就通过 arp 获取默认网关的 mac 地址直接扔出去

[交换机视角]
    我收到的数据包必须有目标 MAC 地址
    通过 MAC 地址表查映射关系
    查到了就按照映射关系从我的指定端口发出去
    查不到就所有端口都发出去

[路由器视角]
    我收到的数据包必须有目标 IP 地址
    通过路由表查映射关系
    查到了就按照映射关系从我的指定端口发出去
    查不到则返回一个路由不可达的数据包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

计算机网络之网络接口层
计算机网络之传输层

← 计算机网络之网络接口层 计算机网络之传输层→

最近更新
01
deepseek本地部署+知识库
02-17
02
实操-微信小程序
02-14
03
教学-cursor深度探讨
02-13
更多文章>
Theme by Vdoing | Copyright © 2023-2025 DC | One Piece
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式