前言
作为一名合格的运维人员,通常要理解网络的常识,知道机器之间怎么去互相发送和接收数据,同时还要具备排查简单的网络故障,要对整个网络架构有一个清晰的认知。读完该篇文章,我相信你一定能理解世界网络的构成!
一. 网络基本常识
A. 交换机
三层交换机,不是说它有个三个层次,而是说它工作在OSI模型的第三层就是网络层,可以通过ARP协议将IP转化成MAC物理地址,也可以通过物理地址表或者路由表去跨VLAN发送数据这已经有了部分路由器的功能,并且可以实现虚拟局域网的功能。
二层交换机,工作在OSI第二层数据传输层,只能基于源MAC地址跟目的MAC地址发送数据,不能转化IP地址,只能在同一个VLAN下发送数据包。简单来说就是主机之间互相通信的媒介。
VLAN:虚拟局域网
一种将局域网(LAN)逻辑上划分为多个子网的技术。通过VLAN,可以在同一个物理网络中创建多个虚拟的、独立的广播域,便于形成网络管理、提高安全性和网络性能
B. 路由器
- 路由器通常用于连接不同的网络,例如两个局域网(LAN)、一个局域网与广域网(WAN)、不同的子网等。
- 路由器做路由选择,即决定数据包应该从哪个路径、通过哪个网关转发到目的地。
- 通常路由器实现NAT(网络地址转换),为以太网设备与公网之间提供地址转换功能
NET技术
- 私网到公网的地址转换:当内部网络(私网)中的设备想要访问外部互联网时,路由器使用NAT将私有IP地址转换为公网IP地址。这使得多个设备可以共享一个公网IP地址访问互联网。
- 公网到私网的地址映射:NAT也会维护一个地址映射表,将来自公网的请求(如外部网站请求)转发到内部网络的相应设备上。这是通过记录会话的端口号和IP地址来完成的。
C. 通用网络架构
D. OSI 7层模型
熟悉这个才能理解数据发送的过程
OSI 7层 | 概述 |
应用(7层) | 软件运行,协议 |
表示(6层) | 加密解压压缩 |
会话(5层) | 会话管理,维护 |
传输(4层) | 传输方式 |
网络(3层) | 路由和寻址 |
数据链路(2层) | 数据分装成帧和mac形式 |
物理(1层) | 数据变成2进程,通过线缆传输 |
E. 常见OSI对应协议
主要记网络层,传输层和应用层的对应协议
OSI | 媒介或者协议 |
物理层 | - Wi-Fi(无线波传输) -光纤(光纤) |
数据链路层 | - PPP (点对点协议) - HDLC (高级数据链路控制) - MAC 地址 (媒体访问控制) |
网络层 | - IP(互联网协议) - ICMP(互联网控制消息协议) - ARP(地址解析协议) - RARP(反向 ARP) |
传输层 | - TCP(传输控制协议) - UDP(用户数据报协议) |
会话层 | - RPC(远程过程调用) - SMB(服务器消息块) |
表示层 | - SSL/TLS(安全套接字层/传输层安全) - JPEG、GIF、PNG(图像格式) |
应用层 | - HTTP(超文本传输协议) - FTP(文件传输协议) - SMTP(简单邮件传输协议) - DNS(域名系统) - POP3、IMAP(邮件协议) - Telnet、SSH(远程访问协议) |
F. 数据发送过程
数据发送的过程就是,首先封包,数据包经过应用表示会话到达传输层加上源端口和目标端口,然后在网络层加上源IP跟目录IP,再接着在数据传输层加上源mac地址跟目标mac地址分装成帧的形式,最后在物理层转化为二进制信号(0和1),通过物理介质传递数据,然后经过网络设备处理根据路由表发送到对应的设备上,最后解包由二进程转化成帧跟MAC地址,找到主机地址范围,再次解包看到Ip找到对应的IP地址设备,再次根据端口解包找到该机器的服务端口
数据的发送是通过多层封装的过程,每一层都会添加特定的信息(如端口号、IP地址、MAC地址等),形成数据包(Packet)、段(Segment)、帧(Frame),并通过物理层的信号发送。
G. 网络理解
1.1 广域网(WAN)
就是世界互联网,广泛采用IPv4和IPv6,用于实现不同地理位置的设备之间的通信
IPV4
- IPv4地址由32位二进制值构成,共计可分配42亿个公网IP地址。然而,随着互联网的扩大,这些地址已经越来越不够用。
- IPv4是一个简单的无连接协议,仅向目标发送数据包,而无需确认是否到达。
- IPv4中使用了私有IP地址来缓解公网IP地址的不足。私有IP地址不能直接用于公网通信,只能在本地网络内部使用。
IPV6
用于替代现行版本IP协议IPv4的下一代IP协议
- IPv6地址长度为128比特,地址空间增大了2的96次方倍,理论上可以为地球上的每一粒沙子分配一个独立的IP地址。
- IPv6具有灵活的IP报文头部格式和简化的报文头部格式,提高了报文处理速度和吞吐量。
- IPv6提高了安全性,加入了身份认证和隐私权等关键特性。
- IPv6支持更多的服务类型,并允许协议继续演变,增加新的功能。
1.2 局域网(LAN)
广域网通常只需要分配一个公网IP给一个单位,然后通过路由器和NAT(网络地址转换)技术,将这个公网IP地址“扩展”给局域网(LAN)内部的多个设备使用,实现局域网划分和设备通信
1.3 虚拟局域网(VLAN)
是一种逻辑上的局域网划分,它不依赖于物理设备的连接,而是通过交换机上的配置,将一个物理网络划分为多个逻辑上的子网络。即使这些设备在物理上连接在同一个交换机上,VLAN可以将它们分成不同的广播域,以实现隔离和流量管理
1.4 区别
特点 | 局域网(LAN) | 虚拟局域网(VLAN) |
---|---|---|
划分方式 | 基于物理设备连接,所有设备通常在同一个网络中。 | 基于逻辑配置,可以将物理上连接在一起的设备划分为多个逻辑网络。 |
广播域 | 局域网中的所有设备都在同一个广播域内。 | 每个VLAN是一个独立的广播域,不同VLAN的设备互相隔离。 |
物理拓扑 | 设备通过交换机或集线器连接在一起,通常在同一物理区域内。 | VLAN可以跨多个物理位置部署,不受物理拓扑的限制。 |
隔离性 | 局域网内的设备直接通信,没有逻辑隔离。 | VLAN提供逻辑隔离,不同VLAN之间的设备不能直接通信,必须通过路由器。 |
应用场景 | 适用于小型网络,如家庭或小型办公室。 | 适用于大型网络、企业网络等,需要根据部门、功能、流量等划分子网的场景。 |
扩展性 | 局域网的扩展通常依赖于物理设备的增多。 | VLAN提供更高的扩展性,可以通过逻辑配置在物理网络上增加多个虚拟子网。 |
1.5 IP地址
用于标识设备在网络中的位置
静态 IP 地址:手动设置
动态 IP 地址:由 DHCP 自动分配
1.6 子网掩码
用于划分网络部分和主机部分,定义子网范围
通常以 CIDR(无类别域间路由)格式表示,例如 /24
(等价255.255.255.0
)
1.7 网络地址(子网的起点)
网络地址=IP 地址&子网掩码
网络地址是一个子网中所有主机的“起点”地址,表示该子网的标识,用于区分不同的子网
1.8 广播地址(子网的终点)
广播地址=IP 地址所在子网范围的最大地址
广播地址是一个子网中用于发送消息给该子网所有主机的特殊地址
1.9 主机地址范围
主机地址是一个范围不能被称为一个确定的地址
主机地址范围为子网的网络地址+1 到广播地址-1
2.0 MAC地址(物理地址)
由网络设备制造商在生产时烧录在网卡(Network Interface Card,NIC)上的,用于在网络中唯一标识一个网络设备。MAC地址在世界范围内是唯一的,因此,它常被用于网络层以下的通信过程中,特别是在数据链路层,以确保数据包能够准确无误地发送到目标设备。
MAC地址的长度为48位(6个字节),通常被表示为12个十六进制数字,每两个数字之间用冒号或连字符分隔。例如,一个典型的MAC地址可能呈现为“00:1A:2B:3C:4D:5E”或“001A-2B3C-4D5E”的形式。
2.1 例子
IP地址,子网掩码,网络地址,广播地址,主机地址,MAC地址,结合举个例子来说
例子 1: 两个相同主机地址范围的IP地址
主机A的IP地址为
192.168.1.10
,子网掩码为255.255.255.0
主机B的IP地址为
192.168.1.20
,子网掩码为255.255.255.0
主机A
IP地址: 192.168.1.10 -> 二进制: 11000000.10101000.00000001.00001010
子网掩码: 255.255.255.0 -> 二进制: 11111111.11111111.11111111.00000000
做(&)预算,得到网络地址
网络地址: 192.168.1.0 -> 二进制: 11000000.10101000.00000001.00000000
广播地址:IP地址最大范围,就是
192.168.1.255
主机地址范围:
192.168.1.1
到192.168.1.254
主机B
IP地址: 192.168.1.20 -> 二进制: 11000000.10101000.00000001.00010100
子网掩码: 255.255.255.0 -> 二进制: 11111111.11111111.11111111.00000000
网络地址: 192.168.1.0 -> 二进制: 11000000.10101000.00000001.00000000
广播地址:IP地址最大范围,就是
192.168.1.255
主机地址范围:
192.168.1.1
到192.168.1.254
两台主机的网络地址均为
192.168.1.0
,即处于同一子网,主机地址范围相同,主机A通过ARP协议向网络发送请求,获取主机B的MAC地址,交换机通过主机B的MAC地址将数据包转发给主机B,主机B收到数据并解析————————————————————————————————————————
例子 2:
主机C的IP地址为
192.168.1.10
,子网掩码为255.255.255.0
主机D的IP地址为
192.168.2.10
,子网掩码为255.255.255.0
主机C
IP地址: 192.168.1.10 -> 二进制: 11000000.10101000.00000001.00001010
子网掩码: 255.255.255.0 -> 二进制: 11111111.11111111.11111111.00000000
网络地址: 192.168.1.0 -> 二进制: 11000000.10101000.00000001.00000000
广播地址:IP地址最大范围,就是
192.168.1.255
主机地址范围:
192.168.1.1
到192.168.1.254
主机D
IP地址: 192.168.2.10 -> 二进制: 11000000.10101000.00000010.00001010
子网掩码: 255.255.255.0 -> 二进制: 11111111.11111111.11111111.00000000
网络地址: 192.168.2.0 -> 二进制: 11000000.10101000.00000010.00000000
广播地址:IP地址最大范围,就是
192.168.2.255
主机地址范围:
192.168.2.1
到192.168.2.254
两台主机的网络地址不同,分别为
192.168.1.0
和192.168.2.0
,即不在同一子网,主机C发现主机D在不同的子网,数据首先被发送到网关(如路由器),由路由器判断目标网络,并转发到目标子网如果路由表中没有目标子网的路由,默认情况下会显示网络不通(通常是
Destination Unreachable
错误)如果路由表中有目标子网的路由,
目标地址不在本地网络
找到一条规则如下
Destination Subnet Mask Next Hop Interface 192.168.2.10 255.255.255.0 192.168.3.1 eth1 数据包将被发送到对应的下一跳192.168.3.1(即下一个路由器或网关),下一跳路由器再次检查其路由表,根据目标地址选择下一跳,继续转发数据包,这个过程会在多台路由器之间重复
目标地址在本地网络
当路由器匹配目标IP地址时,找到一条规则如下
Destination Subnet Mask Next Hop Interface 192.168.2.10 255.255.255.0 eth0 本地子网范围: 如果路由器的某个接口上配置了IP地址,例如
192.168.2.254/24
,它的子网范围是192.168.2.0
到192.168.2.255
,通过ARP(地址解析协议)获取目标主机的MAC地址,直接转发数据包更具体一点,路由器会检查其ARP缓存表,以查看是否有与目标IP地址对应的MAC地址,如果ARP缓存表中没有与目标IP地址对应的MAC地址,路由器会发送一个ARP请求到本地网络,以查询目标IP地址的MAC地址,本地网络中的其他设备(如交换机或其他主机)会收到这个ARP请求,并检查自己的IP地址是否与请求中的目标IP地址匹配,如果匹配成功,该设备会回复一个ARP响应给路由器,其中包含目标IP地址对应的MAC地址,路由器收到ARP响应后,会将这个MAC地址添加到其ARP缓存表中,以便将来快速查找,一旦路由器获得了目标IP地址对应的MAC地址,它就会重新封装数据包,将源MAC地址设置为路由器自身的MAC地址,将目标MAC地址设置为查询到的MAC地址,然后,路由器会将这个封装好的数据包发送到本地网络中的交换机或其他适当的网络接口,以便最终到达目标主机
路由表中的接口字段(如
eth0
)指明数据包从哪个网络接口发送出去
2.2 默认网关
定义网络设备访问其他网络(如互联网)的出口
通常是连接到外部网络的路由器的 IP 地址
2.3 DNS服务器
- 域名(Domain Name):如
www.google.com
。- IP地址(IP Address):域名对应的IPv4或IPv6地址。
- DNS服务器:存储域名和IP地址的对应关系。
- 递归服务器:负责查询完整路径。
- 权威服务器:提供具体域的解析结果。
- DNS缓存:客户端或服务器保存的临时解析结果,用于加速后续查询
2.4 网络接口
一般是指物理的设备接口
主要功能包括:
- 数据传输:网络接口负责将数据从计算机发送到网络中或从网络中接收数据。
- 网络协议处理:处理各种网络协议(如TCP/IP、UDP等),确保数据能够按照协议规定的方式进行传输和处理。
- 网络地址管理:管理计算机在网络中的地址分配和管理,如IP地址、子网掩码、默认网关等。
- 流量控制:根据网络拥塞程度和数据传输需求,采取相应的策略来控制数据的发送和接收速度。
- 错误检测和纠正:通过校验和和纠错码等技术,检测和纠正数据传输过程中可能引入的错误。
2.5 路由表
- 记录了所有可达的局域网地址和路径
- 每条记录指示:
- 目标网络地址(Destination):目标子网或IP地址。
- 子网掩码(Netmask):目标网络的范围。
- 下一跳地址(Gateway/Next Hop):数据包转发的下一个路由器地址。
- 接口(Interface):发送数据包的本地网络接口。
- 距离/优先级(Metric):用于选择最佳路径。
- 路由表可以是手动配置的(静态路由)或动态生成的(动态路由协议,如 OSPF、BGP)。
- 当设备发送数据时,会查阅路由表,决定数据包的下一步去向。
- 如果找不到具体的匹配路径,则使用默认路由(Default Gateway)
I. 网络如何工作和相互联系?
广域网就是世界互联网,互联网的所有公网IP理论上是可以互相连接的,公网IP是以IPV4呈现,IPv4地址的地址空间是 32位,因此可以表示 2^32个IP地址,虽有这么多公网IP地址,但是世界人口那么多,IPV4还是不够用,所以就把这些IP根据组织进行划分,每个组织分几个或者分一个大概的范围,这就是广域网中的子网划分,局域网其实本质上是描述比较小范围的网络,局域网与广域网实质上是不相通的,但是局域网想要实现与互联网进行上网连接,就需要局域网中的路由器有一个公网的IP,然后局域网内每次与互联网进行连接的时候,数据包会被路由器拦截,并动态的把私网IP映射成路由器本身的公网IP进行上网,这个就是路由器中的NET技术,局域网中还能继续进行划分网络,第一种是子网划分主要操作在网络层,基于IP地址跟子网掩码来确定主机地址范围,依赖于路由器的配置和每台设备的IP地址与子网掩码设置,在同一个子网内,设备之间直接通过MAC地址进行通信,如果是不同的子网,设备会将数据包发送给配置好的默认网关(通常是路由器的IP地址),路由器对数据包进行IP封装加上一个目标IP地址通常是另一个子网的IP或者是下一跳路由器的IP,IP解封主要就是当机器确认就是发送自己的数据包时候就会把源IP目标IP都去了把数据传递到传输层,第二种是虚拟局域网(VLAN)技术,在数据链路层进行的逻辑划分,这个依赖于支持VLAN的管理型交换机,每个VLAN都有自己独立的子网,例如:VLAN1:
192.168.10.0/24,
VLAN 2:192.168.20.0/24,用来隔离广播域,所以同一个虚拟局域网下,交换机
可以根据MAC地址来转发数据帧实现互相通信,而不同的虚拟局域网,由于交换机本身仅在同一VLAN内进行MAC地址转发,主机将数据包发送到默认网关(路由器或三层交换机),路由器将数据包从一个VLAN转发到另一个VLAN,数据包到达目标VLAN后,交换机通过目标MAC地址将数据帧转发给目标主机
二. 常见网络协议与原理
A. TCP
1.1 三次握手
- 第一次握手:客户端发送一个
SYN
(同步)标志位的报文,表示请求建立连接。- 第二次握手:服务器收到请求后,发送
SYN+ACK
报文,表示确认收到并同意建立连接。- 第三次握手:客户端收到确认后,发送
ACK
报文,表示连接建立完成,通信开始
1.2 四次挥手
- 第一次挥手:发起方(通常是客户端)发送
FIN
报文,请求断开连接。- 第二次挥手:接收方发送
ACK
报文,表示收到请求,但还未完全准备好断开。- 第三次挥手:接收方准备断开时,发送
FIN
报文。- 第四次挥手:发起方发送
ACK
报文,表示收到确认,连接断开。
1.3 11种状态(进阶)
对一般人来说正常建立网络连接后我一般都不怎么管后续了,但是如果出了网络问题,主管就是要你完全排查出原因,但是作为一名运维,我们也不是网工,但是现实就是会出现TCP故障,这时候就一定要结合抓包工具和理解这11种状态去排查
1.3.1 tcp握手的5种状态
CLOSED—> LSTEN—> SYN_SENT—> SYN_RCVD—> ESTABLISHED
客户端:
CLOSED
→SYN-SENT
→ESTABLISHED
服务器:
LISTEN
→SYN-RECEIVED
→ESTABLISHED
1. CLOSED (关闭状态)
状态含义:连接的初始状态,表示当前未建立连接。
触发动作:
客户端主动请求建立连接,发送
SYN
报文后,进入下一个状态。2. LISTEN (监听状态)
状态含义:服务器在等待接收连接请求的状态。
触发动作:
服务器在监听某个端口时处于此状态,等待客户端的
SYN
报文。收到客户端的
SYN
后,服务器会向客户端发送SYN+ACK
并进入下一状态。3. SYN-SENT (同步已发送)
状态含义:客户端发送
SYN
报文后,等待服务器的SYN+ACK
响应。触发动作:
客户端发送
SYN
请求,表示想要建立连接,进入此状态。如果收到服务器的
SYN+ACK
,客户端会发送ACK
确认,并进入下一个状态。4. SYN-RECEIVED (同步已接收)
状态含义:服务器收到客户端的
SYN
报文,回复SYN+ACK
后,等待客户端的确认ACK
报文。触发动作:
如果服务器在
LISTEN
状态下收到SYN
,会发送SYN+ACK
并进入此状态。当收到客户端的
ACK
报文后,进入ESTABLISHED
状态。5. ESTABLISHED (连接已建立)
状态含义:三次握手完成,连接成功建立,双方可以开始传输数据。
触发动作:
客户端和服务器完成
ACK
确认后,进入此状态。这是 TCP 的正常通信状态。
1.3.2 4次挥手的6个状态
—>CLOSE_WAIT—>FIN_WAIT1—>FIN_WAIT2—>TIME_WAIT1,LAST_ACK,CLOSEING
主动关闭方:
ESTABLISHED
→FIN-WAIT-1
→FIN-WAIT-2
→TIME-WAIT
→CLOSED
被动关闭方:
ESTABLISHED
→CLOSE-WAIT
→LAST-ACK
→CLOSED
1. ESTABLISHED (连接已建立)
状态含义:连接正在传输数据,初始状态。
触发动作:
主动关闭方发送
FIN
报文,请求断开连接。2. FIN-WAIT-1 (等待对方的 ACK)
状态含义:主动关闭方发送
FIN
报文后,进入FIN-WAIT-1
状态,等待对方返回ACK
。触发动作:
主动关闭方发送
FIN
,表示请求关闭连接,进入此状态。如果对方返回
ACK
,进入FIN-WAIT-2
状态。如果对方直接发送
FIN
,则进入CLOSING
状态。3. FIN-WAIT-2 (等待对方的 FIN)
状态含义:主动关闭方收到对方的
ACK
报文后,进入FIN-WAIT-2
状态,等待对方发送FIN
。触发动作:
被动关闭方可能还有数据未发送完毕,因此会延迟发送
FIN
。收到
FIN
后,进入TIME-WAIT
状态。4. CLOSE-WAIT (被动关闭方等待关闭)
状态含义:被动关闭方收到主动关闭方的
FIN
报文后,返回ACK
,进入CLOSE-WAIT
状态。触发动作:
被动方可能需要处理未完成的任务(如释放资源),因此停留在此状态。
完成处理后,发送
FIN
报文,进入LAST-ACK
状态。5. LAST-ACK (被动关闭方等待最终确认)
状态含义:被动关闭方发送
FIN
报文后,等待主动关闭方的ACK
报文。触发动作:
主动关闭方收到
FIN
报文后,发送ACK
确认,进入TIME-WAIT
状态。被动关闭方收到
ACK
后,连接彻底关闭,进入CLOSED
状态。6. TIME-WAIT (时间等待)
状态含义:主动关闭方在发送最后一个
ACK
后,进入TIME-WAIT
状态,等待一段时间,确保被动关闭方收到ACK
。触发动作:
等待的时间通常为两倍的最大段生命周期(一般为2分钟)。
确保旧连接的数据不会影响后续新连接,时间到后进入
CLOSED
状态。
B. UDP
UDP 是一种无连接的、面向数据报的协议:
- 特点:
- 数据传输无需建立连接。
- 不保证数据可靠性(无重传、无序交付)。
- 速度快、开销小,适用于实时应用(如视频通话、DNS查询)。
- 常见应用:DNS、DHCP、VoIP、流媒体
C. TCP对比UDP的区别
特点 | UDP | TCP |
连接方式 | 无连接 | 面向连接 |
可靠性 | 不可靠传输 | 可靠传输 |
头部开销 | 较小 | 较大 |
数据传输方式 | 数据报传输 | 字节流传输 |
是否顺序 | 无序 | 有序 |
适用场景 | 实时性要求高、容忍少量丢失 | 数据完整性和顺序性要求高 |
D. DNS解析流程
查询发起(查询本地DNS缓存) |
递归查询(查询根域名服务器,获取顶级域名) |
顶级域名服务器查询(向顶级域名发起查询请求获取次级域名) |
权限域名服务器查询(再发查询请求,获取主机名对应的IP地址) |
返回结果(返回结果给本地的DNS服务器) |
结果缓存(本地服务器缓存,避免重复查询) |
访问域名流程
当访问
www.jbll996.cn
进行域名解析时,步骤如下
检查本地缓存:
查看本地DNS缓存,或检查hosts
文件是否已保存该域名与IP地址的映射。请求本地DNS服务器:
如果本地缓存中无结果,则请求本地DNS服务器。递归查询:
本地DNS服务器请求根DNS服务器,逐步找到顶级域名服务器和权威DNS服务器。获取权威服务器的结果:
从权威DNS服务器中获取完整的域名解析结果。返回结果到本地DNS服务器:
本地DNS服务器缓存结果,并返回给用户。完成解析:
用户端获取解析结果(IP地址),用于接下来的通信。通信过程:
TCP三次握手,四次挥手
E. ARP
- ARP协议: IP --> MAC地址
- ARP地址解析协议: ip地址转换为网卡物理地址(MAC地址)
- ARP协议是3层协议,工作在2层
- 解析流程简单: 一问(广播)一答(单播)
ARP欺骗
- 工作原理:
- 目标设备 IP 地址解析
- 欺骗成功:窃取用户信息、篡改网络流量等
- 攻击者欺骗:ARP 响应包(虚假的 MAC 地址和目标设备的 IP 地址)
- 预防
- 动创建一个静态 ARP 表,将设备的 IP 地址与 MAC 地址进行绑定
- 使用 VPN 连接,可以在客户端和服务器之间建立加密隧道
- ARP 欺骗检测:通过一些工具和技术来检测
F. ICMP
ICMP 用于在网络层传递控制信息和错误消息,用于 ping
命令测试网络连通性,主要用来监控网络状态、传递网络错误信息
G. DHCP
DHCP自动分配IP地址及相关网络配置信息(网关、子网掩码等):
- Discover(发现):客户端广播请求IP地址。
- Offer(提供):DHCP服务器提供一个可用IP地址。
- Request(请求):客户端确认使用该IP地址,向服务器发送请求。
- ACK(确认):服务器确认分配并记录该IP地址,完成配置
H. 局域网上网原理
dns 解析后与主机电脑的路由表进行对比,—>看是否有同一网段的如果有—>继续找交换机——>交换机发广播—>ARP解析
如果没在路由表找到IP—>0.0.0.0的默认网关—>路由器(实际上,局域网的源IP由路由器的NAT功能伪装为公IP同时记录了源IP,网络层 源IP标记+公IP+目标IP+数据包)—>目标IP与路由器路由表的IP再次进行对比——>如果也没找到就找路由器的网关—>下个路由器—>重复在各个路由器路由表中查找目标IP—>数据包到达目标IP的路由器
目标收到数据后,将原来的源IP和目标IP调换位置但是元IP是局域网IP就找不到发送人,经过NAT之后,服务器通过自身连接的路由器公IP找到源Ip连接的路由器——>这时候路由器就会把公IP改回局域网的源IP这时候是目标IP——>通过目标IP找到发送人交换机的接口——>最后交换机ARP广播谁是目标IP的主机——>数据就回来了
I. 虚拟机上网原理
目标IP与虚拟机路由表进行对比——>vmnet8网卡具有nat功能——>虚拟机网关,把虚拟机IP伪装成宿主机的IP——>再根据window的路由表进行转换,转发——>window的网关,再将数据伪装成公IP——>在网络中进行转发——>服务器,IP对换——>网络路由器——>目标IP应的路由器再将公网IP转成宿主机IP——>宿主机所在的交换机——>宿主机——>vmnet8网卡,改回虚拟机IP——>虚拟路由器,交换机——>对应的节点
三. linux中的网络应用
A. 网卡配置
1.1 centos网卡命名的更改
vim /boot/grub2/grub.cfg 100行
114行
vim /etc/sysconfig/network-scripts/ifcfg-ens33
最后:mv ifcfg-ens33 ifcfg-eth0
ip a 查看
1.2 UBT 网卡命名的更改
sed -i '/linux.*vmlinuz/s#$#biosdevname=0 net.ifnames=0#g' /boot/grub/grub.cfg
网卡配置文件sed -i 's#ens33#eth0#g' /etc/netplan/00-installer-config.yaml
重启
1.3 网卡配置文件解释
#网络类型以太网
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
#网卡固定还是自动获取IP dhcp自动设置 none或static手动
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
#网卡名字
NAME=eth0
#统一设别符
UUID=fe674949-f25e-4890-bd43-d55babef3a49
#设备名字
DEVICE=eth0
#网卡是否自动运行
ONBOOT=yes
#IP地址
IPADDR=10.0.0.203
#子网掩码 控制局域网中最多有几台机器
PREFIX=24
#网关 虚拟机创建的虚拟路由器地址
GATEWAY=10.0.0.2
#主配置dns地址
DNS1=223.5.5.5
#备DNS
DNS2=223.6.6.6
IPV6_PRIVACY=no
B. DNS配置
配置DNS转发,主要就是修改linux的hosts文件,基本上每台服务器初始化都是需要配置的,因记域名肯定比记ip方便很多
vim /etc/hosts 最后一行 ip + 跳转的域名 + ...
更改后ping baidu域名就会指向10.0.0.203的ip
C. 网络排查流程
1.1 通用的排查流程(重要)
1. ping baidu.com --检查是否能链接外网
2. 检查防火墙,selinux,安全组 systemctl status firewalled ,getenforce等是否开启
3. 检查端口,如果是远程连接无法连接,检查一下22端口,telnet ip 22
1.2 常见网络问题排查步骤
问题1:无法访问目标主机
使用
ping IP
确认目标主机是否达到。使用
route -n
查看路由表,确保有正确的网关配置。使用
ss -lntup | grep 端口号
确认服务已在目标端口监听。利用
nc -z 目标IP 端口
测试目标端口估计性。问题2:域名无法解析
使用ipconfig /displaydns(window cmd) 显示域名。
使用ipconfig /flushdns(window cmd) 清理DNS缓存。
使用
dig <域名>
或nslookup <域名>
查询域名解析是否正常。使用
dig +trace <域名>
检查解析流程,排查DNS服务器问题。问题3:网络速度慢
使用iftop -nNpB -i eth0检查实时流量和连接。(
-n
不解析IP为域名,-N
显示端口号,-B
以字节为单位显示流量)利用traceroute -nI IP 检查数据包路径是否有延迟或丢包。(
-n
不解析IP为域名,-I
使用ICMP协议)检查是否有异常占用流量的连接(如
ss -ant
)。问题4:ARP缓存异常
使用
arp -n
检查ARP缓存。使用
arp -d
清理异常存储记录。ping重新尝试连接目标IP。
问题5:端口被占用
使用
netstat -tuln
或lsof -i :端口
查看占用的进程。kill -9 <PID>关闭占用进程或调整服务端口配置。
E. 远程连接
1.1 ssh
ssh ip --默认22端口,root用户
ssh 用户名@ip --默认22端口
ssh -p端口 用户名@ip
1.2 window发送文件
控制台打开powershell
scp 本地文件 用户名@IP:路径
F. 检查网站输出是否有问题
wget
--spider
参数告诉wget
以“蜘蛛”模式运行,这意味着它不会下载文件,而是检查链接是否有效。如果链接有效,wget
会返回 0(成功)的退出状态码;如果链接无效,它会返回非 0 的退出状态码。
G. 查看域名信息
[root@hadoop01 ~]# whois baidu.com
#域名,这里是
BAIDU.COM
Domain Name: BAIDU.COM#域名在注册局的唯一标识符,这里是
11181110_DOMAIN_COM-VRSN
Registry Domain ID: 11181110_DOMAIN_COM-VRSN#注册商的 WHOIS 服务器地址
Registrar WHOIS Server: whois.markmonitor.com#注册商的官方网站,这里是
http://www.markmonitor.com
Registrar URL: http://www.markmonitor.com#域名信息最后更新的日期和时间,这里是
2023-11-30T06:00:19Z
Updated Date: 2023-11-30T06:00:19Z#域名创建的日期和时间,这里是
1999-10-11T11:05:17Z
,
Creation Date: 1999-10-11T11:05:17Z#域名注册的过期日期和时间,这里是
2026-10-11T11:05:17Z
,表示该域名在 2026 年 10 月 11 日之前都是有效的
Registry Expiry Date: 2026-10-11T11:05:17Z#注册商的名称,这里是
MarkMonitor Inc
Registrar: MarkMonitor Inc.#注册商在 IANA(互联网号码分配机构)的唯一标识符,这里是
292
Registrar IANA ID: 292
四. 防火墙(进阶)
A. 分类
硬件:深信服,奇安信,绿盟...
软件:iptables(工作4层)
云防火墙:阿里云(安全组),nat网关,waf应用防火墙...
B. 结构
1.1 结构描述
链名称 | 处理阶段 | 表类型 | 主要作用 |
PREROUTING | 数据包刚到达防火墙时 | raw 表 | 决定是否绕过连接跟踪 |
mangle 表 | 修改数据包的 QoS 等特性 | ||
nat 表 | 地址转换(DNAT) | ||
INPUT | 数据包进入本机时 | filter 表 | 决定是否允许数据包进入本机 |
FORWARD | 数据包转发时 | filter 表 | 决定是否允许数据包转发(适用于网关、防火墙设备) |
OUTPUT | 数据包由本机发送时 | raw 表 / filter 表 | 控制本机发出的流量 / 决定是否绕过连接跟踪 |
nat 表 | 源地址转换(SNAT) | ||
POSTROUTING | 数据包离开防火墙前 | mangle 表 | 修改数据包特性 |
nat 表 | 源地址转换(SNAT) |
4表
1. raw
表
- 功能:用于数据包的预处理。主要用来设置数据包的跟踪状态(connection tracking)。
- 应用场景:
- 禁用连接跟踪。
- 提高性能时常用。
2. mangle
表
- 功能:用于修改数据包的内容(如标记数据包或改变服务质量字段)。
- 应用场景:
- 修改数据包头部信息(如 TTL、QoS)。
- 设置特殊路由策略。
3. nat
表
- 功能:负责网络地址转换(NAT),包括源地址转换(SNAT)和目标地址转换(DNAT)。
- 应用场景:
- 内网设备通过外网 IP 上网(源地址转换)。
- 访问公网服务器时,将请求转发到内部服务器(目标地址转换)。
4. filter
表
- 功能:负责数据包的过滤,决定数据包是否被允许通过(即核心防火墙功能)。
- 应用场景:
- 允许或拒绝某些 IP 地址、端口的访问。
- 防止特定类型的网络攻击。
5链
1. PREROUTING 链
- 功能:在数据包进入防火墙时,处理最先到达的数据包。
- 触发时间:数据包刚到达本机。
- 作用范围:
- DNAT(目标地址转换)。
- 修改数据包的路由。
2. INPUT 链
- 功能:只处理目标是本机的数据包,决定是否允许数据包进入本机。
- 触发时间:数据包被路由到本机后。
- 常见动作:
- ACCEPT:允许数据包通过,进入本机的应用程序或服务。
- DROP:丢弃数据包,静默处理,不通知发送方(隐匿服务器存在)。
- REJECT:拒绝数据包,并发送错误消息(如 ICMP "Destination Unreachable"),通知发送方无法到达。
3. FORWARD 链
- 功能:处理本机并非目的地的数据包,但需要通过本机转发到其他网络(如路由器或网关设备上的转发流量)
- 触发时间:数据包通过本机转发到其他网络时。
- 常见动作:
- ACCEPT:允许数据包转发到目标网络。
- DROP:丢弃数据包,禁止通过。
4. OUTPUT 链
- 功能:处理从本机发送出去的数据包,决定是否允许其流向外部网络
- 触发时间:数据包从本机发送到外部网络前。
- 作用范围:
- ACCEPT:允许数据包发送出去。
- DROP:丢弃数据包,禁止发送。
- REJECT:拒绝数据包,并通知本机程序发送失败
5. POSTROUTING 链
- 功能:处理在数据包离开防火墙时的修改行为。
- 触发时间:数据包即将从本机发送出去时。
- 作用范围:
- SNAT(源地址转换)。
- 修改数据包的目的地或源地址。
C. 相关命令
理解了4表5链之后其实我们是可以用命令iptables去看到这些信息的,接下来我们先看iptables有哪些选项
-L | 显示表中所有的规则 | ||
-n | 不把端口和IP解释成名字 | ||
-t | 指定表(4表默认filter表) | ||
追加 | -A | 加规则到指定链的末尾 | |
-I | 加在链的第一条 | ||
-j | REJECT | 有拒绝提示 | |
DROP | 把数据丢掉 不会返回信息给用户 | ||
ACCEPT | 允许 | ||
SNAT | 源地址转换 | ||
DNAT | 目的地址转换 | ||
-p | 指定协议(tcp/udp/icmp/all) | --dport | 目标端口 |
--sport | 源端口 | ||
-m | multiport | 用来指定多端口的 | |
指定IP | -s | 源ip,或者网段 | |
-d | 目标ip | ||
删除 | -D | 根据序号删除 | |
-F | 清空所有规则 | ||
-X | 删除所有用户自定义的链 | ||
-Z | 清空所有链的计数器,即将所有链中的包和字节计数器归零 |
1.1 查看指定表规则
iptables -t filter -nL --line-number 查看规则并加上序号
iptables -t filter -D INPUT 1 删除指定序号的规则
1.2 禁止端口的数据写入
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP 禁止tcp连接22端口
iptables -t filter -A INPUT -p tcp -m multiport --dport 80,443 -j DROP 禁止tcp连接80跟443端口
1.3 拒绝ip
iptable -I INPUT -s 10.0.0.7 -j DROP 拒绝ip10.0.0.7的连接
1.4 拒绝IP+端口
iptable -I INPUT -s 10.0.0.0/24 -p tcp --dport 8888 -j DROP 禁止来自 IP 段
10.0.0.0/24
对 TCP 8888 端口的访问
1.5 禁止别的机器ping命令
iptables -I INPUT -p icmp -j DROP 禁止所有 ICMP 请求(包括 Ping)
vim /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_all=1
sysctl -p
修改内核参数,完全关闭系统对 Ping 的响应
1.6 永久生效规则
iptables-save > /etc/sysconfig/iptables 将当前配置保存到
/etc/sysconfig/iptables
文件iptables-restore < /etc/sysconfig/iptables 从文件恢复规则
1.7 流量限制
iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
限制每分钟最多允许 10 个对 TCP 80 端口(HTTP 服务)的数据包,突发情况下可以立即允许 5 个数据包,阻止简单的拒绝服务攻击(DoS)
1.8 端口映射
iptables -t nat -A PREROUTING -p tcp --dport 9999 -j DNAT --to-destination 10.0.0.61:80
将外部访问主机的9999
端口流量转发到内网服务器10.0.0.61
的80
端口,假设我们服务器公网ip是192.168.3.110并有9999端口,但是另一台服务器没有公网ip只有一个内网的ip,那么通过这个命令就可以实现别人访问我们内网机器
1.9 共享上网
web01充当网关
web01的内网网卡ens34,ip:172.16.1.7,外网网卡ens33,ip:10.0.0.611. 启用内核转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
2. 配置 NAT 转发规则iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o ens33 -j MASQUERADE
解释
-s 172.16.1.0/24
:匹配来自内网172.16.1.0/24
子网的流量
-o ens33
:指向外网网卡(ens33
)
MASQUERADE
:将内网设备的源 IP 地址伪装为web01
的外网 IP3. 允许数据转发
iptables -A FORWARD -i ens34 -o ens33 -j ACCEPT
iptables -A FORWARD -i ens33 -o ens34 -m state --state RELATED,ESTABLISHED -j ACCEPT
解释第一条规则允许从内网网卡(
ens34
)到外网网卡(ens33
)的所有流量第二条规则允许外网返回的响应流量
4. 确保规则在重启后依然生效
iptables-save > /etc/sysconfig/iptables
——————————————————————————————————————两台其他服务器(只有一张内网网卡ens33)
server1
IP 地址:
172.16.1.100
子网掩码:
255.255.255.0
(即/24
)网关:
172.16.1.7
(NAT 网关的内网 IP)DNS:
223.5.5.5
(或其他公共 DNS)server2
IP 地址:
172.16.1.101
子网掩码:
255.255.255.0
(即/24
)网关:
172.16.1.7
DNS:
223.5.5.5
1. 配置方法
在
server1
和server2
的/etc/sysconfig/network-scripts/ifcfg-ens33
文件中配置网关为web01的网关
2. 修改完成后重启网络服务
systemctl restart network
3. 测试网络连通性ping www.baidu.com # 检查能否访问外网
以上就是iptables的常见命令,一般情况下来说,运维人员很少去操作iptables的操作,如果有更深入更针对的需求再临时查一下,介绍这部分只是为了让运维人员更加去理解防火墙是个什么东西,也能知道它的灵活性
抓包工具使用
A.Wiershark
下载地址:https://www.wireshark.org/download.html
下载完成后点开长这样
以虚拟机的网卡为主,我们点进去
1.1 抓包模拟三次握手
wireshark过滤 80端口的数据包 tcp.port == 80
curl www.xxxxxx.cn
我访问的网址是一个外网的地址为了该网址被攻击,加下来的截图我会打上马赛克,很明显我们访问完后装包工具立马就抓到了80端口上的tcp三次握手,因为要建立连接,如果你点进去分析你会发现ack确实在第二层等于seq加上1了
wiershark抓包流程就是这样,你想要抓哪个端口哪个ip什么协议在电脑的哪个网卡上,过滤一下,查看一下这些包是否正常,分析一下,我当时学的就是这么多,如果有想要再深入抓包工具的功能的再去查阅相关资料
B.tcpdump
安装命令:yum/apt -y install tcpdump
基础语法:tcpdump [选项] [过滤条件]
1.1 常用选项
选项 | 含义 |
-i | 指定网卡接口(例如 eth0 , ens33 )。默认抓取所有活动网卡上的数据 |
-nn | 禁用主机名和端口号解析,直接显示 IP 地址和端口号(提高速度) |
-X | 同时显示数据包的十六进制和 ASCII 格式内容 |
-xx | 仅显示数据包的十六进制格式内容 |
-v , -vv , -vvv | 提供详细信息级别(从基础到最详细) |
-c <number> | 捕获指定数量的数据包后退出。例如:-c 10 表示捕获 10 个数据包后停止 |
-s <snaplen> | 设置捕获数据包的最大长度(默认 65535 字节),-s 0 表示捕获完整数据包 |
-w <file> | 将捕获的数据包保存到文件,供以后分析 |
-r <file> | 从文件中读取保存的数据包,进行回放分析 |
-A | 以 ASCII 格式显示数据包内容,适合查看 HTTP、DNS 等协议的内容 |
-q | 简化输出,仅显示基本信息 |
1.2 按协议过滤
tcpdump -i ens33 tcp port 80 捕获特定80的 TCP 流量
tcpdump -i ens33 icmp 捕获 ICMP 流量(如 ping 包)
1.3 按主机 IP 地址过滤
tcpdump -i ens33 dst host 192.168.1.100 捕获发往特定主机的数据包
tcpdump -i ens33 src host 192.168.1.100 捕获来自特定主机的数据包
1.4 按网络范围过滤
tcpdump -i ens33 net 192.168.1.0/24
1.5 保存抓包数据
tcpdump -i eth0 tcp port 80 -w capture.pcap
1.6 tcpdump与wiershark联动
tcpdump抓包保存到windows并在wireshark打开
前提:打开nginx
实现:Linux :tcpdump -nn -vv -i eth0 port 80 or port 53 -w ngx.pcap
window cmd : curl 10.0.0.203
最后Linux:sz ngx.pcap
当我们访问nginx时候,tcpdump很明显抓到tcp有三次握手跟四次挥手的包
总结
本篇文章几乎涵盖了运维最容易遇到的网络问题以及各种操作,基本上就是我自己本人所会的,本文的框架和知识点来自于个人的思维导图以及语雀的知识库如有转载请说明出处,如果想要思维导图的可以去运维基础一的最后那里获得,里面也有网络篇的相关知识,下一篇是shell脚本篇同样是前期运维相当重要的内容。希望喜欢的小伙伴们点个关注收藏支持一下!