linux中,如果在一张网卡上配置多个同一网段的ip,那么除了第一个被配置的之外,其余的都将是secondary IP。如果一个udp服务器bind了0.0.0.0地址,而一个udp客户端来连接一个secondary IP,那么连接是不会正常的,抓包会发现udp服务器的回复包的源ip是一个primary IP,而不是它所连接的secondary IP。对于tcp则不存在这样的问题。这是linux内核协议栈所决定的。
对于tcp而言,监听0.0.0.0会导致它接受所有连接本机ip地址的客户端,只要这个ip在本机即可,这是通过路由得知的,只要数据包越过了网络层,到达了tcp_v4_rcv并且成功在监听套接字中找到了端口,那么服务器将建立一个通信套接字,该套接字的源ip完全对应于客户端的目的ip,而对于监听0.0.0.0的udp服务器而言,由于它是没有连接的,在bind的时候,inet数据结构的saddr字段就是0.0.0.0,因此只有在服务器实际回复数据的时候到达网络层填写ip头的时候才会确定回复包的源地址,此时,协议栈已经完全忘记了来源包的目的地址(udp无连接),因此路由完毕找到了出口的时候,如果该条路由没有源地址信息,那么将会调用inet_select_addr来选择一个ip地址,这个函数选择ip的策略就是首先在路由结果的出口设备上按照一定原则找primary地址,如果找不到,则在所有的设备上按照一定原则找primary地址,可见secondary地址是无论如何都不能被选中的。
使用OpenVPN可以做一个测试,udp情况下设置服务器bind 0.0.0.0 1194,然后为服务器添加一个secondary IP-1.2.3.5/24,然后客户端连接之,会出现下面的出错报告:
Incoming packet rejected from 1.2.3.4:1194[2], expected peer address: 1.2.3.5:1194 (allow this incoming source address/port by removing --remote or adding --float)
可见事实。如果加上float就可以了,这个float并不是为了解决secondary IP的问题的,其实这并不是一个问题,这只是一个机制而已。float是为了解决服务器ip地址变化问题的,这里只是歪打正着的解决了secondary IP所谓的问题。
分享到:
相关推荐
test.g711 文件是 g711u 格式的音频文件
Windows NT TCP/IP NT Protocol Adapter for 32-bit Windows: Version 10.2.0.5.0 - Production Time: 17-SEP-2011 12:24:11 Tracing not turned on. Tns error struct: ns main err code: 12560 TNS-12560: ...
学习H3C S7500E 系列以太网交换机配置指导共分为十二本手册,介绍...《三层技术-IP 路由配 置指导》主要介绍路由协议的原理和配置,包括 IPv4、IPv6 网络的各种路由学习技术,以及影响 路由选择或者路由表生成的策略
Features: - Max. number of checking IP - 70 - PING/TCP/HTTP checking - Visual(Box Design, ...- Is able to run three IP Net Checker instance on the same computer (parameter: /secondary and /tertiary)
对于一个pdb文件,要统计其中的secondary structure的种类,可以用此程序
rule {normal|special}{permit|deny}{tcp|udp}source {<ip wild>|any}destination <ip wild>|any} [operate] 配置ICMP协议的扩展访问列表: rule {normal|special}{permit|deny}icmp source {<ip wild>|any]...
Chapter 5 TCP/IP Tricks Chapter 6 WHOIS DNS? Chapter 7 HTTP Hacks Chapter 8 Wifi Fun Chapter 9 Feeling Bluetooth on the Tooth Chapter 10 Bargain Box Kung Fu Appendix A Scapy Reference Appendix B ...
centralaized secondary cotrol of microgrid
最详细的Ethernet secondary ISP Bootloader, 基于LPC23XX,有操作说明,Bootloader代码,还有上位机程序。
> // start the secondary threads > // loop starts at 1 because the main thread is also used (see below) > > for (i=0;i;i++) { > [NSThread detachNewThreadSelector:@selector(runJobs:) > toTarget:self > ...
Secondary School Admission Test - Reading Comprehension题库,SSAT-RC
datasource: primary: url: jdbc:mysql://localhost/primary username: root driver-class-name: com.mysql.jdbc.Driver validation-query: select 1 secondary: url: jdbc:mysql://localhost/secondary ...
/ip dns set primary-dns=202.96.209.5 secondary-dns=202.96.209.133 allow-remote-requests=yes /ip firewall mangle add chain=forward protocol=tcp tcp-flags=syn action=change-mss new-mss=1440 /interface ...
hbase构建二级索引指南,详细介绍了hbase的二级索引的实现机制
LPC Ethernet secondary ISP bootloader
Secondary Indexing in Phoenix
如果在secondary IDE: atcfwchg /S /F 上面这一部比较麻烦,因为X41没有原生的IDE,而是IDE-sata转接桥,必须借其他人的老笔记本做这件事情,或者买一个CF-台式机IDE的转接器,在台式机上做。 设置只需要一秒,...
基于模仿机制的认知无线电频谱动态接入,傅洛伊,陈海波,在认知无线电技术网络中,动态频谱分配是一项重要技术。本文主要关注二级用户如何通过协作或非协作方式使用授权频谱用户的空闲频
bootloader can\i2c\sd\xmodem
RNA Secondary Structure Prediction