网络的特征

速度
成本
安全性
可用性
可扩展性
可靠性
拓扑

  • 其中可用性按整个系统可用时间占全年总体时间的百分比来计算。
    比如99%可用1%不可用,则一年内有3天左右的时间不可用,这是无法接受的。
    一般大型企业要求99.999%,大约5分钟左右不可用时间。
    raid技术就是一个解决可用性的技术,服务器和多个机房备份也是为了可用性。
  • 而可靠性指的是硬件和系统的性能,注意它俩区别。

国际标准化组织(International Organization for Standardization,ISO)简称ISO。
OSI是Open System Interconnection的缩写,意为开放式系统互联。国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架。OSI模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。这是一种事实上被TCP/IP 4层模型淘汰的协议。在当今世界上没有大规模使用。

应 用 层:Application layer
表 示 层:Presentation layer
会 话 层:Session layer
传 输 层:Transport layer :网段 :
网 络 层:Network layer :逻辑地址(更容易找到设备的位置):数据包 :三层交换机,路由器,家用集成路由器
数据链路层:Data link layer : 物理地址(世界唯一性) :帧 :二层交换机,网卡(IP地址是操作系统分配,并非网卡自带,当然MAC地址也可用windows虚拟更改)
物 理 层:Physical layer :位 :网线,集线器

  • 注意每一层传输的时候都要为上一层提供服务,因此要指明上一层的协议(因为每一层都有很多种不同的协议)。
  • 这是因为目标主机拆解封装包的时候,它如果不指明上一层协议,则当这一层解报头传到上一层之后,目标主机不知道要用什么协议在上一层对数据进行拆解以及各种处理。
  • 从应用层到物理层为封装,每次加报头,数据链路层加上校验位,反过来为解封装。

PDU

PDU: Protocol Data Unit,协议数据单元是指对等层次之间传递的数据单位
物理层的 PDU是数据位 bit
数据链路层的 PDU是数据帧 frame
网络层的PDU是数据包 packet
传输层的 PDU是数据段 segment
其他更高层次的PDU是消息 message

数据传输方式

按方向分: 单工 半双工 全双工 ,分别为单向,同一时间单向,同时可双向。

按目标主机数量分:单播 多播(组播) 广播

  • 注意单播多播广播它只管发送,不管目标主机是否收到。不是目标主机的机器也会收到信息只不过默认情况下会将其抛弃,但也可能通过其它手段故意获取信息内容达到窃听的效果。
  • 注意广播可能会影响到冲突域内的其他主机(不想接受广播)的通信效率

局域网LAN和广域网WAN

  • 局域网突出的特点就是基于广播的方式通信,在一个小的范围内,这样它寻找主机的效率最好
  • 广域网一般就是通过点对点,一段一段将数据传出

双绞线排序

国内常用T568B标准,国际上常用T568A标准.
百兆以内不排序也可,但是百兆以上不排序会影响网速。

  • 直连线:RJ45水晶头两头为同一种排序方式,生活工作中用的最多就是这种直连线。
  • 交叉线:两头分别为T568A和T568B
    目前主机上大多都能自动识别交叉线还是直连线,因此不用刻意交叉,直接用直连线即可相互通讯。不过有些网卡没有这功能,还是需要制作交叉线才行。
    以上都是5类线的标准,当网速达到千兆以上,用到超5类线以上标准,则8根线每根都既能发送又能接收数据。

T568B:

  • 1和3线以及2和6线分别相互对调即T568A和T568B互换。

  • 早期主机相连就是按照上图方式,不过现在的网卡都可以自适应,所以无需分别,除非是特别老的机器。

以太网(Ethernet):用于局域网内标准

  • 目前基本上局域网内用的都是以太网协议,早期还有令牌环网等协议
  • 以太网协议工作在数据链路层(和物理层)
  • wifi也是属于以太网协议(无线),802.11开头。

注意wifi和wlan和wapi区别:wlan是另外两种协议的统称,代表无线局域网协议

  • 以太网工作在数据链路层,以帧为数据单位,其结构可以参考网络资料。
  • MAC:media access control
  • 早期以太网协议没有指明上一层(网络层)协议,后来在长度位增加了type两个字节用来指明上一层协议

查看帧内内容可用抓包工具

windows:wareshark
linux:

命令行命令 tcpdump

-i 后面指定要抓包的网卡名
-nn 抓包的网卡,当对方访问本机时,显示对方的IP地址而不是主机名
-x 显示16进制的包内数据信息

查看网卡信息 ethtool

ethtool 直接跟网卡名:显示网卡详细信息
-i 后面指定网卡名 比如 eth0 :查看网卡驱动模块

查看网卡信息 mii-tool -v eth0

netstat 或者 ss 查看网络各种信息

  • n 尽量以数字形式显示,不要显示主机名等等
  • t 只显示与TCP协议相关的数据
  • r 路由表相关信息
  • a 所有信息

杂项

yunm -install httpd-tools
ab -c 100 -n 2000 http://192.168.0.1/test.txt

早期同轴电缆的时期CSMA/CD用来解决冲突,后来用了双绞线以及各种网络设备:

  1. HUB :集线器,也被称为中继器repeter(双绞线的最大有效传输100米左右,用它来放大信号延长距离),傻瓜式向所有端口以广播的机制转发数据,一个主机发送数据之后连接到集线器上的所有设备都会收到这个数据,其也被称为泛洪机制(flood)。
    • 它的缺点就是数据不安全(所有机器都能收到数据,因此便可抓取并窥窃);同时会干扰到其他不需要接收数据的机器;再有就是两台机器以上同时发送数据会在集线器内发生冲突,那就仍然需要回退算法(CSMA/CD)重新发送;所有机器共享HUB带宽,工作方式半双工。
    • 连接到hub上的主机在一个冲突域内(两台机器同时发送数据,数据会发生冲撞并损毁,那么这两台主机就在一个冲突域)
    • 注意HUB工作在物理层
  2. 网桥:网桥两端分别为两个冲突域,它就是一个两个端口的交换机,二层设备工作在数据链路层。
  3. switch:交换机,外观类似集线器,不过是以单播转发的机制向特定主机发送数据,它的每一个端口就是一个冲突域,并且连接到它的每个主机的带宽就是交换机的带宽,并不是共享方式,而是独占方式全双工通讯。当然它要提前动态学习port和MAC对应的MAC地址表才能达到这个分离冲突域的效果(注意下面的.
    • 它会根据自己内存中的端口和地址对应的表来对应的转发数据,如果表中没有目标地址MAC和端口对应数据,则它会向所有端口转发数据,如果找到了,则只会向目标地址MAC对应的端口转发数据,达到单播的效果,也就是相当于只有第一次发送数据的时候是广播形式(因为找不到目标MAC地址主机对应的端口)
    • 它学习过程是这样的,当收到一个主机发送的数据帧时(以太网帧),它会记下它收到的这个发送的数据来自哪个端口port以及发送这个数据的主机的MAC地址,这样就把这个端口和MAC地址对应起来了(注意学习的时候是靠源数据来自的源地址以及源端口来学习并存入内存表格中的,而不是靠目标地址)
    • 注意一个端口对应的MAC地址可以有多个,因为一个端口上可以再次接上交换机或者集线器等等,可以有多台主机接在这一个端口上,所以一个端口对应了多个MAC地址。注意这个MAC地址表存在内存中,断电会丢失,因为是动态学习方式,所以可以被清除或者修改,其能保存的对应条目是有限的。
    • 因为它的这个特性,可知如果内存表空间被占满,它就不会再记录新的端口和MAC对应条目,因此它受到数据之后如果找不到对应的MAC地址,他就会广播形式向所有端口转发,造成网络拥堵。通过这种伪造虚假源地址发送数据,然后占满内存表的方式让交换机广播发送,降级设备,就能实现监听数据的效果(因为广播了所以所有的接口都会收到找不到目标MAC地址的数据)。当然具有管理能力的交换机能够避免这种情况发生,但没有管理能力的就无法控制这种行为了。
    • 相比于HUB,它数据更加安全。但某些具有管理功能的交换机同样可以将某个端口设置为旁路接口,所有通过这个交换机的数据都要转发到这个接口上,不论目标地址是什么,也可以达到窃听效果。
    • 同时要注意交换机工作在数据链路层,它记录的是端口和MAC地址而不是IP,IP在网络层
    • 交换机和网桥能隔断冲突域,不能隔断广播域(广播域就是说一台主机发送一个广播,另一台主机收到,那么他俩就在一个广播域,广播域的以太网帧中的目标地址信息为48个1也就是FF:FF:FF:FF:FF:FF)。因为它里面存的MAC地址表都是从源地址学习得来,源地址不可能有48个1的MAC地址,既然找不到这48个1对应的MAC地址和端口,受到广播数据MAC地址为48个1就会向全部端口转发,因此便会广播。(注意连接到交换机的交换机也会收到广播信息,想想原理便知)

VLAN:通常用于配置交换机分隔广播域,每一个VLAN就是一个虚拟局域网网段。(类似实现了路由器的功能,节省单独购买路由器的成本)

  1. 1.分隔广播域 2.安全 3.灵活管理 :注意交换机需要支持配置功能才能配置VLAN。
    • 实现:最常用的以端口方式划分VLAN:将交换机的几个端口划分成一个VLAN中,另外几个端口划分到另外一个VLAN中,这每一个VLAN就是一个广播域(类似子这些端口接到了一个子交换机上),但是两个不同的VLAN之间不能通讯(相当于物理上隔断了,或者说多个VLAN之间接了一个路由器)
    • 如果只能划分VLAN不能配置他们之间的通讯策略,就是二层交换机;如果我们可以配置这多个VLAN之间的相互通讯策略,实现划分广播域,达到安全配置功能,就是带有路由功能的三层交换机。
    • 二层交换机VLAN间互访需借助路由或三层交换机来实现,三层不需要。
  2. 如果两个(或多个)交换机之间的VLAN想要连接在一起,可以把这两个交换机上都各自拿出一个端口并相连,同时
    将这两个端口各自加入想要连接的VLAN内即可,但如果想要连接的VLAN和交换机太多,就会占用过多的端口。这时候就需要一个trunk-802.1Q协议并利用一个trunk端口,也就是干路端口来让这一个接口可以转发此交换机上所有VLAN的数据。
    • 但是转发出去的数据包如果不指定上目标交换机想要与这个数据包来自的VLAN网络合并的VLAN,则在目标交换机会全部转发,因此会在以太网帧的报头信息内指定上目标交换机的VLAN信息,以便相互合并。这就是trunk的工作方式。

  • 上图中主交换机和子交换机相连的所有口都是trunk接口,注意主交换机上配置了3个trunk接口。当然前提是交换机可以配置,不能配置的交换机不支持VLAN功能。
  1. 路由器:为了实现路由,路由器需要做下列事情(这里指的是企业级专用路由器,工作在网络层,家里用的路由器是个集成交换机的集成设备,注意区分):
    • 分隔广播域(多播广播数据都会隔断,只有单播才能穿越,单播也可以配置让它不能穿越,总之全部都可调控,达到安全配置功能)
    • 选择路由表中到达目标最好的路径
    • 维护和检查路由信息 :比如企业中的核心交换机都是带有路由功能的,三层交换机,可以配置连接到它的各个端口的二层交换机之间能否传输数据和通信。这样就把它的子交换机(各个部门交换机)分隔成一个一个的广播域,而不是全都在一个广播域内,可以设置子交换机(各个部门)之间的通讯方式(单向,双向,不可通讯),实现安全策略
    • 连接广域网

分层的网络结构(企业中的简单配置):

TCP/IP 协议栈和 OSI 模型

Transmission Control Protocol/Internet Protocol传输控制协议/因特网互联协议
TCP/IP是一个Protocol Stack,包括TCP、 IP、 UDP、CMP、 RIP、TELNET、FTP、 SMTP、ARP等许多协议,最早发源于美国国防部(缩写为DoD)的因特网的前身ARPA网项目,1983年1月1日,TCP/IP取代了旧的网络控制协议NCP,成为今天的互联网和局域网的基石和标准,由互联网工程任务组负责维护
共定义了四层和ISO参考模型的分层有对应关系
ethr(IP(TCP(App([DATA]))SCR

TCP/IP中各种协议服务工作的层级:

  • http协议也是工作于应用层

TCP和UDP

TCP:
工作在传输层
面向连接协议 :先建立连接,再传输数据(三次握手和四次挥手)
全双工协议
半关闭 :一方关闭,变成了单工传输
错误检查
将数据打包成段,排序
确认机制
数据恢复,重传
流量控制,滑动窗口
拥塞控制,慢启动和拥塞避免算法

  1. 端口号指定的是输层TCP上一层工作的应用层协议或者服务的端口,比如ssh服务端口号就是22,ftp为21,telnet 23,smtp 25,pop110.
  2. 不同的软件和服务用不同的端口号,基于网络通讯的软件分为服务器和客户端软件,但这些服务器软件的端口都是固定端口,客户端的端口是随机分配的。通过源端口和目标端口就确认了应用程序唯一标识。

TCP协议PORT

传输层通过port号,确定应用层协议
Port number:
tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路
0-65535
udp:User Datagram Protocol,无连接的协议
0-65535
IANA:互联网数字分配机构(负责域名,数字资源,协议分配)

  1. 0-1023:系统端口或特权端口(仅管理员可用) ,众所周知,永久的分配给固定的
    系统应用使用,22/tcp(ssh), 80/tcp(http), 443/tcp(https)
  2. 1024-49151:用户端口或注册端口,但要求并不严格,分配给程序注册为某应用使用,1433/tcp(SqlServer), 1521/tcp(oracle),3306/tcp(mysql),11211/tcp/udp
  3. (memcached)
    49152-65535:动态端口或私有端口,客户端程序随机使用的端口
    其范围的定义:/proc/sys/net/ipv4/ip_local_port_range
  • Linux内私有端口(动态端口)范围(某些情况下可以更改它以免端口数量不够用):/proc/sys/net/ipv4/ip_local_port_range
  • 查看已经被使用的固定端口号:/etc/services

TCP三次握手

TCP四次挥手

sync半连接和accept全连接队列

ss –lnt
/proc/sys/net/ipv4/tcp_max_syn_backlog 未完成连接队列大小,建议调整大小为1024以上
/proc/sys/net/core/somaxconn 完成连接队列大小,建议调整大小为1024以上

  • 以上两个值可以直接用 echo 1024 > 重定向的方式修改,但是无法永久保存,因此要修改相关配置文件
  • 它们的数字决定了服务器主机在同一时间内建立半链接(1次握手)和全连接(3次握手)最大的客户端个数。也就是限制了链接的客户端最大数量。
  • 这个半链接状态容易受到**导致无法让其他的客户端访问(只发送建立链接的请求,但是不回复SYN=1的信息给服务器端),被称为半链接***。

TCP服务拥塞控制和超时重传相关文件

当前所使用的拥塞控制算法 :/proc/sys/net/ipv4/tcp_congestion_control
与TCP超时重传相关的两个内核参数:
/proc/sys/net/ipv4/tcp_retries1,指定在底层IP接管之前TCP最少执行的重传次数,默认值是3
/proc/sys/net/ipv4/tcp_retries2,指定连接放弃前TCP最多可以执行的重传次数,默认值15(一般对应13~30min)

UDP协议

工作在传输层
提供不可靠的网络访问
非面向连接协议
有限的错误检查
传输性能高
无数据恢复特性

Internet层:

icmp协议:网络控制信息协议

  • ping命令就是ICMP协议中的服务,每次默认ping 一个数据包,里面包含64字节的数据。等数据包返回或者超时再ping下一个数据包. 注意 ping发送的数据包必须有去有回才算ping通,光去不回或者去都去不了都算没有ping通。
    -c ping的次数
    -w 等待时长,单位为妙
    -f 泛洪ping,根据CPU频率能力尽最大可能去ping
    -s 指定一个包的数据大小,centos里面最大65507字节

  • 比如用 ping -f -s 65507 IP地址 用于简单的效果,占用对方IP带宽,造成对方网络卡顿甚至影响系统速度。(当然安装防火墙之后可以防止这种简单的
  • ttl:time to live ping命令中显示的数据包在网络中最大生存时长,它表示的数量是默认值减去数据包经过的路由器的数量剩下的值。linux中ttl默认值为64.
    /proc/sys/net/ipv4/ip_default_ttl,可以重定向直接更改(注意这个TTL是IP协议报头中的生存时间项

APR协议:地址解析服务协议

它的作用就是找到逻辑上的IP地址对应的网络中真正主机的位置,也就是其对应的MAC地址。
如果目标地址IP与本机就在同一网段,则当数据传出到这一个IP地址时,比如说ping IP地址,它就会对IP其进行解析,找出物理上的MAC地址,然后将数据包向其转发
如果目标IP和本机不在一个网段之内,则会向路由器的端口转发,因为在ARP表中,这个IP地址对应的MAC就是路由器连接到此网段的端口,至于后面路由器怎么找到这个IP对应的真正的主机的地址,就是路由器和路由表中的工作了。它会一级一级经过路由器转发,直到最终找到目标IP地址的网段和其真正的MAC地址主机,将数据转发给目标

实现过程(ARP表的建立):

  1. 当知道目标的IP地址之后,第一次发送数据便以广播方式在当前网段内发送消息,询问目标IP地址的以太网协议(MAC)地址(注意在以太网协议中,这个广播信息帧的目标MAC地址也就是12个F,源地址就是本机的MAC地址)
  2. 当目标IP地址主机收到这个广播消息之后,他就会知道这条消息的源IP地址以及源MAC地址(因为在广播信息中写的有源MAC地址和IP地址,但需要注意MAC地址是二层以太网协议的报头中的,IP地址是第三层ARP协议中报头中的,其中IP地址包括本机的IP还包括目标主机的IP。这样目标IP主机收到广播才会处理这条信息,其他IP的发现不是发给本机的就会忽略掉这个广播。
    • 注意这些信息存在数据中不同报头中,并存在两个相互通讯的主机内存中的。而之前说的MAC端口地址是存在交换机中的,不要搞混淆了,它们不是同一个机器
  3. 当目标IP主机收到发给自己的询问的广播信息后,它会处理并以单播方式回复发送广播的这个IP和MAC地址的主机一条信息,(其中在以太网协议中的报头中就会包含本机的MAC地址)这样双方就都知道了对方的IP和MAC对应关系,就会把它各自存入自己内存的ARP表中,下次再进行相互访问时就不用再发送广播而是直接单播方式进行传输数据了。

  • 注意:当网络服务重启(systemctl restart network)之后便会清空ARP表,之后便会再次重新进行上述过程进行对比寻找。
  • 经过测试抓包信息可知,第一次双方通讯建立ARP表的时候,数据帧的内容很少。
    1. 发送广播方的帧内data区域:包含着发送ARP广播的源主机IP和目标IP,注意MAC在以太网帧报头处,目标MAC为12个f,源MAC就是本机MAC,type指定就是ARP(0806)
    2. 回复方数据data区域内:它本机的IP和对方的IP 同样的在以太网帧报头处,这时候已知了目标MAC(发送时源MAC),因此源MAC和目标MAC都会写上。

跨网段(路由器隔离)的APR实现(APR表的建立)过程:

注意:ARP分段广播,路由表优先级高于ARP协议,(每次先判断路由表,再决定是ARP广播寻找网关mac还是寻找目标主机mac)

  1. 假如发送方和目标方主机之间隔着1个或者多个路由,则发送数据时(已知本机IP和目标IP),首先在本机网段的路由这一侧,发送数据时会先通过ARP广播找到本机网段的网关对应的MAC,也就是路由器接到这个网段接口IP对应的MAC(这里隐含了一个提前判断,就是主机已经判断过目标IP和本机IP不在一个网段内,因此它就会用广播寻找本机所在网段的路由网关IP接口的MAC地址。从这里也可以看出路由寻址是要高于APR协议的,先判断路由再判断ARP),然后本机就会将数据包转给网关到路由
  2. 转给第一级路由之后,路由器就会根据这个路由的路由表内的信息判断要将这个数据包从此路由的哪一个端口往外转发,并转到下一个路由的哪一个网关。在这第二个网段转发的过程中也是通过APR协议找到下一个网关对应的MAC,然后将数据包转发给下一个网关。
    注意路由表一行内包含 1.目标网段(2.包括子网掩码),3.能发送到目标网段的出口端口 4.能转发给目标网段的下一个路由器的网关入口
    当然路由这是在网络层说的,源IP和目标IP都仍然为最初的IP保持不变(因为这些IP地址并不在以太网帧报头内而是在网络层IP协议的报头数据内,路由器去掉以太网帧报头之后就会根据网络层报头内的目标IP地址进行路由表匹配,并再次以太网封装转发出去,不改变IP协议中的内容,除非是有NAT功能的路由)但在数据链路层来说,以太网帧报头内就是指从这个路由器转出的端口MAC到下个路由器接入的网关MAC,因此每经过一个路由器都会进行封装拆封的过程会不断改变。
  3. 第2个步骤重复进行直到数据转发到与目标IP网段相连的路由器,此时路由器就会把数据发送到目标IP的主机上。
    注意直接与路由器相连的网段 其目标网段和子网掩码就是相连的这个网段和子网掩码不必多说,但注意其网关为0.0.0.0 ,全为0的IP地址 0.0.0.0代表着IP地址不明,也可以认为是它代表了所有的IP地址。
    • 如果它在路由表中的目标网段中,意味着这一条路由表项是默认路由条目,所有找不到匹配项的未知IP的数据都会往这一项写的网关上转发
    • 而如果这全为0的地址写在路由表项网关一栏上,一种情况是它代表这一路由表项对应的转出端口就在这一项前面所写的目标网段上,也就相当于是路由器直连到前面写的目标网段。此时这个路由表就会从这个转出端口进行ARP广播来寻找目标IP的MAC地址。(注意在这里目标的IP地址和这一项对应的端口的IP地址在同一个网段)
    • 而另一种情况就此路由表项所写的目标网段和这个端口不在同一个网段,但是网关仍然写的都是0.0.0.0(正常情况下不在同一网段要写下一个路由的网关入口进行转发的);这种情况下就是为了让这个端口或者主机的IP所在的网段能够与这个路由表项所写的目标网段进行相互通信,(注意它俩不在一个网段,和第一种情况不同,虽然也是直连)其实际效果就是让这个端口连通目标网段的IP时,进行ARP广播,直接寻找MAC地址进行相互通讯。实际应用中就是为了让交换机上不同VLAN的网段之间能够进行通讯但不需要增加路由器,只需要在路由表中添加入本机想要通讯的目标网段,把网关改为全部为0,端口写上,则它在和目标网段内IP进行通讯时,就会进行APR广播直接寻找MAC,因为交换机就是工作在数据链路层用MAC来寻找机器,因此便可不同网段的VLAN之间进行相互通讯了。
    • 还有一种情况就是如果目标网段和网关全部都写0.0.0.0 则这个路由表不管数据要转发到任何IP地址,它都会直接在这一项对应的端口进行ARP广播来寻找目标IP的MAC,与这个端口物理上相连的(通过交换机,集线器等,但不能通过路由器,除非刚好要寻找的目标IP就是路由器接到这个物理连接的网络中的端口IP,)所有不论任何IP的机器都可以相互通讯了。

linux中可用arp 命令查看arp表,或者 ip neigh

-n 不显示名称只显示数字IP

ARP欺骗

  1. 在交换机同一个网段内,伪装自己为某个接收方的IP的MAC地址,分别***发送方和接收方,让发送方误认为自己是接收方,而让接收方误认为自己是发送方。进而这两个主机之间的通讯便会中间途径ARP欺骗的机器,在经过这个机器转发到真正的接收和发送方。因此数据信息就被窃听甚至能被修改。
  2. 在一个网段内伪装自己为路由器网关的IP以及MAC,这样这个网段内所有的联通外网的数据都会经过自己,然后再进行转发(或者不转发造成断网),这样就能够盗取密码等敏感信息。
  3. 因为ARP每次重启网络服务都会重新刷新再次进行动态学习,所以很不安全。因此为了防止ARP欺骗,比较简单的方法就是将网关以及与本机重要连通方的IP和MAC绑定为静态地址,并让它重启不丢失即可(linux中开机自动运行某个脚本进行环境设置,注意重启网络服务也得重写别忘了,windows中自带命令开机不丢失),这样它就不会再被ARP欺骗(静态优先级比动态高)。

反向ARP

发送方主机发送数据的时候不知道对方IP, 需要向DHCP服务器申请IP地址。发送一条ARP广播,其中只包含本机MAC,不含本机IP以及对方IP和MAC,当具有DHCP服务功能的服务器收到广播后回复并分配给它一个IP,并告知对方自己的IP以及MAC。(
反向ARP(MAC解析为IP):发送方只有发送方MAC,回复方4个信息都包含,有效信息为两个IP和回复方的MAC;
ARP(ip解析为MAC):发送方有MAC,本机和对方两个IP,回复方虽然两个MAC,两个IP都包含,但是有效信息只有回复方的MAC。
网吧中的无盘电脑就是这样,开机直接申请IP,DHCP服务器查询提前配置好的IP和MAC对应表,匹配MAC给启动的电脑分配一个固定的IP,然后将此电脑将远程硬盘中的系统载入内存启动。

附加知识点:

centos7 可以tab按键自动补全命令,centos6中不可,但可以装一个软件包名字叫做bash-completion,在yum的epel源里面

IP协议

运行于 OSI 网络层
面向无连接的协议
独立处理数据包
分层编址
尽力而为传输
无数据恢复功能

IP地址

它们可唯一标识 IP 网络中的每台设备
每台主机(计算机、网络设备、外围设备)必须具有唯一的地址
IP地址由两部分组成

  • 网络ID:
    标识网络
    每个网段分配一个网络ID ,最后的主机IP为均为0(主机位全部为1代表广播信息,注意这个IP广播和ARP广播的区别)
  • 主机 ID:
    标识单个主机
    由组织分配给各设备

早期分为A,B,C,D,E等类,用于判断大网核心网,现在的无类地址用子网掩码来判断IP的网段了。

特殊的:

  • 0.0.0.0
    0.0.0.0不是一个真正意义上的IP地址。它表示所有不清楚的主机和目的网络
  • 255.255.255.255
    限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机
  • 127.0.0.1~127.255.255.254
    本机回环地址,主要用于测试。在传输介质上永远不应该出现目的地址为“127.0.0.1” 的数据包
  • 224.0.0.0到239.255.255.255
    组播地址,224.0.0.1特指所有主机,224.0.0.2特指所有路由器。224.0.0.5指OSPF路由器,地址多用于一些特定的程序以及多媒体程序
  • 169.254.x.x
    如果Windows主机使用了DHCP自动分配IP地址,而又无法从DHCP服务器获取地址,系统会为主机分配这样地址
    C私网地址:192.168.0.0-192.168.255.0
    B私网地址:172.16.0.0-172.31.0.0
    A私网地址: 10.0.0.0-10.255.255.255
    主机ID为全为0代表此网段,全为1代表此网段广播,需要剔除网段中这两个IP
  • 注意私有地址只在局域网中,在公网中显示的都是公有地址,会有一个转换过程。

A类:1-126

0 000 0000 - 0 111 1111: 1-127
网络数:126, 127
每个网络中的主机数:2^24-2
默认子网掩码:255.0.0.0
私网地址:10.0.0.0

B类:128-191

10 00 0000 - 10 11 1111:128-191
网络数:2^14
每个网络中的主机数:2^16-2
默认子网掩码:255.255.0.0
私网地址:172.16.0.0-172.31.0.0

C类:192-223

110 0 0000 - 110 1 1111: 192-223
网络数:2^21
每个网络中的主机数:2^8-2
默认子网掩码:255.255.255.0
私网地址:192.168.0.0-192.168.255.0

D类:组播

1110 0000 - 1110 1111: 224-239

E类:保留未使用

240-255

子网掩码

  • 子网掩码判断对方一个IP是否和自己在同一网段的时候,本机网段就是子网掩码位和IP位想与即可,而判断对方的IP是否和自己在同一个网段,要拿自己的子网掩码来与对方的IP,看其得到的结果是否和自己的网段相同来判断。
  • 子网掩码前面的位必须为1,中间不能有0然后再出现1这种情况
  • 复习知识:路由协议高于ARP协议,ARP广播之前就需要先判断目标IP是否和自己在一个网段,在一个网段直接ARP广播找MAC,不在一个网段则去找路由网关MAC(这也就解释了为何路由表的网关设置为0.0.0.0之后,当寻找这一项前面对应写的目标网段内的IP地址时,ARP就直接发送广播来找想要连接的IP地址的MAC了。因为0.0.0.0就代表任何地址或者说未知地址,或者简单一点就把自己当做路由,如果网关是个特定的IP,肯定是要用ARP广播寻找这个特定IP的MAC的,发送广播的时候目标地址写的就是这个网关特定IP地址,但是因为写是0.0.0.0,未知,所以ARP发送广播的时候目标地址就直接写了最初想要连接的主机的IP了,如果说目标地址和本机地址不在一个网段,也会让它强行广播直接寻找,这样在交换机上物理连接的不同网段就能互通了。)

00000000 0
10000000 128
11000000 192
11100000 224
11110000 240
11111000 248
11111100 252
11111110 254
11111111 255

划分子网和合并超网

  • 划分子网:将一个大网(主机ID位多)划分成多个小网(主机ID位数少),原有网络ID位数不变,新的小网的网络ID变多,主机ID位变少,原有网络ID位向主机ID借位。
  • 合并超网:刚好与上一过程相反。

一些计算方法公式

  1. 网络中主机数=2^主机ID位-2=2^(32-网络ID位)-2
  2. 网络数=2^可变网络ID位
  3. 网络ID=IP与netmask
  4. 无类地址CIDR表示法:IP/网络ID位数, CIDR表示法,无类域间路由
  5. 划分子网数=2^网络ID向主机ID借位的位数(1分为两个子网,2分为4子网,以此类推,但别忘了修改子网掩码)
  6. 划分超网:合并多个小网成为一个大网,主机ID向网络ID借位

路由详细介绍

跨网络通信:路由
路由分类(这里指的是路由表内的每一条信息,不是路由器):
主机路由 :子网掩码全为1,会造成路由表很庞大,不常用
网络路由 :网段路由,最常用的路由表方式,到达网段内之后进行ARP广播查找某个IP对应主机
默认路由 :找不到目标网络时便会向默认路由记录的网关转发,通常用来指定局域网上的主机的网关(主机上也有路由表),注意不能配置在有多条线路上的路由器上面。
优先级:精度越高,优先级越高(主机->网段->默认)

  • 注意:不仅仅是路由器有路由表,每个主机都有路由表,路由表非常重要,它决定了数据包经过网络要发出去时所走的路径,如果缺失路由表,则与它相关的数据包将直接无法发送出去。

基本网络配置1:

将Linux主机接入到网络,需要配置网络相关设置,一般包括如下内容:

  1. 主机名
  2. IP/netmask
  3. 路由:默认网关
  4. DNS服务器:
    主DNS服务器
    次DNS服务器
    第三DNS服务器

主机名知识点1:

  • 注意:linux中的主机名只是给用户一个提示信息,并不具备网络访问的功能(除非定义DNS服务进行解析)。而windows中的计算机名就可以当做一个标识地址来进行访问,注意它俩的区分。

  • Centos6中主机名修改(永久)可以在 /etc/sysconfig/network 中,重启生效,想要立即生效则直接hostname后面加新名字改一下即可。不过修改之后需要更改一下/etc/hosts里面的回环域名解析行,把新修改的这个hostname加到后面去(hosts文件内格式参考原先的,也可以自己增加更多的地址和名字对应关系,此名字解析服务的hosts文件中如果被篡改有访问到假网站的风险)。
  • Centos7中用命令 hostnamectl set-hostname NEW_NAME 的方式,立即生效并且重启生效,或者也可以修改/etc/hostname中的名字,也是重启之后生效(注意这里的重启不是重启shell,而是重启系统)。同样修改完名字之后别忘了需要在 /etc/hosts中新增加回环网址的新名字.
  • 注意6个7两个文件中的主机名格式是不一样的,一个需要写HOSTNAME一个不需要,更加详细的关于主机名的信息可以查看官方文档关于network的解释(6和7的不同之处)。
    经过测试7中在network中写入主机名无效
6的network:
04:07[root@Centos6 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=Centos6.10Test

7的hostname文件:
10:35[root@centos7 /etc/]# cat /etc/hostname 
centos7.6test

接口命名方式:CentOS 6
以太网:eth[0,1,2,...]
ppp:ppp[0,1,2,...]
网络接口识别并命名相关的udev配置文件:
/etc/udev/rules.d/70-persistent-net.rules
查看网卡:
dmesg |grep –i eth
ethtool -i eth0
卸载网卡驱动:
modprobe -r e1000
rmmod e1000
装载网卡驱动:
modprobe e1000

  • 附加知识点:在centos中,如果直接复制一个虚拟机的文件然后打开这个虚拟机,则有些配置会和以前的虚拟机重复,尤其是有固定ID的设备。
    比如说网卡的MAC地址就会和网卡名绑定在一起,导致新复制的这个虚拟机网卡名不会从0开始。这时候要删除掉这个绑定的信息,它在 /etc/udev/rule.d/这个文件夹中,其中网卡对应的就是70-persistent-net.rules ,删除掉或者修改对应的网卡名和mac地址即可(Centos6中有这个文件,7中貌似没有)。
    之后想要重启这个设备,需要用模块控制命令卸载掉网卡驱动,然后再重新启动即可:
    ethtool -i eth0 :查看网卡驱动
    rmmod e1000 :卸载网卡驱动模块
    modprobe e1000:重新加载驱动模块
    这样就可以把名字和MAC的对应关系重新修改了。

基本网络配置2:

IP、 MASK、 GW、DNS相关配置文件:/etc/sysconfig/networkscripts/ifcfg-IFACE

  • 路由相关的配置文件:
    /etc/sysconfig/network-scripts/route-IFACE
    /etc/sysconfig/network-scripts/ifcfg-IFACE:说明参考/usr/share/doc/initscripts-9.49.30/sysconfig.txt

主机名和本地解析器

  • 配置当前主机的主机名:
    hostname [HOSTNAME]
    /etc/sysconfig/network
    HOSTNAME=
  • 解析器执行正向和逆向查询
    /etc/hosts
    本地主机名数据库和IP地址的映像
    对小型独立网络有用
    通常,在使用DNS前检查
    getent hosts 查看/etc/hosts 内容

dns名字解析

  • /etc/resolv.conf
    nameserver DNS_SERVER_IP1
    nameserver DNS_SERVER_IP2
    nameserver DNS_SERVER_IP3
    search magedu.com
  • /etc/nsswitch.conf
    与/etc/hosts相比优先于DNS
  • 正向解析:FQDN-->IP
    dig -t A FQDN
    host -t A FQDN
  • 反向解析:IP-->FQDN
    dig -x IP
    host -t PTR IP

路由器配置文件(详细查看官方网站文档介绍)

  • /etc/sysconfig/network-scripts/route-IFACE
    注意:需service network restart生效
    两种风格:
    (1) TARGET via GW
    如:10.0.0.0/8 via 172.16.0.1
    (2) 每三行定义一条路由
    ADDRESS#=TARGET
    NETMASK#=mask
    GATEWAY#=GW

例如:

格式: default via 192.168.1.1 dev interface
实例: 10.10.10.0/24 via 192.168.1.1 [dev interface]

  • 注意这个配置文件只有DHCP没有配置默认网关,以及没有在/etc/sysconfig/network文件中全局设置网关的情况下才会有必要配置

网卡别名(只是暂时生效,重启服务丢失)

  • 对虚拟主机有用
  • 将多个IP地址绑定到一个NIC上
    eth0:1 、 eth0:2、 eth0:3
  • ifconfig命令:
    ifconfig eth0:0 192.168.1.100/24 up
    ifconfig eth0:0 down
  • ip命令:
    ip addr add 172.16.1.2/16 dev eth0
    ip addr add 172.16.1.1/16 dev eth0 label eth0:0
    ip addr add 172.16.1.2/16 dev eth0 label eth0:0
    ip addr del 172.16.1.1/16 dev eth0 label eth0:0
    ip addr flush dev eth0 label eth0:0

设备别名(永久生效)

  • 为每个设备别名生成独立的接口配置文件
    关闭NetworkManager服务
    ifcfg-ethX:xxx
    别名中的,必须使用静态联网
    DEVICE=eth0:0
    IPADDR=10.10.10.10
    NETMASK=255.0.0.0
    ONPARENT=yes
  • 注意:service network restart 生效
  • 参考:/usr/share/doc/initscripts-*/sysconfig.txt

ifcfg配置文件相关1

  1. 配置文件地址在 /etc/sysconfig/network-scripts/ 文件夹中,其中配置文件都是以ifcfg-开头的,开头必须为ifcfg-,而后面的内容写什么都可以,不过最好和网卡名(设备名)改为一致。修改它就可以永久修改网卡配置,重启网络服务就是按照里面所写的内容来进行网卡设置的。
  2. 注意配置的时候centos6中最好把 service NetworkManager stop (就是图形界面任务栏的网络设置功能和那个图标显示),它和network有时会有冲突。
  3. cat /etc/resolv.conf 可以查看DNS服务是否真正生效,DNS的配置写入的位置仍然在ifcfg文件中。注意想要用外网的DNS服务,必须路由网关先配置好能连接到外网才可以。
  4. 配置完成之后用 service network restart 或 systemctl restart network 重启一下网络服务使其生效
  5. 经测试得知,配置文件最好把DEVICE=eth0:2等等写在第一行,这样载入的时候才会加载此配置。
  6. 配置文件只要有多余的,重启网络服务时找不到的设备,就会报错(centos7中),因此删除网卡后最好用bakifcfg的方式重命名它。
  7. 虚拟机中的配置文件中UUID和HWADDR可以尽量不要写,(物理机可以写上HWADDR)因为有时候会冲突报错,上面的两个一般情况下都是固定的不会改变,但可以用MACADDR= 的方式系统中虚拟修改MAC地址。
  8. 重要注意点:同时配置动态和静态地址一种是分成两个配置文件,以别名的方式。还有一种方法就是在一个ifcfg文件中,把bootproto写为dhcp,但是同时指定给它一个静态的地址,也能同时配置两个地址。
  9. 注意默认的DEFROUTE就是yes状态,如果不写上GATEWAY这一项的话它会把网卡(或者路由)端口相连的网段的第一个IP作为网关。
  10. 从DHCP服务器下载覆盖DNS域名解析服务的网址到本机上,默认也是开启状态(不写的话)。可以用cat /etc/resolv.conf 中查看生效的配置。
    10. 重要注意:经过测试发现,默认网关的首选项就是DHCP服务器给的默认网关,如果它没有配默认网关指向它,然后才是ifcfg文件中的gateway生效(先不考虑全局的/etc/sysconfig/network文件中写的)。但是如果按照那个在一个ifcfg文件里即写入dchp获取,又写入静态地址的方式的话,此时在这个文件里加上默认网关GATEWAY的地址,则会以这个文件中的手写的gateway为首选默认网关项(就是重启网络服务时候的0.0.0.0的指向)。用这种方式来避免网络中各种DHCP服务时导致的默认网关错误问题。
    • 经过更加详细的测试和个人分析得知,在上面的过程中其实是NetworkManager服务的控制,它会首选获得的DHCP网段的默认网关(如果这个配置文件没有其他IP,如上,则就算写了GATEWAY它也会从DHCP服务器获取的GATEWAY作为首选)然后就是上面的情况作为次选(个人分析它应该是为了保持网关和IP的网段对应,所以写了静态IP的情况下就会把默认网关指向手写的GATEWAY,但是如果此时不写GATEWAY,还是会将DHCP的网关作为默认网关)。
    • 如果关闭这个服务,则手写的GATEWAY将会直接生效,变为首选项了。同时经过测试得知,关闭这个服务之后,如果有多个ifcfg都是DEFROUTE为yes状态(虽然此项为yes,但没有写GATEWAY的ifcfg文件就会忽略了)它会根据写了GATEWAY的最后一个ifcfg文件(ls排序的顺序)来作为最后生效的默认网关
    • 同时如果关了它之后,多个针对同一个网卡eth配置文件将会按照ls顺序逐个生效(没关闭之前如果有多个针对同一个网卡也就是DEVICE相同的配置文件,只会有一个生效,可用nmcli更换配置。详细查看nmcli中解释。而关了它之后在这里都会生效,相当于直接ip addr add了很多IP和配置在一个网卡上而且没有用别名的方式,ifconfig看不到这个IP地址的配置)
  11. 经过测试,/etc/sysconfig/network中的GATEWAY=行,会直接在路由表中加上一行默认网关项。详情查看官方解释(包括DHCP,Networkmanager等)。
DEVICE=eth0     :设备名,真正的设备名字
NAME="Wired connection 1"   :连接名,设备在主机上显示的连接名字以及nmcli中显示的连接名
IPADDR=192.168.36.102  :网卡IP地址
PREFIX=24 或者 NETMASK=255.255.255.0
BOOTPROTO=dhcp |static |none   :IP地址分配方式 
ONBOOT=yes     :开机是否启动
GATEWAY=192.168.36.1   :默认网关 ,网关必须和IP地址在同一网段,(或者说全为0,那就是另外的故事了,网关也可以暂时不写)
DNS1=114.114.114.114
DNS2=8.8.8.8
DOMAIN=baidu.com :用于icmp ping命令中ping后面的后缀补全信息,比如命令ping www,它会在www后面补上DOMAIN中所写的内容(会自动前面加一个.,因此DOMAIN中最前面不用写.)
------------------ :下面的可以不写,上面的均为常用的,某些也可以不写
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
DEFROUTE=yes
NM_CONTROLLED=yes  :NM是NetworkManager的简写,此网卡是否接受NM控制;建议CentOS6为“no”
USERCTL=no  :普通用户是否可控制此设备
PEERDNS=yes  :如果BOOTPROTO的值为“dhcp” ,YES将允许dhcp server分配的dns服务器信息直接覆盖至/etc/resolv.conf文件,NO不允许修改resolv.conf
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
UUID=218ac8bc-95f0-33ee-845f-27c3a473d629
HWADDR=00:0C:29:DA:3B:31   :设备mac地址,出厂固定不能改
AUTOCONNECT_PRIORITY=-999  
MACADDR=66:66:66:66:66:66   :系统上虚拟修改mac地址,防止真实MAC地址泄露隐私等信息(wifi探针)

路由表相关和配置

路由管理命令route
查看:route -n
添加:route add
route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
例如主机目标:192.168.1.3 网关:172.16.0.1
route add -host 192.168.1.3 gw 172.16.0.1 dev eth0
例如网段目标:192.168.0.0 网关:172.16.0.1
route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 dev eth0
route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0
默认路由,网关:172.16.0.1
route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1
route add default gw 172.16.0.1
删除:route del
route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]
目标:192.168.1.3 网关:172.16.0.1
route del -host 192.168.1.3
目标:192.168.0.0 网关:172.16.0.1
route del -net 192.168.0.0 netmask 255.255.255.0

路由表:

目标网络(网段) :目标网络IP
子网掩码:注意子网掩码对应的是目标网络IP的,不要当做是网关的子网掩码了
接口:指明了从本设备的哪一个接口转发出这条数据包,就能到达目标网络(接口用IP地址表示,不过如果是一个主机则接口就是它的网卡这个设备和它获得的IP,接口直接指向这个网卡设备即可不用写IP,除非这个网卡有多个接口则需要指明IP。如果是路由器的话则就直接指向接口的IP了)
网关:指明了将数据包转发到下一个设备(或路由)哪个接口(ip),能到达目标网络(网关口用IP地址表示)

注意点:

  1. 注意路由表中只有IP(包括子网掩码等),不含有mac地址,因为它工作在第三层网络层。
  2. 路由器(或者主机)直接相连的网段无需配置,每个直接相连网段的此路由表项:
    目标网络:就是这个网段的网络地址
    接口:就是在这个网段分配的IP(主机的话直接指向网卡设备)
    网关:为0.0.0.0(为何全为0详细更多分析看上面ARP中)
  3. linux中配置路由以及网络服务的时候注意防火墙和selinux的设置,简单来说可以直接关闭,复习点:
    • 关闭防火墙
      centos7:
      systemctl disable firewalld(.service)
      systemctl stop firewalld(.service)
      centos6(和7相互对应):
      chkconfig iptables off
      service iptables stop
    • 关闭selinux
      vim /etc/selinux/config
      SELINUX=enforcing 改为disabled
      或者 sed -r -i "s/^(SELINUX=).*/\1disabled/" /etc/selinux/config
      注意之后必须重新启动reboot ,才能关掉selinux,getenforce可以查看selinux是否真的关闭
  4. linux机器当做路由其使用需要开启路由转发功能,默认是关闭,修改/proc/sys/net/ipv4/ip_forward 为1即可
    • 使用如下两种方法均可临时开启核心转发,立即生效,但是重启网络配置后会失效。
      方法一:echo 1 > /proc/sys/net/ipv4/ip_forward 方法二:sysctl -w net.ipv4.ip_forward=1
    • 使用如下方法开启核心转发功能,重启网络服务后永久生效。
      配置/etc/sysctl.conf文件(centos7中配置/usr/lib/sysctl.d/00-system.conf文件),在配置文件中将net.ipv4.ip_forward设置为1
  5. "traceroute 目标IP" 命令 可以查看路由经过的路由器信息,或者用"mtr 目标" 命令更加详细和高速。
  6. 注意了局域网内的主机的路由表可以添加默认路由(相当于它只有一个接口连接了一个网段,默认路由添加到这一网段的路由器网关上即可)
    • 并且处于边缘网段(一端连接一个局域网,另一端连接外网)的路由器也可以添加默认路由到链接外网的次路由器接口和下一个路由器的网关(与这个路由直接相连的这两个网段的路由表信息会自动添加,相当于这个路由器已知这两个直连的网段,除了这两个直连网段其他任何IP都往下一个路由器网关转发到外网,路由表中有3条信息)
    • 但是只要是路由器(有两个线路以上)最好不要添加默认路由。不然所有的未知目的IP地址都只能走这条默认路由线路了。
  7. 路由器添加路由表的时候,即使不指定下一个路由的网关的端口,它也能自己判断是从哪个端口转发出去,因为下一个路由的网关必然和要转出去的端口在一个网段里面。
  8. 路由表目标网段可以写成包含的关系,也就是路由表中的目标网段包含了许多子网,它既可以写成路由表中的目标网段和实际上要寻找的目标网段写一模一样,也可以路由表上写的的目标网段(网络ID少,主机多)
    包含着真正要寻找的目标网段(网络ID多,主机少),这样的话这个路由器下面还可以再接路由器,由路由器再分子网。
  9. Centos7中network重启失败经常出现,有多种原因,其中常见LSB启动失败的原因中,即使所有配置文件没有错误,还有一种可能是网卡没有插上线,也就是说vmware中的线没有插上 或者 说用命令将 ip link set 网卡 down 了。
    centos7中只要有一个网卡没有启用,重启网络服务就可能会失败(一定要检查所有配置文件的HDADDR和UUID 以及DEVICE是否写错)。
    注意没插网线和ip down它俩还是有区别的,前者是物理上直接没有连接,后者是物理上连接了但是网卡禁用了。
    但无论这两种哪一种,只要有网卡处于down状态,则所有配置正确用network start也可能会无法重启网络服务显示错误。
    但centos6中即使某些网卡关闭了,重启network也不会报错,不过要注意关闭NetworkManager
  10. 配置路由表的接口一定是本机或者本路由的能转发到目标网段的出口,而网关一定是与这个接口相连网段的下一个路由器的接口(在同一个网段),而不是下下一个路由器(下下一个路由器则由下一个路由器来进行转发判断)。

重要注意

  1. 路由表中如果把直接相连的网段的这条路由信息(表现为网关全为0,目标网段和本机IP在同一个网段内的这条)删掉,则这个主机在这个网段内除了本机之外的其他IP地址也将无法连通了,可见路由表的重要(也可见ARP广播在路由判断之后,先判断网段,再判断转发还是直接ARP广播)。
    • 这里的无法联通指的是别的主机能发送数据给本机(比如APR广播),本机也能收到,但是本机无法将数据发送出去(比如无法回复ARP广播请求)(因为不知道应该怎么发,这条路由删掉之后,虽然是直连的网段)
  2. 回环网段的配置文件为ifcfg-lo,网段默认为127.0.0.0/8,可以更改。注意只要在回环网段之内的IP,都会被认为是本机IP,都可以连通。

ifcfg配置文件相关2

Centos7:

nmcli命令(注意它是用NetworkManager服务中的命令)

此命令在7中可以对网卡进行各种操作,其中比较常用的有:
nmcli connection [show]: 显示网卡的采用的配置以及网卡的UUID
nmcli connection reload: 重新载入配置文件,可以让新写的ifcfg配置文件在上一命令中显示出来,用下一命令载入更换网卡的配置
nmcli connetcion up NAME:更换网卡的配置,注意这个NAME不是DEVICE名,而是ifcfg配置文件中的NAME项写的名字

  • 7和6上下对应注意点:
    1. 7中重新添加一项ifcfg配置文件名指定设备名之后,保存退出它并不会直接生效,需要用NetworkManager服务启动后提供的nmcli命令载入此配置才会生效。

Centos6:

  • 7和6上下对应注意点:
    1. 6中重新添加一项ifcfg配置文件名指定设备名之后,保存退出它变直接生效了,因为NetworkManager服务启动后会直接让这个新创建的ifcfg配置文件生效。可用service NetworkManager status 查看它的运行状态。 如果6中没有装这个服务,则必须用service network restart命令重启网络服务才能生效新写的配置文件。一般6中会把manager服务关闭或者直接不安装它,因为会和network服务冲突。

网络不通错误简单分析:

  1. 网络不可到达:没有路由无法连接到未知的网段的网关,会显示如此
  2. 名字或者服务未知(6中为未知的主机):因为连接不到外网,DNS服务无法使用,无法解析域名IP地址,会显示如此
  3. 同网段内的IP 目标主机不可到达:说明同网段内没有这个IP地址的主机(ARP广播没有回应)或者说对方收到了但是没有回复(或者说回复了没有传回来);总之就是ping包发送出去了但没有接收回来。
  4. 不同网段IP 目标主机不可到达:经过路由器转发之后,如果转发到目标网段内则变成,第3项相同的结果,如果没有转发到目标网段内,说明路由器中的路由表无法找到目标网段,信息不完整。
  5. (此处不再区分是否处于相同网段,参考3和4) 目标端口不可达:说明对方的防火墙拒绝了本机的ping命令请求(REJECT) {iptables -A INPUT -s IP地址 -j REJECT}
  6. ping了之后没反应 : 可能是对方收到了但是不回应(防火墙DROP),也可能是对方根本没收到,这两种情况都是一样的显示这种情况 {iptables -A INPUT -s IP地址 -j DROP}
    • 可用tcpdump -i INTERFACE(端口) -nn(数字形式) icmp(只抓ping命令包) 命令查看一下包裹信息来判断
    • 附加,其中icmp处可以写各种协议来只查看此协议的包括信息,比如arp tcp ip udp icmp等等,但是不能查看应用服务如sshd
17:13[root@centos7 /etc/sysconfig/network-scripts]# ip link set eth1 down
17:13[root@centos7 /etc/sysconfig/network-scripts]# ping 1.1.1.1
connect: Network is unreachable

17:16[root@centos7 /etc/sysconfig/network-scripts]# ping www.baidu.com
ping: www.baidu.com: Name or service not known

17:19[root@centos7 /etc/sysconfig/network-scripts]# ping 192.168.36.200
PING 192.168.36.200 (192.168.36.200) 56(84) bytes of data.
From 192.168.36.102 icmp_seq=1 Destination Host Unreachable
From 192.168.36.102 icmp_seq=2 Destination Host Unreachable
From 192.168.36.102 icmp_seq=3 Destination Host Unreachable
From 192.168.36.102 icmp_seq=4 Destination Host Unreachable

17:19[root@centos7 /etc/sysconfig/network-scripts]# ping 192.168.36.200
PING 192.168.36.200 (192.168.36.200) 56(84) bytes of data.
From 192.168.36.102 icmp_seq=1 Destination Port Unreachable
From 192.168.36.102 icmp_seq=2 Destination Port Unreachable
From 192.168.36.102 icmp_seq=3 Destination Port Unreachable
From 192.168.36.102 icmp_seq=4 Destination Port Unreachable

ifcfg配置文件相关3(包括相关命令等):

ifconfig:比较老,没有维护,过时的命令(默认显示没被禁用的网卡)

ifconfig [interface] :显示某个特定网卡信息
ifconfig -a :显示所有网卡,包括启用的和禁用的
ifconfig IFACE [up|down] :禁用网卡
ifconfig interface [aftype] options | address ...
ifconfig IFACE IP/netmask [up] :临时修改IFACE网卡的IP地址,重启网络服务会丢失,下同
ifconfig IFACE IP netmask NETMASK
ifconfig IFACE:name IP/netmask :临时增加别名和网路IP地址(一个网卡多地址)
注意:上面的配置操作立即生效,重启网络服务失效,想要永久生效,写入文件中(配置一个网卡的多个地址,可以直接cp 原配置文件改名然后写入信息即可,其中DEVICE要和网卡别名一样)
启用混杂模式:[-]promisc :抓包用,不过抓包工具会自动启用此功能

ifconfig:
ifconfig -a
ifconfig eth1 up|down
ifup ech1 | ifdown eth1
ifconfig eth1 172.22.66.66/16     :修改
ifconfig eth1:2  10.10.10.10/24   :增添
ifconfig eth1:3  10.10.10.10/24
ifconfig eth1:aa 20.20.20.20/16

ip link set eth0 up | down
ip addr add 2.2.2.2/24 dev eth0  :此方法增加IP,用ifconfig命令无法查看
ip addr add 3.3.3.3/16 dev eth0 lable eth0:2  :就是之前的别名方式
ip addr del 2.2.2.2/24 dev eth0
ip addr flush dev eth0  : eth0 的IP地址全部清空

(netstat | ss) -nta -ntl -ntp -ntupa

ip 命令:新的命令

  1. ip - show / manipulate routing, devices, policy routing and tunnels
    ip [ OPTIONS ] OBJECT { COMMAND | help }
    OBJECT := { link | addr | route }
  2. ip link - network device configuration
    set dev|IFACE
    可设置属性:
    up and down:激活或禁用指定接口
    • 也可直接用 ifup/ifdown IFACE 的形式禁用启用网卡
      show [dev|IFACE]:指定接口
      [up]:仅显示处于激活状态的接口
  3. ip addr { add | del } IFADDR dev STRING
    [label LABEL]:添加地址时指明网卡别名
    [scope {global|link|host}]:指明作用域
    global: 全局可用
    link: 仅链接可用
    host: 本机可用
    [broadcast ADDRESS]:指明广播地址
  4. ip address show - look at protocol addresses
    [dev DEVICE]
    [label PATTERN]
    [primary and secondary]
  5. ip addr flush 使用格式同show
    • 一些例子:
      ip addr add 172.16.100.100/16 dev eth0 label eth0:0
      ip addr del 172.16.100.100/16 dev eth0 label eth0:0
      ip addr flush dev eth0 label eth0:0
  6. ip route - routing table management
    • 添加路由:ip route add
      ip route add TARGET via GW dev IFACE src SOURCE_IP
      TARGET:
      主机路由:IP
      网络路由:NETWORK/MASK
      ip route add 192.168.0.0/24 via 172.16.0.1
      ip route add 192.168.1.13 via 172.16.0.1
    • 添加网关:ip route add default via GW dev IFACE
      ip route add default via 172.16.0.1
    • 删除路由:ip route del TARGET
    • 显示路由:ip route show|list
    • 清空路由表:ip route flush [dev IFACE] [via PREFIX]
      ip route flush dev eth0

路由管理命令

查看:route -n
添加:route add
route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
目标:192.168.1.3 网关:172.16.0.1 接口(可不写,会自动判断,标准还是写上) eth0
route add -host 192.168.1.3 gw 172.16.0.1 dev eth0
目标:192.168.0.0 网关:172.16.0.1 接口 eth0
route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 dev eth0
route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0
默认路由,网关:172.16.0.1
route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1
route add default gw 172.16.0.1
删除:route del
route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]
目标:192.168.1.3 网关:172.16.0.1
route del -host 192.168.1.3
目标:192.168.0.0 网关:172.16.0.1
route del -net 192.168.0.0 netmask 255.255.255.0

配置动态路由 :各种算法自动获取路由信息,大型网络用

  • 通过守护进程获取动态路由
    安装quagga包
    支持多种路由协议:RIP、 OSPF和BGP ,简单来说就是各种路由相互学习路由表信息
    命令vtysh配置

netstat命令:过时命令,用ss效率更高,很多选项通用

  • 显示网络连接(默认显示建立连接的连接,可用-a -l选项选择其它):
    netstat [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|-p]
    -t: tcp协议相关
    -u: udp协议相关
    -w: raw socket相关
    -l: 处于监听状态
    -a: 所有状态
    -n: 以数字显示IP和端口
    -e:扩展格式
    -p: 显示相关进程(应用程序)及PID
  • 常用组合:
    -tan, -uan, -tnl, -unl
  • 显示路由表:
    netstat {--route|-r} [--numeric|-n]
    -r: 显示内核路由表
    -n: 数字格式
  • 显示接口统计数据:
    netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--program|-p] [--numeric|-n]
    netstat -i
    netstat –I=IFACE 或者 netstat -IIFACE (注意后面的写法要写在一起中间没有空格)
    ifconfig -s eth0 :等价于上面命令
  • 例子:
    watch -n 0.5 netstat -i :每0.5秒刷新显示统计信息来进行观测

ss命令

  • 格式:ss [OPTION]... [FILTER]
  • netstat通过遍历proc来获取socket信息,ss使用netlink与内核tcp_diag模块通信获取socket信息
  • 选项:
    -t: tcp协议相关
    -u: udp协议相关
    -w: 裸套接字相关
    -x:unix sock相关
    -l: listen状态的连接
    -a: 所有
    -n: 数字格式
    -p: 相关的程序及PID
    -e: 扩展的信息
    -m:内存用量
    -o:计时器信息
  • FILTER : [ state TCP-STATE ] [ EXPRESSION ]
  • TCP的常见状态:
    tcp finite state machine:
    LISTEN: 监听
    ESTABLISHED:已建立的连接
    FIN_WAIT_1
    FIN_WAIT_2
    SYN_SENT
    SYN_RECV
    CLOSED
  • EXPRESSION:
    dport = (目标端口)
    sport = (源端口)
    示例:’ ( dport = :ssh or sport = :ssh )’
  • 常用组合:
    -tan, -tanl, -tanlp, -uan
  • 常见用法
    ss -l 显示本地打开的所有端口
    ss -pl 显示每个进程具体打开的socket
    ss -t -a 显示所有tcp socket
    ss -u -a 显示所有的UDP Socekt
    ss -o state established '( dport = :ssh or sport = :ssh )' 显示所有已建立的ssh连接 ,其中ssh写成22也可,选项还可再加一个-n,下同
    ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接
    ss -s 列出当前socket详细信息

各命令注意点

  1. ifconfig的来源和信息 rpm -qi net-tools ,从这里和man帮助中可见命令已经过时,用ip命令代替
17:35[root@centos7 ~]# rpm -qf /sbin/ifconfig 
net-tools-2.0-0.24.20131004git.el7.x86_64
  1. 配置一个网卡的多个地址,得用别名的方式,直接配置可用ifconfig命令,永久配置可以直接cp 原配置文件改名然后写入信息即可, 比如 cp ifcfg-eth0 ifcfg-eth0:2 ,(可以有多个,名字也可以不是数字)
    最关键的就是注意配置文件中的DEVICE中后面的名字要和文件名中后面的名字一样,这里面就是DEVICE=eth0:2 , 此时IP就可以自己改了,其他的某些配置也可以改了。配置完之后重启网络服务即可。

    • 注意linux中如果想要即有静态IP又有动态IP配置在一个网卡上,那么只有原始的主配置文件可以配置动态DHCP服务的设置,其它的别名配置文件中不能够配置动态IP,只能静态IP。不论动态还是静态,这些网址都可以同时生效。
    • windows中也可以同时配置动态和静态,比如家中动态(家中路由器带有DHCP服务器)和工作中静态(注意必须是没有DHCP服务的情况下,不然动态地址会起作用),但这两个只能同时生效一个,可自行查看如何配置。
  2. 多个交换机分别用一根网线(每一个都分配一个中等规模的网段)连接到一个总交换机上,然后这个总交换机用一根网线连接到一台服务器上的一个网卡上(支持ftp等服务),给这一个网卡设置多个不同的IP地址(分别属于多个交换机的各个网段),那么这样这些不同网段的主机都能访问到这个ftp服务器,不同网段之间也能相互连接(前提是总交换机上没有做限制)。这样就构成了一个简单的没有外网链接的局域网
    • 此时可以在服务器上添加更多的物理网卡,比如连接到外网,链接到财务办公网络。同时也可以做安全策略让财务办公网络无法与上面的局域网通信,但是上面局域网可以与外网通信(开启网卡之间的数据转发功能)。
    • 当然更多情况下是在主交换机上直接再接上一个路由器连接外网,在这个路由器上做配置,而不是把服务器当做路由器来使用。
    • 不过在最初的局域网中,可以看到服务器网卡(可以看做路由一个接口)用一根网线配置了多个网段的IP地址,并配置了路由表(网关为0,多个目标网段各不相同,但是用同一接口),这样的路由设置被称为单臂路由(只有一个接口)。
  3. 紧接着3中情况分析,不同交换机之间的VLAN之前知道可以用一个TRUNK接口和802.1Q协议来设置相互连接成为一个VLAN(4096个VLAN编号),那么两个交换机的VLAN便可以相互通讯。但是如果想要把一个交换机上的两个不同的VLAN链接在一起,常识中我们知道必须通过路由:要么是三层交换机直接配置路由,要么是二层交换机再单买一个路由器。
    • 这个路由器要么直接连接这个交换机的多个口,分别属于不同vlan不同网段,然后设置路由表让他们之间相互通讯。要么就是可以配置的二层交换机利用trunk接口,只链接一跟网线到这个路由器上,然后将这个路由器连接的接口的IP设置为多个,属于这多个不同的VLAN,然后路由表内信息设置一下(类似上面的局域网服务器的网卡,其实不用添加,因为设置完多个IP后会自动配置每个IP,除非像下面那样只设置一个IP,然后手动配多个路由表项),目标网段就是这些VLAN的网段,网关为0,接口全为路由器的这个接口。当然这些每个VLAN的主机内的路由表也得配置一下网关的信息,指向这个路由表的这个接口(不同VLAN的网关就是这个接口在不同VLAN之间设置的IP地址)。这样就把它作为一个单臂路由来使用了,还能配置安全策略。
    • 但是经过分析得知虽然不同vlan,但是它们是物理连接在一起的,因此只需要配置不同VLAN内的主机上的路由表,添加对方Vlan的网段的路由信息(网段为对方网段,网关为0,接口是这个接口,详细分析看ARP那部分),看起来是路由表有错误(因为网关为0的时候代表直连,但是目标网段却不是接口IP所处的网段),但这种做法只是为了强行让本机进行ARP广播,然后找到目标IP的MAC进行通讯。当然这个目标IP的主机也得设置路由表,不然只能收到广播却无法回复,不知道往哪里回复。
    • 还可以直接在主机上添加目标网段和网关均为0,不过这样就能和所有的VLAN通讯了,不推荐,那VLAN设置的意义就没了,同时还无法进行外网的路由转发了(如果有外网的网关,但这种写法会让它判断为任何目标地址直接ARP广播)不推荐这种添加方式。
    • 只有一种情况会用到上面的方式,就是一台交换机没有DHCP服务,想把他下面连接的所有主机之间相连,每台IP地址随便配置(除了那些特殊的不能配置的之外比如127开头的),但只要配置了这种路由表项(目标网段0,网关0),他们之间仍然可以相互通讯。
  4. ip link命令网卡中的scope {global|link|host}
    • 其中global代表全局通用,其代表从这块网卡连接到来的数据包,或者从其他网卡连接到的数据包,均可访问到这个网卡设置的IP地址,因为global模式将会把此网卡的IP地址存入内核中,则其他网卡访问IP时也能查询到
    • link 代表只有从这个网卡到的数据包才能访问这个网卡设置的IP地址,其他的网卡到的数据包,就算目标IP是这个网卡的IP,也不能访问这个IP地址
    • host表示回环网卡,没有网络功能,就是本机给本机使用(本机即当客户端又当服务器时使用)
  5. 显式路由 route -n ; ip route ; netstat -nr

基本网络配置3

网卡接口配置bonding(多网卡用同一IP地址):

将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。直接给两块网卡设置同一IP地址是不可以的。通过bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址

  • 注意一台主机或服务器上多块网卡用同一个IP地址的时候,需要交换机来配合设置。有多种连接方式,详细可以查看帮助文档,最常见的连接方式就是每一块网卡外面都各自再接一台交换机,然后这些交换机再接到一个总的交换机上,这个总的交换机再连接其他的网络。配置的时候就是在与各个网卡直接相连的交换机上进行相关的bounding配置。

Bonding工作模式

  1. Mode 0 (balance-rr)
    轮转(Round-robin)策略:从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均衡和容错的能力
  2. Mode 1 (active-backup)
    活动-备份(主备)策略:只有一个slave被激活,当且仅当活动的slave接口失败时才会激活其他slave.为了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见
  3. Mode 3 (broadcast)
    广播策略:在所有的slave接口上传送所有的报文,提供容错能力
  4. active-backup、 balance-tlb 和 balance-alb 模式不需要交换机的任何特殊配置。其他绑定模式需要配置交换机以便整合链接。
    如:Cisco 交换机需要在模式 0、 2 和 3 中使用 EtherChannel,但在模式4中需要 LACP和EtherChannel

Bonding配置

  • 创建bonding设备的配置文件
    /etc/sysconfig/network-scripts/ifcfg-bond0
    DEVICE=bond0
    BOOTPROTO=none
    .....等等其它设置
    BONDING_OPTS= “miimon=100 mode=1 fail_over_mac=1”
    /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    BOOTPROTO=none
    MASTER=bond0
    SLAVE=yes
    USERCTL=no
  • 查看bond0状态:cat /proc/net/bonding/bond0
  • 查看有几个bond设备:cat /sys/class/net/bonding_masters
  • miimon 是用来进行链路监测的。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一条线路不通就转入另一条线路
  • 删除bond0
    ifconfig bond0 down
    rmmod bonding (可用lsmod |grep bond查看模块是否被删除)
  • 详细帮助:
    /usr/share/doc/kernel-doc- version/Documentation/networking/bonding.txt :在kernel-doc包里面
    https://www.kernel.org/doc/Documentation/networking/bonding.txt

注意点:

  1. ifcfg-bond0文件就把它当做一个单独的网卡设备来进行各种配置,和普通网卡类似,注意写上设备名(最好和这个文件名一致,以bond加编号的方式命名,注意这个可以随意设置,它不代表模式,模式的设置在后面所写的那一项中)。最重要的一点就是BONDING_OPTS="miimon=100 mode=1" 这一行,前面代表多个网卡之间探测状态的刷新检测频率,后面代表模式
  2. 同样的需要绑定到bond中的网卡,其配置文件也需要更改,其中要加入两项MASTER=bond0 SLAVE=yes ,其中MASTER后面跟的就是ifcfg-bond文件中的DEVICE这一行的设备名(注意别写成了NAME这一行对应的名字)。这样这个网卡将不会独立工作而属于bond中的网卡进行联合工作了,这里面的其他设置也就不会生效了(最好把这两行写在前面的几行,DEVICE永远写在第一行)。
  3. 删除bond设置,先停用bond,然后删除ifcfg-bond配置文件并修改曾经加入bond的网卡,然后重启网络服务是不行的,并没有完全删除。必须卸载模块rmmod bonding.
  4. fail_over_mac For active-backup, do not set all slaves to the same MAC; 0 for none (default), 1 for active, 2 for follow (charp) :此项很重要,在bond1模式中必须设置为1,它就是为了让bond设备和实际网卡的MAC地址不会冲突,不会导致一个网卡接收一个网卡发送的情况出现

CentOS 7网络属性配置

CentOS 6之前,网络接口使用连续号码命名:eth0、eth1等,当增加或删除网卡时,名称可能会发生变化
CentOS 7使用基于硬件,设备拓扑和设置类型命名:
(1) 网卡命名机制
systemd对网络设备的命名方式
(a) 如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,且可预测则根据此索引进行命名,例如eno1
(b) 如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,例如ens1
(c) 如果硬件接口的物理位置信息可用,则根据此信息进行命名,例如enp2s0
(d) 如果用户显式启动,也可根据MAC地址进行命名,enx2387a1dc56
(e) 上述均不可用时,则使用传统命名机制

网卡名称

  • 基于BIOS支持启用biosdevname软件
    内置网卡:em1,em2
    pci卡:pYpX Y:slot ,X:port
  • (2) 名称组成格式
    en: Ethernet 有线局域网
    wl: wlan 无线局域网
    ww: wwan无线广域网
    名称类型:
    o: 集成设备的设备索引号
    s: 扩展槽的索引号
    x: 基于MAC地址的命名
    ps: enp2s1

采用传统命名方式

  • 使用传统命名方式:
    (1) 编辑/etc/default/grub配置文件
    GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0"
    或:修改/boot/grub2/grub.cfg
    (2) 为grub2生成其配置文件
    grub2-mkconfig -o /etc/grub2.cfg :-o 换成 \>重定向也可以
    (3) 重启系统
18:05[root@centos7 ~]# ll /etc/grub2.cfg 
lrwxrwxrwx. 1 root root 22 Mar  5 21:16 /etc/grub2.cfg -> ../boot/grub2/grub.cfg

主机名知识点2:

CentOS7主机名

  • 配置文件:/etc/hostname ,默认没有此文件,通过DNS反向解析获取主机名,主机名默认为:localhost.localdomain
  • 显示主机名信息
    hostname
    hostnamectl status
  • 设置主机名
    hostnamectl set-hostname centos7.magedu.com :立即生效,重启也会生效不会丢失,ubuntu也可用
  • 删除文件/etc/hostname,恢复主机名localhost.localdomain

CentOS 7网络配置工具(尤其是nmcli很实用)

  1. 图形工具:nm-connection-editor
  2. 字符配置tui工具:nmtui (centos6里面 setup命令的第4项也可以,7中没有了)
  3. 命令行工具:nmcli :NetworkManager client (7中自带bash_completion包,可以用它来补全命令)

nmcli可用来准备多套配置来进行装载

  1. 一种方法就是用nmcli命来修改和创建ifcfg文件,然后用nmcli connection up |down 连接名 的方式装载
  2. 另一种就是自己先创建一个ifcfg文件,然后用nmcli connection reload 刷新载入配置文件,然后再装载修改配置文件即可

更详细的nmcli命令以及TEAM设置(比bond更好的功能,只在Centos7中有,6中没有)使用参见另外的博客中所写

注意点:

  1. 多个配置文件针对一个设备的时候,设备DEVICE的内容要写的是一样的,注意它和别名的配置文件的区分:别名的配置文件是让一块网卡同一时间有多个IP地址,DEVICE后面的名字必须是eth0:1这种格式,有主配置别名配置之分;而一块网卡的多个配置文件则是一块网卡有多个不同地址根据环境不同来进行切换装载的,其中DEVICE后面的名字都是一样的比如eth0,没有主配置附加配置之分,全都为主配置。
  2. 多个配置文件针对同一网卡的时候虽然没有主配置附加配置的区别,但经过各种测试(修改文件名字改变ls的排序,修改NAME的顺序,修改文件的a m ctime等)均发现网络服务重启的时候会先默认载入最开始存在的自动生成配置文件。
  3. 但是需要注意,如果删除掉了最开始存在的这个自动生成配置文件(或者说给它改了个名字让它无法识别比如前面加一个bifcfg等等),则经过测试时,重启网络服务后,多个配置文件针对同一个网卡的顺序将会变成ls的排序的那个顺序。

网桥

桥接:把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。
网桥就是这样一个设备,它有若干个网口,并且这些网口是桥接起来的。与网桥相连的主机就能通过交换机的报文转发而互相通信。
例如下图中:
主机A发送的报文被送到交换机S1的eth0口,由于eth0与eth1、 eth2桥接在一起,故而报文被复制到eth1和eth2,并且发送出去,然后被主机B和交换机S2接收到。而S2又会将报文转发给主机C、 D

配置实现网桥

  • 创建软件网桥
    nmcli con add con-name mybr0 type bridge con-name br0 ifname br0
    nmcli con modify mybr0 ipv4.addresses 192.168.0.100/24 ipv4.method manual
    nmcli con add con-name br0-port0 type bridge-slave ifname eth0 master br0
  • 查看配置文件
    cat /etc/sysconfig/network-scripts/ifcfg-br0
    cat /etc/sysconfig/network-scripts/ifcfg-br0-port0
    工具包 yum install bridge-utils
    查看网桥 brctl show
    查看CAM表 brctl showmacs br0
    添加和删除网桥 brctl br0
    添加和删除网桥中网卡 brctl eth0
    注意:NetworkManager只支持以太网接口接口连接到网桥,不支持聚合接口

注意点:

  1. 注意网桥本质就相当于一个两个口的交换机,把这两个口的网络(网段)给链接在一起,它用于隔离冲突域(假如这两个网段内的机器各自都用HUB连接在一起,网桥能隔离这两个网段冲突域),不能隔离广播域。要注意它和路由的区别。
    路由器是为了不同的网段之间能够进行通讯,用于隔离广播域(ARP广播只能在本网段内)
    而网桥它的应用场景是:存在有两个不同的网络,但是这两个不同的网络的IP地址却是同一个网段,想要把这两个不同的网络链接在一起,就可以用网桥。
    但是要注意这样做会让这两个网段内的IP地址的主机数减半,它们本来是两个网段(虽然网段设置的是一样的),各自占用自己网段的所有主机IP,但是合在一起之后,两个网段变成了一个网段,必然能够使用的主机IP数变为原来的一半。要注意不要IP地址冲突。
  2. 将linux配置成网桥(交换机),因为是个二层设备,它本来是不需要地址的,我们为了方便管理会给它配置一个IP地址用于远程管理,添加地址的时候添加到br0逻辑网卡上,注意不要添加到eth0或eth1等网卡上。可用ifconfig eht0 0.0.0.0 的方式删除地址。
  3. brctl创建的br0等等只是逻辑上的一个设备(类似于bond0,team0),创建完之后添加接口上对应的MAC(在这里就直接添加网卡了)即可(复习:二层交换机的CAM表内只有 接口和MAC两项)
  4. 直接用brctl命令的操作无法永久保存设置,因此还是要写在文件里才可以,可以用上面的nmcli命令即可,类似创建team组.
brctl show
brctl addbr br0
brctl addif br0 eth0
brctl addif br0 eth1
brctl showmacs br0
ip link set br0 up

ip link set br0 down
brctl delif br0 eth0
brctl delif br0 eth1
brctl delbr br0

测试网络工具

  • 在命令行下测试网络的连通性
    显示主机名
    hostname
    测试网络连通性
    ping
    显示正确的路由表
    ip route
  • 跟踪路由
    traceroute
    tracepath
    mtr
  • 确定名称服务器使用
    nslookup
    host
    dig