回顾
OSI 模型,是一个业界的参考模型;也是一个国际标准。【7】
实际工作中,使用的是 TCP/IP 模型 【4/5】
网络环境中的任何的软件和硬件,都是基于 TCP/IP 模型开发出来的。
所以,按照相同模型制造出来的设备之间的通信过程,是这样的:
(A/B设备,A与B之间的通信)
1.A发送数据 【5层的软件,产生数据,最终沿着1层的网线 -- 封装】
2.中间网络传输数据 【通信网络,是由“通信设备”,例如交换机/路由器】
3.B接收数据 【数据从物理层接收后,转发到应用层 -- 解封装】
4.B返回数据 【精准理解“通信”的概念,指的是“双向”的。】
5.中间网络传输数据
6.A接收数据
-物理层
-数据链路层
-网络层
-传输层
-应用层
如果我们使用的那些“基于TCP/IP模型”制造出来的设备,他们之间的数据
是不能互通的,那么问题有可能存在:(A/B)
1.A->B有问题
*A发送不出来
*中间的网络传输不过去
*B接收不了
2.B->A有问题
*B发送不出来
*中间的网络传输不过去
*A接收不了
1层:
-协议,无
-设备,网线(双绞线)
*线序: 568a/b
*类型:直通线,不同类型的设备之间互联使用;
交叉线,相同类型的设备之间互联使用;
-数据表示:
在第一层表示的时候,是通过“电信号”,只有两种状态:高/低电压
体现在数据层面,就是 0 和 1 ;
所以,在第一层线路上传输的网络信号,通常称之为 0/1比特流。
【比特(bit)指的是网络中的信息的大小的最小单位】
-数制以及数制转换
*2进制
*10进制
IP地址:
任何一个上网的设备,都必须拥有一个IP地址。
但是IP地址的表示,是通过 点分十进制的方式。
并且,
IP地址分为网络/主机位,所以就必须了解“网络掩码”
通过网络掩码,就可以轻松的判断出:两个IP地址是不是同一个网段。
任何两个设备之间通信的类型,都分为两种:
1.交换:同网段的设备之间的通信;
依靠设备:交换机
2.路由:不同网段设备之间的通信;
依靠设备:路由器
交换机:
主要是依靠自己的核心工作表“MAC地址表” 以及 数据帧中的 MAC 地址。
-工作原理:
1.形成MAC地址表[靠源MAC]
*任何时候,在任何一个端口上,收到任何一个数据帧的时候,
都会将数据帧中的“源MAC地址” 和 “数据帧的入端口” 记录下来,
形成“MAC地址表” :
MAC地址 --------- 端口 ------- 类型(dynamic)
2.查找MAC地址表
*在交换机的MAC地址表中,查找是否有与 “目标MAC地址”相同的
MAC地址条目:
&能查到,则从对应的端口转发出去;
&查不到,则进行广播
注意:
交换机从来不会“更改”数据的MAC地址和IP地址。
交换机是一个2层设备,它的功能,只能是查看设备的2层地址
无法查看3层地址
LLDP:
链路层发现协议,公有标准。
主要是用来查看设备之间的“连接端口”。
-配置思路:
1.开启LLDP功能
2.查看LLDP邻居
-除了上述的办法,我们还可以通过其他手段来判断设备之间的连接:
1.标签
2.接口的描述信息
interface gi0/0/x
description TO-CEO
IP数据包格式
网络层功能
- 定义了基于IP协议的逻辑地址
- 连接不同媒介类型
- 选择数据包通过网络的最佳路径
实验
在GE 0/0/0和GE 0/0/1抓包
先设置IP地址和网关。在GE 0/0/0处抓包,在PC1机 ping PC2。
IP头部分析:
* TTL:
time to live ,存活时间。
IP数据包在传输过程中,每经过一个路由器,TTL都会减1;
当减为0的时候,数据包就被丢弃了。
该参数的这个特点,可以防止IP数据包的环路。
*协议号:
表示的是IP头部后面包含的是什么类型的数据包;
常见的协议号:ICMP -- 1
UDP -- 17
TCP -- 6
*Identification (标识符--ID):
用于区分同一个设备发送的多个数据包;
*Source address :源IP地址
表示的是发送数据包的设备的接口的IP地址
*Destination address :目标IP地址
表示的是接收数据包的设备的接口的IP地址
注意:IP地址不变,MAC地址一直在变。
ICMP协议
ICMP协议的封装
Ping:主要用于测试设备之间的双向连通性
-使用的协议:ICMP
-工作原理:
1.发送ICMP 请求报文
2.返回ICMP 响应报文
经常使用的参数:{在网络设备上使用的 ping 命令}
ping -c ,后面跟的是发送的 ICMP 报文的数量,默认是5个
例如:ping -c 500 192.168.1.1 ,即向 192.168.1.1 发送 500个报文
ping -t ,后面跟的是“请求报文和响应报文”之间的最长等待时间;
如果超过这个时间,还没收到“响应报文”,
就认为 ping “是不通的”。默认是 2s
例如:ping -t 3 192.168.1.1,即向 192.168.1.1 发送的请求报文
如果在 3s 内没收到响应报文,则认为不通!
ping -s ,后面跟的是“每个测试数据包”的大小,默认是56字节;
例如:ping -s 1500 192.168.1.1,即向192.168.1.1 发送的每个
ping 的请求报文的大小是 1500 个字节;
注意:
如果想要中止 ping 命令操作,可以直接使用组合键: ctrl+c
在实际的工作中,我们经常需要做的是:
-长时间的 ping 无数多个数据包,即调用 -c 参数
-长时间的 ping 大的数据包,即调整测试数据包的大小,调用 -s 参数
实验ICMP查询报文
ARP协议
《理解ARP的工作原理》
1.首先判断PC1与PC2是否属于相同网段,
-如果是相同网段,则直接向PC2发送数据包;
-如果是不通网段,则直接向网关发送数据包;
在该案例中,PC1的地址为 192.168.1.1/24
我们需要访问的目标是 192.168.1.2
所以,PC1使用自己的掩码,来判断一下出目标IP地址的网络地址是:
192.168.1.0/24
即,PC1认为PC2的IP地址与自己是相同网段。
所以,PC1直接向 PC2 发送 ping 数据 ( ping 的请求报文:request)
2.PC1如果想要发送 ping 的请求报文,那么数据的封装如下:
-ICMP头部+测试数据 ,默认大小是 56字节
-IP头部,默认是20个字节
*源 :192.168.1.1
*目标:192.168.1.2
*协议号: 1
-2层头部
*源MAC:PC1的网卡
*目标MAC: ???(???表示MAC不固定,随时在变)
*类型:0x0800
但是,在上述的封转过程中,2层头部因为缺少“目标MAC”地址,
导致“封装失败”;
所以,为了能够让 PC1 成功的发送这个 Ping 的请求报文,
必须想办法获得:目标IP地址 192.168.1.2 所使用的目标MAC地址。
此时,就需要使用到“ARP”协议。
3.PC1直接产生并发送一个ARP 请求报文,通过广播的方式。
数据报文格式如下:
-ARP头部+请求数据
*发送方的IP:PC1的IP
*发送方的MAC:PC1的MAC
*目标方的IP:192.168.1.2
*目标方的MAC:?????
-2层头部
*源MAC:PC1的网卡
*目标MAC: 全F
*类型:0x0806
4.SW1在Gi0/0/1接口,接收到 PC1 发送的 ARP 请求报文:
-形成MAC地址表
*PC1的MAC ---- Gi0/0/1
-查找MAC地址表
*因为ARP请求报文的目标MAC地址是广播的,
所以会将该报文,从 除了 Gi0/0/1以外的其他所有口发送出去
5.SW1在 Gi0/0/2接口上发送出去,被 PC2 接收,对数据进行解封装,
然后进行逐层分析:
-分析2层头部:
*因为目标MAC地址是“广播”,所以PC2可以接收;然后继续扔给上层处理
*因为“类型”字段是 0x0806,所以我们得知:后面的数据是 ARP 协议的
-分析3层头部:
*该报文是一个 ARP 的请求报文 ;
*包含了发送方的IP和MAC地址
*包含了“目标方”的IP地址,并且这个地址,正好是和自己的IP地址相同
所以,PC2进行以下2个动作:
#1.在本地首先记录下发送方的IP和发送方的MAC地址,
形成 ARP 表 ,所以在PC2本地的ARP表中,有以下的条目:
192.168.1.1 --- PC1的MAC地址
查看PC2的ARP表的命令:
arp -a // 显示 ARP 表
#2.PC2向PC1返回一个 ARP 应答报文(reply),以单播的方式发送
-ARP头部+应答报文
*发送方的IP:PC2的IP
*发送方的MAC:PC2的MAC
*目标方的IP:192.168.1.1
*目标方的MAC:PC1的MAC地址
-2层头部
*源MAC : PC2的网卡
*目标MAC: PC1的网卡
*类型:0x0806
6.SW1在Gi0/0/2接口,接收到该报文,然后:
*形成MAC地址表
PC2的MAC ---- Gi0/0/2
*查找MAC地址表
在表中查找 PC1 的MAC 所对应的转发条目,
因为之前PC1发送报文的时候,SW 已经形成了MAC地址表,
所以该数据帧,直接从 Gi0/0/1 发送出去
7.PC1收到 ARP 应答报文之后,进行解封装:
-分析2层头部:
*因为目标MAC地址是PC1的MAC,所以PC1接收;然后继续扔给上层处理
*因为“类型”字段是 0x0806,所以我们得知:后面的数据是 ARP 协议的
-分析3层头部:
*该报文是一个 ARP 的应答报文 ;
所以就直接使用报文中的“发送方IP和发送方MAC”形成ARP表:
192.168.1.2 --- PC2的MAC地址
查看PC1的ARP表的命令:
arp -a // 显示 ARP 表
8.既然通过上面的ARP,PC1已经获得了 PC2 对应的MAC地址地址
所以,直接放在2层头部的“目标MAC地址”字段,将 Ping 的请求报文
发送出去。
9.PC2收到请求报文后,直接返回一个Ping 响应报文;
此时 PC1 和 PC2 互通。