虚拟接口+tx+linux,Linux使用笔记: 解决Xen虚拟机中VLAN接口不能ping大包的问题

出于调试的需要,想在两个Xen虚拟机间使用VLAN相互访问。在Linux上启用VLAN非常简单,只需要使用命令vconfig配置一个VLAN接口就可以了:

vconfig add eth0 3

ifconfig eth0.3 11.11.4.2 netmask 255.255.255.0 up

删除VLAN则使用vconfig rem eth0.3。当然你也可以在网络脚本中配置你的VLAN接口,这样每次系统启动后会自动配置VLAN接口,具体的配置参见文尾的第一篇参考文档。

当Easwy在两个Xen虚拟机上都配置了VLAN后,使用ping命令可以使两台虚拟机相互ping通。但发现一个问题,一旦ping包的大小超过一定长度,也就是说当ping包开始分片后,两台虚拟机之间就不能ping通了:

root@nti etc> ping 11.11.4.30 -s 1476 -c 3

PING 11.11.4.30 (11.11.4.30) 1476(1504) bytes of data.

1484 bytes from 11.11.4.30: icmp_seq=1 ttl=64 time=0.536 ms

1484 bytes from 11.11.4.30: icmp_seq=2 ttl=64 time=0.213 ms

1484 bytes from 11.11.4.30: icmp_seq=3 ttl=64 time=0.238 ms

--- 11.11.4.30 ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 1998ms

rtt min/avg/max/mdev = 0.213/0.329/0.536/0.146 ms

root@nti etc> ping 11.11.4.30 -s 1477 -c 3

PING 11.11.4.30 (11.11.4.30) 1477(1505) bytes of data.

--- 11.11.4.30 ping statistics ---

3 packets transmitted, 0 received, 100% packet loss, time 2009ms

上面的输出显示,当ping包长度为1476字节时,可以正常ping通,但当ping包长度变为1477字节时,就无法ping通了。

在网上搜索了很久,终于找到了原因。原来,在Xen中,虚拟机的网卡是通过宿主机(Domain-0)上的虚拟接口vifX.X以及虚拟网桥设备virbrX来实现网络通信的。

下面的/sbin/ifconfig输出列出了宿主机相应的网络接口:

$ /sbin/ifconfig

eth0 Link encap:Ethernet HWaddr 00:13:72:18:E0:99

inet addr:192.168.19.84 Bcast:192.168.190.255 Mask:255.255.255.0

inet6 addr: fe80::213:72ff:fe18:e099/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:36017777 errors:43235 dropped:0 overruns:0 frame:46756

TX packets:894337 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:105224895 (100.3 MiB) TX bytes:424826680 (405.1 MiB)

Interrupt:17

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING MTU:16436 Metric:1

RX packets:4698 errors:0 dropped:0 overruns:0 frame:0

TX packets:4698 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:2439660 (2.3 MiB) TX bytes:2439660 (2.3 MiB)

vif3.0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF

inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link

UP BROADCAST RUNNING NOARP MTU:1500 Metric:1

RX packets:38149 errors:0 dropped:0 overruns:0 frame:0

TX packets:512426 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:32

RX bytes:7652947 (7.2 MiB) TX bytes:41352902 (39.4 MiB)

vif4.0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF

inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link

UP BROADCAST RUNNING NOARP MTU:1500 Metric:1

RX packets:65806 errors:0 dropped:0 overruns:0 frame:0

TX packets:553557 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:32

RX bytes:3835916 (3.6 MiB) TX bytes:157035614 (149.7 MiB)

virbr0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF

inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0

inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:555514 errors:0 dropped:0 overruns:0 frame:0

TX packets:824276 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:64025226 (61.0 MiB) TX bytes:968699886 (923.8 MiB)

也就是说,当虚拟机1发包给虚拟机2时,它的报文首先经过vif3.0,然后经过网桥设备(bridge)virbr0,最后到达虚拟机2的虚拟接口vif4.0。

而Easwy所用的Linux内核版本2.6.18-128.el5xen中,它的bridge驱动中存在bug,当使能了conntrack模块时,bridge会把分片包重组起来进行检查,但由bridge再向外发时,却没有重新分片,这导致报文被二层丢弃。也正是这个原因,当ping包大小大于1476时,两台虚拟机间就无法相互ping通了。

要解决这个问题,可以重新编译内核(不过我不知道这个问题在哪一个内核版本中得到了解决)。对于Easwy来说,因为不需要使用防火墙,所以解决起来就不用这么麻烦了,只需要使用下面的命令禁用bridge的防火墙就行了:

# echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables

禁用掉防火墙后,两台虚拟机间的大包可以ping通了,分片包的通过不存在问题。

要了解这个bug的详细信息,参见文末的第二篇参考文档。文末的第三篇和第四篇参考文档,则列出了在Xen中使用VLAN的配置方法,有兴趣的朋友可以看一下。

更多内容,请阅读Easwy的博客上的其它文章。

[ 参考文档 ]

本文以创作共用版权协议发布,转载本文要求遵循“署名-非商业性使用-相同方式共享3.0”的创作共用协议,并以链接形式指明本文地址。

文章的脚注信息由WordPress的wp-posturl插件自动生成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在一起计时器_古典计时器简介之一 qqtimer

可持续水文的路子又多了一条。在这一系列古典计时器中,qqtimer的地位有些特殊,因为现在还有不少人使用它,而之后要介绍的其他计时器已经基本没啥人用了。有两位最知名的WR日常练习的计时器都是它。首先是Feliks Zemdegs,虽然他已经…

可以装linux的路由器,[转载]linux路由器Quagga的配置(一):安装

部分资料摘自http://blog.chinaunix.net/uid-25513153-id-212328.htmlQuagga是一款功能比较强大的开源路由软件,支持rip,ripng,ospfv2,ospfv3,bgp等协议。目前最新版本为Quagga0.99.17。安装Quagga的目的是使装有linux(我采用的是Ubuntu10.04LTS)系统的电…

管理节点连接不上sql节点_质量成本管理:成本控制、成本分析、费用使用流程与节点说明...

关注【本头条号】更多关于制度、流程、体系、岗位、模板、方案、工具、案例、故事、图书、文案、报告、技能、职场等内容,弗布克15年积累免费与您分享!阅读导航→01 质量成本控制流程与节点02 质量成本分析流程与节点03 质量费用使用控制流程与节点质量部…

linux ipset 流量,linux中ipset命令的使用方法详解

linux中ipset命令的使用方法详解发布时间:2020-10-25 17:07:19来源:脚本之家阅读:97作者:lijiaocn栏目:服务器ipset介绍iptables是在linux内核里配置防火墙规则的用户空间工具,它实际上是netfilter框架的一部分.可能因…

springmvc工作流程_SpringMVC工作原理

买了好多书,但是没有一本是看完的,这是看完的第一本书,虽然页数不多、技术早就用了老多遍了,还是总结一下吧!一、MVC模式MVC是 model、view、和controller的缩写,分别代表web应用程序中的三种职责&#xff…

c语言 vc++6.0集成开发环境的使用,VC6.0集成开发环境的使用.ppt

《VC6.0集成开发环境的使用.ppt》由会员分享,可在线阅读,更多相关《VC6.0集成开发环境的使用.ppt(11页珍藏版)》请在人人文库网上搜索。1、VC6.0集成开发环境,VC6.0集成开发环境,1.建立工作区(一),(1)选择菜单“FileNew”,打开“New”对话框&…

sql查找一个范围的值_销售需求丨查找问题

BOSS:茶,那个,什么茶来着?(递过一杯茶...)BOSS:?!!不是这个,我是说那个白茶啊!白茶:......(懵)咋滴…

怎样用c语言算平均成绩,用C语言编程平均分数

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼当个反面典型,让大家见识下丑陋无比的程序好了,主要是想练练打字,HOHO。应该用二维数组且全部函数化的,rand的%后面或是101或是100,可能和编译器有关,TC2下应写…

pandas输出到excel_学Python还不会处理Excel数据?带你用pandas玩转各种数据处理

开场白以前学习 Python 的 pandas 包时,经常到一些 excel 的论坛寻找实战机会。接下来我会陆续把相关案例分享出来,还会把其中的技术要点做详细的讲解。本文要点:使用 xlwings ,如同 vba 一样操作 excel使用 pandas 快速做透视表注…

cadence设计运算放大器_21.比较器的原理与特性,它与运算放大器的本质区别总结归纳...

1.电压比较器的工作原理电压比较器,顾名思义,就是两个输入端的其中一个作为基准,另外一个与基准作比较,输出只存在高电平和低电平两种状态。通过电压比较器,可以将模拟信号转变为数字信号。输入引脚的电位 > -输入引…

在c语言程序中无论是整数还是实数,C语言基础题及参考答案

C第一单元程序设计和C语言一、选择题1.C语言的基本构成单位是: A 。A. 函数B. 函数和过程C. 超文本过程D. 子程序2.一个C语言程序总是从 B 开始执行。A. 主过程B. 主函数C. 子程序D.主程序3.C语言的程序一行写不下时&a…

插入排序最优_排序专题插入排序

今天开始,我计划用几篇专题来集中练习下有关排序的算法,排序算法是算法中最基础的算法了,所以这部分我们是要尽可能的全都掌握了。排序算法最常见的有如下几种:插入排序(Insertion Sort)选择排序(Selection Sort)希尔排序(Shell S…

c语言设计指导实训,C语言程序设计实训指导

与《c语言程序设计(第2版)》配套,给出所有习题及参考答案。按知识点,精选12个典型实训,给出实训目的与要求、实训内容及实训参考程序。附有自测(考试)样卷及参考答案,供读者自测。提供Turbo C 2.0上机环境介绍及常见的Turbo C 2.0…

python程序代码_python基础二

Python基础-注释的引入注释的分类:<1>单行注释:以#开头&#xff0c;#右边的所有文字当作说明&#xff0c;而不是真正要执行的程序&#xff0c;起辅助说明作用多行注释用三个单引号 ‘’’ 或者三个双引号 “”" 将注释括起来&#xff0c;例如:1、单引号&#xff08;…

电气自动化c语言实践操作论文,项目实践论文,关于独立学院电气工程其自动化专业基于CDIO的实践模式相关参考文献资料-免费论文范文...

导读:本文关于项目实践论文范文,可以做为相关论文参考文献,与写作提纲思路参考。(广州大学松田学院 广东广州 511370)摘 要&#xff1a;独立学院作为培养应用型人才的新生力量,要与地方经济社会发展相衔接,培养满足地方经济社会发展需要的、高素质的应用型人才.如何培养符合广东…

c语言 系统 dome,订餐系统(Dome)

import java.util.Scanner;public class OrderingMsg {public static void main(String[] args) throws Exception {Scanner scanner new Scanner(System.in);String[] names new String[6]; // 订餐人姓名String[] dishMsgs new String[6];// 选择菜品int[] numbers new i…

linux里用c实现cat_【案例】用T云做了什么能让企业在工业自动化控制系统行业里实现逆向增长?...

从制造至“智”造&#xff0c;工业正在逐步向自动化、智能化方向深入发展。行业背景&#xff1a;受疫情影响&#xff0c;2020年&#xff0c;上半年雪虐风饕&#xff0c;自动化市场需求下滑&#xff0c;随着后期政策红利推出&#xff0c;市场回暖&#xff0c;上半年的自动化需求…

qt android程序联网死机,qt android开发出现致命错误

启动远端进程。D/dalvikvm( 1387): Late-enabling CheckJNID/dalvikvm( 1387): GC_CONCURRENT freed 256K, 10% free 9307K/10272K, paused 2ms2ms, total 21msD/dalvikvm( 1387): WAIT_FOR_CONCURRENT_GC blocked 11msW/Bundle ( 1387): Key android.app.lib_name expected S…

微软符号服务器 2020年_微软介绍了2020年后它将如何淘汰Edge中的Flash支持

Microsoft Edge微软(通过Bleeping Computer)提供了更多关于它将如何放弃对Flash in Edge的支持以符合Adobe的计划的细节&#xff0c;包括一些值得注意的例外。正如所料&#xff0c;默认情况下&#xff0c;Edge将从2020年12月起禁用闪存。2020年6月之前发布的Flash版本将被完全屏…

android fragment 抽屉,android – 更改Fragment中的导航抽屉项目

我有一个MainActivity启动导航抽屉.也有一些碎片.我需要从片段内部更改导航抽屉列表的标题.我尝试了这个内部片段&#xff1a;navMenuTitles getActivity().getResources().getStringArray(R.array.nav_drawer_items);navMenuTitles[1] username;但到目前为止没有运气.这是我…