Linux基础-12-网络协议+管理
网络
资源共享的功能和优点
数据和应用程序
资源
网络存储
备份设备
常见的网络物理组件
网络应用程序
- Web 浏览器(Chrome、IE、Firefox等)
- 即时消息(QQ、微信、钉钉等)
- 电子邮件(Outlook、foxmail 等)
- 协作(视频会议、VNC、Netmeeting、WebEx 等)
- web网络服务(apache,nginx,IIS)
- 文件网络服务(ftp ,nfs,samba)
- 数据库服务( MySQL,MariaDB,MongoDB)
- 中间件服务(Tomcat,JBoss)
- 安全服务(Netfilter)
用户应用程序对网络的影响
批处理应用程序
- FTP、TFTP、库存更新
- 无需直接人工交互
- 带宽很重要,但并非关键性因素
交互式应用程序
- 库存查询、数据库更新
- 人机交互
- 因为用户需等待响应,所以响应时间很重要, 但并非关键性因素,除非要等待很长时间
实时应用程序
- VoIP、视频
- 人与人的交互
- 端到端的延时至关重要
网络特征
- 速度
- 成本
- 安全性
- 可用性
- 可扩展性
- 可靠性
- 拓扑
带宽
物理拓扑
总线拓扑
所有设备均可接收信号
星型拓扑
通过中心点传输
单一故障点
扩展星型拓扑
比星型拓扑的复原能力更强
环拓扑
信号绕环传输
单一故障点
双环拓扑
信号沿相反方向传输
比单环的复原能力更强
全网状拓扑
容错能力强
实施成本高
部分网状拓扑
在容错能力与成本之间寻求平衡
逻辑拓扑
逻辑拓扑描述了信息在网络中流动的方式
OSI七层模型
降低复杂性
标准化接口
简化模块化设计
确保技术的互操作性
加快发展速度
简化教学
物理层
数据链路层
网络层
传输层
会话层
表示层
应用层
数据封装
数据解封
对等通信
PDU
- PDU: Protocol Data Unit,协议数据单元是指对等层次之间传递的数据单位
- 物理层的 PDU是数据位 bit
- 数据链路层的 PDU是数据帧 frame
- 网络层的PDU是数据包 packet
- 传输层的 PDU是数据段 segment
- 其他更高层次的PDU是消息 message
三种通信模式
单播
广播
组播
TCP/IP协议栈
Transmission Control Protocol/Internet Protocol 传输控制协议/因特网互联协议
TCP/IP是一个Protocol Stack,包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP等许多协议
最早发源于美国国防部(缩写为DoD)的因特网的前身 ARPA网项目,1983年1月1日,TCP/IP取代了旧的网络 控制协议NCP,成为今天的互联网和局域网的基石和标 准,由互联网工程任务组负责维护
共定义了四层
和OSI参考模型的分层有对应关系
应用层
传输层
TCP
TCP特性
- 工作在传输层
- 面向连接协议
- 全双工协议
- 半关闭
- 错误检查
- 将数据打包成段,排序
- 确认机制
- 数据恢复,重传
- 流量控制,滑动窗口
- 拥塞控制,慢启动和拥塞避免算法
- 更多关于tcp的内核参数,可参看man 7 tcp
TCP包头
源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的, 而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标 端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的, 可推算计算机的端口个数为2^16个
序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的 字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个 字节,就会出现序列号回绕,再次从 0 开始
确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。 也就是告诉发送方:我希望你(指发送方)下次发送的数据的第一个字节数据 的编号为此确认号
数据偏移:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可 变的选项部分,需要指定这个TCP报文段到底有多长。它指出 TCP 报文段的数 据起始处距离 TCP 报文段的起始处有多远。该字段的单位是32位(即4个字节为 计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节
URG:表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效
ACK:表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段
PSH:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空 间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序 不将接收到的数据读走,就会一直停留在TCP接收缓冲区中
RST:如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必 须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应, 带RST标志的TCP报文段称为复位报文段
SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连 接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求 建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文 段称为同步报文段
FIN:表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方: “我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段
窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段 的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继 续传送后面数据,由Window size value * Window size scaling factor(此值在三次握手阶段TCP选项Window scale协商得到)得出此值
校验和:提供额外的可靠性
紧急指针:标记紧急数据在数据字段中的位置
选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表 示,选项部分最长为:(2^4-1)*4-20=40字节
常见选项:
- 最大报文段长度:Maxium Segment Size,MSS,通常1460字节
- 窗口扩大:Window Scale
- 时间戳: Timestamps
TCP包头选项
最大报文段长度MSS(Maximum Segment Size)
指明自己期望对方发送TCP报文段时那个数据字段的长度。比如:1460字节。数 据字段的长度加上TCP首部的长度才等于整个TCP报文段的长度。MSS不宜设的太 大也不宜设的太小。若选择太小,极端情况下,TCP报文段只含有1字节数据,在 IP层传输的数据报的开销至少有40字节(包括TCP报文段的首部和IP数据报的首 部)。这样,网络的利用率就不会超过1/41。若TCP报文段非常长,那么在IP层传 输时就有可能要分解成多个短数据报片。在终点要把收到的各个短数据报片装配成 原来的TCP报文段。当传输出错时还要进行重传,这些也都会使开销增大。因此 MSS应尽可能大,只要在IP层传输时不需要再分片就行。在连接建立过程中,双 方都把自己能够支持的MSS写入这一字段。 MSS只出现在SYN报文中。即:MSS 出现在SYN=1的报文段中
MTU和MSS值的关系:MTU=MSS+IP Header+TCP Header 通信双方最终的MSS值=较小MTU-IP Header-TCP Header
窗口扩大
为了扩大窗口,由于TCP首部的窗口大小字段长度是16位,所以其表示的最大数是 65535。但是随着时延和带宽比较大的通信产生(如卫星通信),需要更大的窗口 来满足性能和吞吐率,所以产生了这个窗口扩大选项
时间戳
可以用来计算RTT(往返时间),发送方发送TCP报文时,把当前的时间值放入时间戳字段,接收方收到后发送确认报文时,把这个时间戳字段的值复制到确认报文中, 当发送方收到确认报文后即可计算出RTT。也可以用来防止回绕序号PAWS,也可以说可以用来区分相同序列号的不同报文。因为序列号用32为表示,每2^32个序 列号就会产生回绕,那么使用时间戳字段就很容易区分相同序列号的不同报文
TCP协议PORT
传输层通过port号,确定应用层协议
Port number:
tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路
- 0-65535
udp:User Datagram Protocol,无连接的协议
- 0-65535
IANA:互联网数字分配机构(负责域名,数字资源,协议分配)
0-1023:系统端口或特权端口(仅管理员可用) ,众所周知,永久的分配给固定的 系统应用使用,22/tcp(ssh), 80/tcp(http), 443/tcp(https)
1024-49151:用户端口或注册端口,但要求并不严格,分配给程序注册为某应 用使用,1433/tcp(SqlServer), 1521/tcp(oracle),3306/tcp(mysql),11211/tcp/udp (memcached)
49152-65535:动态端口或私有端口,客户端程序随机使用的端口
其范围的定义:/proc/sys/net/ipv4/ip_local_port_range
TCP序列号和确认号
TCP确认
固定窗口
滑动窗口
TCP连接
TCP三次握手
TCP四次挥手
为啥TCP最后挥手要等2MSL?
1.服务端可能收不到客户端最后的确认,所以服务端需要重新发送FIN请求,如果客户端不等待而直接关闭的话,FIN请求就无法送达,导致连接关闭异常
2.客户端重新发起的请求的端口也可能和上一个请求是一样的,而如果上一个请求立即关闭的话,网络中可能存在残留的报文,这些报文在新连接建立后才到达服务器,由于前后端口号一致,TCP协议就默认这些数据属于新连接,容易混乱
TCP状态
CLOSED 没有任何连接状态
LISTEN 侦听状态,等待来自远方TCP端口的连接请求
SYN-SENT 在发送连接请求后,等待对方确认
SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认
ESTABLISHED 代表传输连接建立,双方进入数据传送状态
FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认
FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认
LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
CLOSING 双方同时尝试关闭传输连接,等待对方确认
客户机端的三次握手和四次挥手
服务器端的三次握手和四次挥手
sync半连接和accept全连接队列
- ss –lnt
- /proc/sys/net/ipv4/tcp_max_syn_backlog 未完成连接队列大小,建议调整大小为1024以上
- /proc/sys/net/core/somaxconn 完成连接队列大小,建议调整大小为1024以上
TCP超时重传
- 异常网络状况下(开始出现超时或丢包),TCP控制数据传输以保证其承诺的可靠服务
- TCP服务必须能够重传超时时间内未收到确认的TCP报文段。为此,TCP模块为 每个TCP报文段都维护一个重传定时器,该定时器在TCP报文段第一次被发送时 启动。如果超时时间内未收到接收方的应答,TCP模块将重传TCP报文段并重置 定时器。至于下次重传的超时时间如何选择,以及最多执行多少次重传,就是 TCP的重传策略
- 与TCP超时重传相关的两个内核参数:
- /proc/sys/net/ipv4/tcp_retries1,指定在底层IP接管之前TCP最少执行的重传次数,默认值是3
- /proc/sys/net/ipv4/tcp_retries2,指定连接放弃前TCP最多可以执行的重传次 数,默认值15(一般对应13~30min)
快速重传原理
如果发送端连续收到了4份同样的ACK(1份正常+3次冗余),则认为数据包已经丢失,立刻进行重传。为什么是3次?这是一个估值,并不代表收到3次就丢失报文了,也有可能是TCP自身传输过程中乱序导致的,只是连续收到3次冗余的概率更大一点
拥塞控制
- 网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间, 若对网络中某一资源的需求超过了该资源所能提供的可承受的能力,网络的性能就会变坏。此情况称为拥塞
- TCP为提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。 即所谓的拥塞控制
- TCP拥塞控制的标准文档是RFC 5681,其中详细介绍了拥塞控制的四个部分: 慢启动(slow start)、拥塞避免(congestion avoidance)、快速重传(fast retransmit)和快速恢复(fast recovery)。拥塞控制算法在Linux下有多种实 现,比如reno算法、vegas算法和cubic算法等。它们或者部分或者全部实现了 上述四个部分
- 当前所使用的拥塞控制算法法
- /proc/sys/net/ipv4/tcp_congestion_control
UDP
- 工作在传输层
- 提供不可靠的网络访问
- 非面向连接协议
- 有限的错误检查
- 传输性能高
- 无数据恢复特性
- 更多关于udp的内核参数,可参看man 7 udp
UDP包头
Internet层
Internet协议特征
- 运行于 OSI 网络层
- 面向无连接的协议
- 独立处理数据包
- 分层编址
- 尽力而为传输
- 无数据恢复功能
IP PDU报头
- 版本:占4位,指 IP 协议的版本目前的IP协议版本号为4
- 首部长度:占4位,可表示的最大数值是15个单位,一个单位为4字节,因此IP 的 首部长度的最大值是60字节
- 区分服务:占8位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未 被使用过.后改名为区分服务.只有在使用区分服务(DiffServ)时,这个字段才起作用.一般的情况下不使用
- 总长度:占16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节.总长度必须不超过最大传送单元 MTU
- 标识:占16位,它是一个计数器,通常,每发送一个报文,该值会加1, 也用于数 据包分片,在同一个包的若干分片中,该值是相同的
- 标志(flag):占3位,目前只有后两位有意义
- DF: Don’t Fragment 中间的一位,只有当 DF=0 时才允许分片
- MF: More Fragment 最后一位,MF=1表示后面还有分片,MF=0 表示最后 一个分片
- 片偏移:占13位,指较长的分组在分片后,该分片在原分组中的相对位置.片偏移 以8个字节为偏移单位
- 生存时间:占8位,记为TTL (Time To Live) 数据报在网络中可通过的路由器数的 最大值,TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为 64.发送 ICMP 回显应答时经常把 TTL 设为最大值 255
- 协议:占8位,指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据 部分上交给哪个处理过程, 1表示为 ICMP 协议, 2表示为 IGMP 协议, 6表示为 TCP 协议, 17表示为 UDP 协议
- 首部检验和:占16位,只检验数据报的首部不检验数据部分.这里不采用 CRC 检验码而采用简单的计算方法
- 源地址和目的地址:都各占4字节,分别记录源地址和目的地址
主机到主机的包传递
IP地址
- 可唯一标识 IP 网络中的每台设备
- 每台主机(计算机、网络设备、外围设备)必须具有唯一的地址
- IP地址由两部分组成
- 网络ID:
- 标识网络
- 每个网段分配一个网络ID
- 主机 ID:
- 标识单个主机
- 由组织分配给各设备
- 网络ID:
IPv4地址格式:点分十进制
分类
A类:
- 0 000 0000 - 0 111 1111: 1-126
- 网络数:126, 127
- 每个网络中的主机数:2^24-2
- 默认子网掩码:255.0.0.0
- 私网地址:10.0.0.0
B类:
- 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类:
- 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地址
特殊地址
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服务器获取地 址,系统会为主机分配这样地址
保留地址
子网掩码
有子网的子网掩码
子网掩码的八位
可变长子网掩码
Subnet地址
监控工具
iftop
iftop是一款实时流量监控工具,监控TCP/IP连接等,缺点就是无报表功能。必须以root身份才能运行
- -i设定监测的网卡,如:# iftop -i eth1
- -B 以bytes为单位显示流量(默认是bits),如:# iftop -B+
- -n使host信息默认直接都显示IP,如:# iftop -n
- -N使端口信息默认直接都显示端口号,如: # iftop -N
- -F显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0
- -p使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;
- -b使流量图形条默认就显示;
- -f这个暂时还不太会用,过滤计算包用的;
- -P使host信息及端口信息默认就都显示;
- -m设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M
nload
nload是一个实时监控网络流量和带宽使用情况,以数值和动态图展示进出的流量情况
界面操作
- 上下方向键、左右方向键、enter键或者tab键都就可以切换查看多个网卡的流量情况
- 按 F2 显示选项窗口
- 按 q 或者 Ctrl+C 退出 nload
示例:
- nload:默认只查看第一个网络的流量进出情况
- nload eth0 eth1:在nload后面指定网卡,可以指定多个
设置刷新间隔:默认刷新间隔是100毫秒,可通过 -t命令设置刷新时间(单位是毫秒)
nload -t 500 ens33
设置单位:显示两种单位一种是显示Bit/s、一种是显示Byte/s,默认是以Bit/s,也可不显示/s
-u h|b|k|m|g|H|B|K|M|G 表示的含义:
h: auto, b: Bit/s, k: kBit/s, m: MBit/s, H: auto, B: Byte/s, K: kByte/s, M: MByte/s
nload -u M eth0
网络配置与管理
基本网络配置
- 将Linux主机接入到网络,需要配置网络相关设置
- 一般包括如下内容:
- 主机名 IP/netmask
- 路由:默认网关
- DNS服务器
- 主DNS服务器
- 次DNS服务器
- 第三DNS服务器
网络配置方式
静态指定:
ifconfig, route, netstat
ip: object {link, addr, route}, ss, tc system-config-network-tui,setup 配置文件
动态分配:
- DHCP: Dynamic Host Configuration Protocol
配置网络接口
ifconfig命令
- ifconfig [interface] 实现接口及地址查看和管理
- ifconfig -a 查看所有网络接口配置信息,包括inactive状态的接口
- ifconfig IFACE [up|down]
- ifconfig interface [aftype] options | address …
- ifconfig IFACE IP/netmask [up] [down]
- ifconfig IFACE IP netmask NETMASK 注意:立即送往内核中的TCP/IP协议栈并生效
- 启用混杂模式:[-]promisc
- 管理IPv6地址:
- add addr/prefixlen
- del addr/prefixlen
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]
- route del default
目标: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
netstat命令
显示网络连接:
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:扩展格式 多了user 和 inode ,其中inode 表示当前连接套接字文件的inode号
- -p: 显示相关进程及PID
常用组合:
- -tan, -uan, -tnl, -unl,lntup
显示路由表:
- netstat {–route|-r} [–numeric|-n]
- -r: 显示内核路由表
- -n: 数字格式
- netstat {–route|-r} [–numeric|-n]
显示接口统计数据:
netstat {–interfaces|-I|-i} [iface] [–all|-a] [–extend|-e] [–program|-p][–numeric|-n]
- netstat -i 显示所有接口
- netstat –I=IFACE 显示指定接口
- ifconfig -s eth0
ip命令
配置Linux网络属性:ip 命令
ip - show / manipulate routing, devices, policy routing and tunnels
- ip [ OPTIONS ] OBJECT { COMMAND | help }
- OBJECT := { link | addr | route }
ip link - network device configuration
- set [dev IFACE]:指定接口
- 可设置属性:
- up and down:激活或禁用指定接口
- ifup/ifdown 通过读取网卡的配置文件
- name NAME:重命名接口
- mtu NUMBER:更改mtu的值
- show [dev IFACE]:指定接口(二层)
- [up]:仅显示处于激活状态的接口
- set [dev IFACE]:指定接口
ip netns:ip-manage network namespaces
- ip netns list
- ip netns add NAME
- ip netns del NAME
- ip netns exec NAME COMMAND:在指定的netns中运行命令
ip addr { add | del } IFADDR dev STRING [label LABEL]:添加地址时指明网卡别名 [scope {global|link|host}]:指明作用域
- global: 全局可用
- link: 仅链接可用
- host: 本机内部可用
- [broadcast ADDRESS]:指明广播地址
- 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 address show - look at protocol addresses
- [dev DEVICE]
- [label PATTERN] [primary and secondary]
- ip addr flush 清空接口的所有地址,使用格式同show
- ip addr flush dev eth0
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.100 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 [src | dev] xxx
获取某单个路由条目:ip route get
- ip route get 192.168.1.9
清空路由表:ip route flush [dev IFACE] [via PREFIX]
- ip route flush dev eth0
ss命令
格式:ss [OPTION]… [FILTER]
netstat通过遍历proc来获取socket信息,ss使用netlink与内核tcp_diag模块通信获取socket信息
选项:
- -t: tcp协议相关
- -u: udp协议相关
- -w: raw socket,裸套接字相关
- -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 = xxx 源端口
- sport = xxx 目标端口
- 示例:’( dport = :ssh or sport = :ssh )’
- tcp finite state machine:
常用组合:
- -tan, -tanl, -tanlp, -uan,lntup
- 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连接
- ss -o state established ‘( dport = :http or sport = :http )’ 显示所有已建立 的HTTP连接
- ss -s 列出当前socket详细信息
网络配置文件
ONBOOT:在系统引导时是否激活此设备
TYPE:接口类型;常见有的Ethernet, Bridge
UUID:设备的唯一标识
IPV6INIT:是否初始化IPV6
BOOTPROTO:激活此接口时使用什么协议来配置接口属性,常用的有dhcp,bootp,static,none;
IPADDR:指明IP地址
PREFIX:子网掩码
GATEWAY: 默认网关
NAME: 网卡物理设备名称
DEVICE: 网卡设备名称
- 如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,则根据此索引进行命名,如eno1, eno2, …
- 如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,如ens1, ens2, ..
- 如果硬件接口的物理位置信息可用,则根据此信息命名,如enp2s0, ..
- 如果用户显式定义,也可根据MAC地址命名,例如enx122161ab2e10, …
- 上述均不可用时,则仍使用传统方式命名。
命名格式的组成:
en:ethernet
wl:wlan
ww:wwan
名称类型:
- o<index>:集成设备的设备索引号
- s<slot>:拓展槽的索引号
- x<MAC>:基于MAC地址的命名
- p<bus>s<slot>:基于总线及槽的拓扑结构进行命名
DNS1:第一个DNS服务器指向
DNS2:第二个DNS服务器指向
DNS3:第二个DNS服务器指向
DOMAIN:DNS搜索域
USERCTL:普通用户是否可控制此设备
PEERDNS:如果BOOTPROTO的值为“dhcp”,YES将允许dhcp server分配的dns服务器信息直接覆盖至/etc/resolv.conf文件,NO不允许修改resolv.conf
设备配置被保存在文本文件中
- /etc/sysconfig/network-scripts/ifcfg-<name>
- 帮助文档列出完整选项列表:/usr/share/doc/initcripts*/sysconfig.txt
网卡别名
网卡别名不支持动态获取地址
对虚拟主机有用
将多个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.1/16 dev eth0
- ip addr add 172.16.1.2/16 dev eth0 label eth0:0
- ip addr del 172.16.1.2/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
参考:/usr/share/doc/initscripts-*/sysconfig.txt
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
网络接口配置-bonding
Bonding
将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。直接给两块网卡设置同一IP地址是不可以的。通过bonding,虚拟一块网卡对外提供 连接,物理网卡的被修改为相同的MAC地址
共7种模式:0-6 Mode
Mode 0 (balance-rr): 轮询(Round-robin)策略,从头到尾顺序的在每 一个slave接口上面发送数据包。本模式提供负载均衡和容错的能力
Mode 1 (active-backup): 活动-备份(主备)策略,只有一个slave被激活, 当且仅当活动的slave接口失败时才会激活其他slave.为了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见
Mode 3 (broadcast):广播策略,在所有的slave接口上传送所有的报文,提 供容错能力
active-backup、balance-tlb 和 balance-alb 模式不需要交换机的任何特 殊配置。其他绑定模式需要配置交换机以便整合链接。如:Cisco 交换机需 要在模式 0、2 和 3 中使用 EtherChannel,但在模式4中需要 LACP和 EtherChannel
创建bonding设备的配置文件
/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
BONDING_OPTS= “miimon=100 mode=0”
/etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no
查看bond0状态:/proc/net/bonding/bond0
miimon 是用来进行链路监测的。如果miimon=100,那么系统每100ms 监测 一次链路连接状态,如果有一条线路不通就转入另一条线路
删除bond0
- ifconfig bond0 down
- rmmod bonding
详细帮助:
/usr/share/doc/kernel-doc-version/Documentation/networking/bonding.txt
网络配置工具
- 图形工具:nm-connection-editor
- 字符配置tui工具:nmtui
- 命令行工具:nmcli
nmcli命令
地址配置工具:nmcli
nmcli [ OPTIONS ] OBJECT { COMMAND | help }
device - show and manage network interfaces
nmcli device help
- connection - start, stop, and manage network connections
- nmcli connection help
修改IP地址等属性:
- nmcli connection modify IFACE [+|-]setting.property value
- setting.property:
- ipv4.addresses ipv4.gateway
- ipv4.dns1 ipv4.method manual | auto
- nmcli connection modify IFACE [+|-]setting.property value
修改配置文件执行生效:systemctl restart network(CentOS8 已移除)
nmcli con reload
nmcli命令生效: nmcli con down eth0 ;nmcli con up eth0
使用nmcli配置网络
NeworkManager是管理和监控网络设置的守护进程
设备即网络接口,连接是对网络接口的配置,一个网络接口可有多个连接配置,但同时只有一个连接配置生效
显示所有包括不活动连接 nmcli con show
显示所有活动连接
nmcli con show –active
显示网络连接配置
nmcli con show “System eth0“
显示设备状态
nmcli dev status
显示网络接口属性
nmcli dev show eth0
创建新连接default,IP自动通过dhcp获取
nmcli con add con-name default type Ethernet ifname eth0
删除连接
nmcli con del default
创建新连接static ,指定静态IP,不自动连接
nmcti con add con-name static ifname eth0 autoconnect no type
Ethernet ipv4.addresses 172.25.X.10/24 ipv4.gateway 172.25.X.254
启用static连接配置
nmcli con up static
启用default连接配置
nmcli con up default
查看帮助
nmcli con add help
修改连接设置
- nmcli con mod “static” connection.autoconnect no
- nmcli con mod “static” ipv4.dns 172.25.X.254
- nmcli con mod “static” +ipv4.dns 8.8.8.8
- nmcli con mod “static” -ipv4.dns 8.8.8.8
- nmcli con mod “static” ipv4.addresses “172.16.X.10/24 172.16.X.254”
- nmcli con mod “static” +ipv4.addresses 10.10.10.10/16
DNS设置,存放在/etc/resolv.conf文件中
PEERDNS=no 表示当IP通过dhcp自动获取时,dns仍是手动设置,不自动获取 等价于下面命令:
nmcli con mod “system eth0” ipv4.ignore-auto-dns yes
修改连接配置后,需要重新加载配置 nmcli con reload
- nmcli con down “system eth0” 可被自动激活
- nmcli con up “system eth0”
- nmcli dev dis eth0 禁用网卡,访止被自动激活
添加bonding接口
nmcli con add type bond con-name mybond0 ifname bond0 mode
active-backup
添加从属接口
- nmcli con add type bond-slave ifname ens7 master bond0
- nmcli con add type bond-slave ifname ens3 master bond0
- 注:如无为从属接口提供连接名,则该名称是接口名称加类型构成
要启动绑定,则必须首先启动从属接口
- nmcli con up bond-slave-eth0
- nmcli con up bond-slave-eth1
启动绑定
nmcli con up mybond0
tcpdump命令
tcpdump命令是一款sniffer工具,是linux上的抓包工具,嗅探器;它可以打印出所有经过网络接口的数据包的头信息。
tcpdump命令工作时先要把网卡的工作模式切换到混杂模式。所以tcpdump命令需要以root身份运行。tcpdump命令是linux下使用最广泛的网络协议分析工具。使用tcpdump命令时,必须精通TCP/IP协议工作原理。
1 | -A 以ASCII码方式显示每一个数据包(不会显示数据包中链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据(nt: 即Handy for capturing web pages). |
常用用法
1 | [root@www ~]# tcpdump -i eth1 #监视指定网络接口的数据包 |