PVID和VID彻底研究(上)
——PVID的作用及和VID的区别
Pvid和Vid经常出现于二、三层交换机里,由于PVID和VID的设置不合理,造成VLAN划分变得混乱。本文就对PVID和VID进行了彻底研究。
pvid是交换机上的概念,说的是进入该端口的报文如果没有打vlan id就按pvid的值打上,
vid是报文上的vlan tag的意思.不是同个概念哦.

首先解释一下什么是PVID,PVID英文解释为Port-base VLAN ID,是基于端口的VLAN ID,一个端口可以属于多个vlan,但是只能有一个PVID,收到一个不带tag头的数据包时,会打上PVID所表示的vlan号,视同该vlan的数据包处理,所以也有人说PVID就是某个端口默认的vlan ID号。
默认情况下,简单的理解为:
ACCESS端口接PC,VID=PVID
TRUNK端口级联,VID=全部,PVID=1
简单的说,VID(VLAN ID)是VLAN的标识,定义其中的端口可以接收发自这个VLAN的包;而PVID(Port VLAN ID)定义这个untag端口可以转发哪个VLAN的包。比如,当端口1同时属于VLAN1、VLAN2和VLAN3时,而它的PVID为1,那么端口1可以接收到VLAN1,2,3的数据,但发出的包只能发到VLAN1中
在网上发现一个比较好的解释是:PVID并不是加在帧头的标记,而是端口的属性,用来标识端口接收到的未标记的帧。也就是说,当端口收到一个未标记的帧时,则把该帧转发到VID和本端口PVID相等的VLAN中去。为了验证这一说法,在S3026上做了以下实验:
在S3026上选两个端口,连接两台主机A、B,按照下表给端口设置不同的PVID和VID,用A ping B,并在B上抓包,记录实验结果。

注:结果中“有”表示抓包有ICMP的包(但ping不同),“无”表示没有,“通”表示可以ping通。VID为“无”表示该端口没有加到任何VLAN里。

所有结果为“无”的可以解释为:当端口1收到无标记的帧后,转发到VID=PVID=1的端口去,由于端口2无VID,故主机B收不到包。
所有结果为“有”的可以解释为:当端口1收到无标记的帧后,转发到VID=PVID=1的端口去,由于端口2的VID=1,故主机B收到ICMP的ECHO包,并发出ECHO Reply,由于此种情况下端口1的VID不等于1,故B的Reply并不能到达A。所以只有当两个端口的PVID和VID一样时,才可以互通。
到此我和大家一样有个疑问,一个VLAN干吗要设置PVID和VID两种标识呀?方正只有当PVID=VID时才能互通,只有一个不就够了吗?请往下看。

当所有VLAN都在一个交换机里时,确实只需要一个标识就够了,但跨设备的VLAN就需要另一种标识,这就是802.1Q的VLAN ID,即VID。
我们知道802.1Q的VLAN是在二层帧里加进VLAN标识,俗称打tag,而计算机不能解析这种二层的帧,所以交换机的一个端口在分到一个VLAN时有tag和untag属性,tag端口用来连接设备,untag端口用来连接计算机。Tag端口出去的帧一般都打上了tag,tag中的VID有的来自PVID,有的则来自其它tag端口中本身就含有tag的帧。
设备互连时,由tag中的VID决定了一个二层帧属于哪个VLAN,而计算机不具备打tag的功能,所以只有给连接计算机的端口添加一个属性,用来决定计算机发出的未标记的帧属于哪个VLAN,这个属性就是PVID。

我们来总结一下,S3026的VLAN转发的机制:在一个端口接收到一个无标记帧时,仅仅由该端口的PVID决定该帧转发到哪个VLAN中,即转发到VID=PVID的VLAN中。
到此我们理解了PVID的含义和作用,但似乎只有untag端口下的PVID才具有意义,而实际上tag端口也有PVID属性,PVID对tag端口会造成什么影响呢?请看中篇。
PVID和VID彻底研究(中)
——PVID值对TAG端口影响

在上篇,我们理解了PVID的含义和作用,本篇将通过实验,分别在S3026和S3526上研究PVID值对tag端口的影响。首先在S3026上进行实验,如下图所示:

我们将用到3个端口:Port 1、2、3,
各端口PVID设置如下:
Port 1:PVID = n
Port 2:PVID = 2
Port 3:PVID = 3
创建2个VLAN:
vlan2:VID = 2,包含Port 1 (tag)、Port 2 (untag)
vlan3:VID = 3,包含Port 1 (tag)、Port 3 (untag)
将3台主机A、B、C分别接在Port 1、2、3上,
分别用主机B、C去ping主机A,在主机A上抓包。

实际上tag端口接计算机是没有意义的,因为计算机无法解析打了tag的二层包文,但通过抓包软件可以抓到这种二层报文,通过这种方法可以进行分析。
实验时主机B和C可以是同一台计算机,只不过接到不通端口上,为了方便说明,将它们分开表示。
实验结果如下:
当n = 1时,可以看到来自B和C的包头前都含有802.1Q的Packet,B、C都不能ping通A(ping不通的由于主机A无法解析打了tag的二层包);
当n = 2时,可以看到来自B的包头前不含有802.1Q的Packet,而来自C的有,仅B可ping通A;;
当n = 3时,可以看到来自C的包头前不含有802.1Q的Packet,而来自B的有,仅C可ping通A;;

通过分析,得出S3026转发机制大致如下:
1、由主机B发出的包到接口2(由于此时B不知道A的MAC地址,会发出arp广播包)
2、根据接口2的PVID的值(PVID=2),发往VID=2的VLAN中的所有接口
3、接口1属于VLAN 2,所以接口1能收到此包
4、此时如果VLAN 2中接口1是tag端口,则将接口1的PVID值和VID进行比较:
如果PVID=VID则从接口1出去的包不打tag
如果PVID!=VID则从接口1出去的包打tag

由此可见,以前设为tag端口的PVID不起作用的说法在S3026上并不适用,正确的说法应该是:S3026上的某个VLAN中的tag端口,在转发在此VLAN中包时出去前,先检查该tag端口的PVID是否等于VID,若相等则发出的包不打tag,若不等则打上tag。

而在S3526上重复这个实验时,得到了不同的结果:在S3526上,只要某个VLAN中的端口设为tag端口,在转发来在此VLAN中包时出不管该端口的PVID值是多少,都打上tag。(不同厂家设备的实现方式不一样,需要注意!)
到此,我们都只是在单独一个设备上研究PVID的影响,下篇将结合一个故障实例,解释跨设备时PVID的影响。

将计算机作为NTP服务器,可以让其他设备以该设备为时间基准进行时间校正,比如我当前的应用是目标板上有时钟芯片进行计时,但是由于目标板面积有限,无法在板上布置纽扣电池,所以上电时需要利用时钟基准对其进行校正,因此利用一台计算机作为NTP服务器

NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议。

1、启用 NTPServer。为此,请按照下列步骤操作:
a. 单击“开始”,单击“运行”,键入“regedit”,然后单击“确定”进入注册表;
b. 找到并单击下面的注册表子项:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/W32Time/TimeProviders/NtpServer
c. 在右窗格中,右键单击“Enabled”,然后单击“修改”;
d. 在“编辑 DWORD 值”的“数值数据”框中键入“1”,然后单击“确定”;

2、如果使用NTP Server,建议关闭NTP Client,找到并单击下面的注册表子项:
a.HKEY_LOCAL_MACHINE/SYSTEM/CurrentControl/SetServices/W32Time/TimeProviders/NtpClient
b. 在右窗格中,右键单击“Enabled”,然后单击“修改”;
c. 在“编辑 DWORD 值”的“数值数据”框中键入“0”,然后单击“确定”;

3、强制主机将自身宣布为可靠的事件源,从而使用内置的CMOS时钟
a. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
b. 在右窗格中,右键单击“AnnounceFlags”,然后单击“修改”;
c. 在“编辑 DWORD 值”的“数值数据”框中键入“5”,然后单击“确定”;

4、按照以上步骤设置完成后,经测试windows系统的客户端均能正常同步NTP服务器的时间

5、但此时网络设备(如cisco、h3c交换机……)仍然不能正常同步NTP服务器时间,始终显示unsynchronized

6、经过一番捣腾后,发现修改注册表能解决以上问题:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\LocalClockDispersion值修改为0

7、禁用防火墙或设置例外,UDP 123端口。

8、运行 services.msc,将Windows Time服务设置成自动(延迟启动);
Win7下如果设置成自动,下次重启后此服务会被停止,原因不详。
经实验,延迟启动也并不需要用户登录即可启动。

9、重启动校时服务(在windows的cmd下输入如下指令):net stop w32time && net start w32time 。从cmd的返回可知ntp服务器是否打开。

设置完成。

题外话:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControl/SetServices/W32Time/TimeProviders/NtpClient/SpecialPollInterval为客户端同步时间,单位为秒。

2018.03.21

架设NTP服务器,是个相对比较简单的事情, 架设NTP服务器目的就是使各个工作站的时间统一,下面这篇文章主要给大家介绍了CentOS 7中搭建ntp时钟服务器的步骤,需要的朋友可以参考借鉴,下面来一起学习学习吧。

前言

NTP 网络时间协议用来同步网络上不同主机的系统时间。你管理的所有主机都可以和一个指定的被称为 NTP 服务器的时间服务器同步它们的时间。而另一方面,一个 NTP 服务器会将它的时间和任意公共 NTP 服务器,或者你选定的服务器同步。由 NTP 管理的所有系统时钟都会同步精确到毫秒级。

在公司环境中,如果他们不想为 NTP 传输打开防火墙,就有必要设置一个内部 NTP 服务器,然后让员工使用内部服务器而不是公共 NTP 服务器。在这篇文章中,我们会介绍在CentOS 7 搭建ntp时钟服务器的步骤,一起来看看吧。

服务器 : 192.168.137.3
客户机: 192.168.137.6

1、 服务器端

centos7下首先确认服务器的防火墙、selinux关闭状态

#cat /etc/redhat-release 
CentOS Linux release 7.0.1406 (Core)

第一步 为服务器和客户机安装ntp ntpdate --默认已安装

#yum install ntp ntpdate -y

第二步 查找时间同步服务器

http://www.pool.ntp.org/zone/asia

第三步 编辑 /etc/ntp.conf

server time.windows.com
server s2m.time.edu.cn
server 0.asia.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org
server 3.asia.pool.ntp.org
server 127.127.1.0 iburst  local clock 当外部时间不可用时,使用本地时间。
restrict 192.168.137.1 mask 255.255.255.0 nomodify  允许更新的IP地址段

第四步 启动ntp服务

systemctl start ntpd
systemctl enable ntpd.service 设置开机启动服务

第五步 验证服务

 #ntpq -p
 
  remote   refid  st t when poll reach delay offset jitter
==============================================================================
 211.138.200.209 .INIT.   16 u - 64 0 0.000 0.000 0.000
 ns.pku.edu.cn .INIT.   16 u - 64 0 0.000 0.000 0.000
 211.138.200.208 .INIT.   16 u - 64 0 0.000 0.000 0.000
 nipper.paina.jp .INIT.   16 u - 64 0 0.000 0.000 0.000
 send.mx.cdnetwo .INIT.   16 u - 64 0 0.000 0.000 0.000
*LOCAL(0)  .LOCL.   5 l 52 64 1 0.000 0.000 0.000
 
#date -R
Fri, 15 Jul 2016 15:28:34 +0800

2、客户端

第六步 远程客户端时间同步测试

#date 
Fri Jul 15 15:31:22 CST 2016
#ntpdate 192.168.137.3
15 Jul 15:33:04 ntpdate[63912]: step time server 192.168.137.3 offset -4.492463 sec

第七步 客户端设置计划任务,每天晚上1点同步时间

crontab -e
00 01 * * * root /usr/sbin/ntpdate 192.168.137.3; /sbin/hwclock -w  

格式 00 01 * 五个字符表示 分 时 日 月 年

这也是在使用Listbox的时候遇到的问题,ItemHeight的默认值是13,当在属性窗口里更改它时,改了又变回去了。后来上网查了下资料,原来Listbox默认是不能更改ItemHeight的。想要更改的话,需要这样做:
首先设置DrawMode属性为OwnerDrawVariable,自己画Listbox。
然后处理DrawItem和MeasureItem两个事件,DrawItem是在显示项时触发,MeasureItem是在要计算项的宽高时触发。在DrawItem里重新绘制项目,如下:

程序代码

e.DrawBackground ();
e.DrawFocusRectangle ();
e.Graphics.DrawString (listBox1.Items[e.Index].ToString(), e.Font, new SolidBrush (e.ForeColor), e.Bounds);

可以在MeasureItem里设置ItemHeight

程序代码

e.ItemHeight = 20;

如果只是这样简单的设个值的话可以不用MeasureItem事件了,因为这里已经可以在属性窗口里更改ItemHeight的值了。

用记事本新建一个后缀名为bat的文件,复制以下内容,保存后。运行即可开始清理

@echo off        
echo 正在清除系统垃圾文件,请稍等......        
del /f /s /q %systemdrive%\*.tmp        
del /f /s /q %systemdrive%\*._mp        
del /f /s /q %systemdrive%\*.log        
del /f /s /q %systemdrive%\*.gid        
del /f /s /q %systemdrive%\*.chk        
del /f /s /q %systemdrive%\*.old        
del /f /s /q %systemdrive%\recycled\*.*        
del /f /s /q %windir%\*.bak        
del /f /s /q %windir%\prefetch\*.*        
rd /s /q %windir%\temp & md %windir%\temp        
del /f /q %userprofile%\cookies\*.*        
del /f /q %userprofile%\recent\*.*        
del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*"        
del /f /s /q "%userprofile%\Local Settings\Temp\*.*"        
del /f /s /q "%userprofile%\recent\*.*"        
echo 清除系统LJ完成!        
echo. & pause  

实际验证效果不错。