网络概念
-
网络应用程序
-
Web 浏览器(Chrome、IE、Firefox等)
即时消息(QQ、微信、钉钉等)
电子邮件(Outlook、foxmail 等)
协作(视频会议、VNC、Netmeeting、WebEx 等)
web网络服务(apache,nginx,IIS)
文件网络服务(ftp,nfs,samba)
数据库服务( MySQL,MariaDB, MongoDB)
中间件服务(Tomcat,JBoss)
安全服务( Netfilter)
-
Web 浏览器(Chrome、IE、Firefox等)
-
用户应用程序对网络的影响
-
批处理应用程序
-
FTP、TFTP、库存更新
无需直接人工交互
带宽很重要,但并非关键性因素
-
FTP、TFTP、库存更新
-
交互式应用程序
-
库存查询、数据库更新。
人机交互。
因为用户需等待响应,所以响应时间很重要,但并非关键性因素,除非要等待很长时间。
-
库存查询、数据库更新。
-
实时应用程序
-
VoIP、视频
人与人的交互
端到端的延时至关重要
-
VoIP、视频
-
批处理应用程序
-
网络的特征
- 速度、成本、安全性、可用性、可扩展性、可靠性、拓扑
-
拓扑结构
-
物理拓扑分类:总线拓扑、环状拓扑、双环拓扑、星型拓扑、扩展星型拓扑、全网拓扑、部分全网拓扑
-
逻辑拓扑
-
网络设备
-
Hub集线器
-
基于CSMA/CD;
共享带宽、半双工
Hub并不记忆该信息包是由哪个MAC地址发出,哪个MAC地址在Hub的哪个端口
-
基于CSMA/CD;
-
以太网桥
-
交换式以太网的优势
- 扩展了网络带宽
- 分割了网络冲突域,使网络冲突被限制在最小的范围内
- 交换机作为更加智能的交换设备,能够提供更多用户所要求的功能:优先级、虚拟网、远程检测……
-
以太网桥的工作原理:
-
以太网桥监听数据帧中源MAC地址,学习MAC,建立MAC表
-
对于未知MAC地址,网桥将转发到除接收该帧的端口之外的所有端口
-
当网桥接到一个数据帧时,如果该帧的目的位于接收端口所在网段上,它就过滤掉该数据帧;如果目的MAC地址在位于外一个端口,网桥就将该帧转发到该端口
-
当网桥接到广播帧时候,它立即转发到除接收端口之外的所有其他端口
-
-
Hub和交换机比较
- 集线器属于OSI的第一层物理层设备,而网桥属于OSI的第二层数据链路层设备
- 从工作方式来看,集线器是一种广播模式,所有端口在一个冲突域里面。网桥的可以通过端口隔离冲突
- Hub是所有共享总线和共享带宽。网桥每个端口占一个带宽
-
-
路由器:
-
路由:把一个数据包从一个设备发送到不同网络里的另一个设
备上去。这些工作依靠路由器来完成。路由器只关心网络的状态和决定网络中的最佳路径。路由的实现依靠路由器中的
路由表来完成- 查看路由表:route -n
-
路径选择的算法(路由协议):rip(路由器最少为标准)、ospf(根据速度)、eigrp、igrp、isis、bgp
-
实现路由功能,需要路由器:
-
分隔广播域
选择路由表中到达目标最好的路径
维护和检查路由信息
连接广域网
-
分隔广播域
-
路由:把一个数据包从一个设备发送到不同网络里的另一个设
-
网络线缆和接口
-
Twisted-Pair(双绞线)
-
基带:数字
宽带:模拟
-
基带:数字
-
同轴电缆:
-
两个设备之间的距离最大185m
10Base2:最大距离200m,实际185m
10Base5:最大距离500m
-
两个设备之间的距离最大185m
- Fiber-Optic:
-
Twisted-Pair(双绞线)
-
UTP:
-
T568B:直通线
T568A:交叉线,13对调,26对调; -
交换机已经做完交叉线了;
橙白、橙、绿白、蓝、蓝白、绿、棕白、棕 ,橙蓝绿棕,3、5对调
-
T568B:直通线
OSI模型的七层结构
资源子网
-
应用层
-
网络进程访问应用层
- 为应用程序进程(如:电子邮件、文件传输和终端仿真)提供网络服务
- 提供用户身份验证
-
网络进程访问应用层
-
表示层
-
数据表示
- 确保接收系统可以读出该数据
- 格式化数据
- 构建数据
- 协商用于应用层的数据传输语法
- 提供加密
-
数据表示
-
会话层
-
主机间通信
- 建立、管理和终止在应用程序之间的会话
-
主机间通信
-
传输层
- 负责向两个主机中进程之间的通信提供服务
-
传输问题
- 确保数据传输的可靠性
- 建立、维护和终止虚拟电路
- 通过错误检测和恢复
- 信息流控制来保障可靠性
通信子网
-
网络层
-
数据传输
- 路由数据包
- 选择传递数据的最佳路径
- 支持逻辑寻址和路径选择
-
数据传输
-
数据链路层
-
访问介质
- 定义如何格式化数据以便进行传输以及如何控制对网络的访问
- 支持错误检测
-
访问介质
-
物理层
-
二进制传输
- 为启动、维护以及关闭物理链路定义另外电气规范、机械规范、过程规范和功能规范
-
二进制传输
TCP/IP协议栈
-
TCP/IP协议体系结构是专门针对于使用TCP/IP协议簇的广域计算机网络而开发的;
-
应用层(会话层、表示层、应用层):以具体的数据报文为单位进行传输
传输层:在TCP/IP协议体系中,TCP是以数据段为单位进行传输,UDP是以数据报为单位进行传输
internet层:传输的单位是分组(或者是包),一个分组可以包含多个帧,分组的大小也要根据不同协议而定
网络访问层
数据链路层:传输的单位是帧,一个帧包括多个比特,但一个帧的大小必须是一个整数字节。不同协议的帧大小不一样
物理层:以最原始的比特流格式传输,bit
传输层
TCP包头
- 源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口各用16位表示的,可推算计算机的端口个数为2^16个
-
序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从 0 开始
-
确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送发:我希望你(指发送方)下次发送的数据的第一个字节数据的编号是这个确认号。也就是告诉发送方:我希望你(指发送方)下次发送给我的TCP报文段的序列号字段的值是这个确认号
-
数据偏移:由于TCP首部包含一个长度可变的选项部分,所以需要这么一个值来指定这个TCP报文段到底有多长。它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远,即TCP报文段的首部长度。该字段的单位是32位字,即:4个字节
-
URG:表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效
-
ACK:表示是否前面的确认号字段是否有效。ACK=1,表示有效。只有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报文段称为结束报文段
-
窗口大小:表示现在运行对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量
-
校验和:提供额外的可靠性
-
紧急指针:标记紧急数据在数据字段中的位置。
-
选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节
有限状态机FSM:Finite State Machiine
-
CLOSED 没有任何连接状态
-
LISTEN 侦听状态,等待来自远方TCP端口的连接请求
-
SYN-SENT 在发送连接请求后,等待对方确认
-
SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认
-
ESTABLISHED 代表传输连接建立,双方进入数据传送状态
-
FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认
-
FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
-
TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
-
CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认
-
LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
-
CLOSING 双方同时尝试关闭传输连接,等待对方确认
客户端的典型状态转移
-
客户端通过connect系统调用主动与服务器建立连接connect系统调用首先给服务器发送一个同步报文段,使连接转移到SYN_SENT状态。
-
此后connect系统调用可能因为如下两个原因失败返回:
-
1、如果connect连接的目标端口不存在(未被任何进程监听),或者该端口仍被处于TIME_WAIT状态的连接所占用(见后文),则服务器将给客户端发送一个复位报文段,connect调用失败。
-
2、如果目标端口存在,但connect在超时时间内未收到服务器的确认报文段,则connect调用失败。
-
-
connect调用失败将使连接立即返回到初始的CLOSED状态。如果客户端成功收到服务器的同步报文段和确认,则connect调用成功返回,连接转移至ESTABLISHED状态
-
当客户端执行主动关闭时,它将向服务器发送一个结束报文段,同时连接进入FIN_WAIT_1状态。若此时客户端收到服务器专门用于确认目的的确认报文段,则连接转移至FIN_WAIT_2状态。当客户端处于FIN_WAIT_2状态时,服务器处于CLOSE_WAIT状态,这一对状态是可能发生半关闭的状态。此时如果服务器也关闭连接(发送结束报文段),则客户端将给予确认并进入TIME_WAIT状态
-
客户端从FIN_WAIT_1状态可能直接进入TIME_WAIT状态(不经过FIN_WAIT_2状态),前提是处于FIN_WAIT_1状态的服务器直接收到带确认信息的结束报文段(而不是先收到确认报文段,再收到结束报文段)
-
处于FIN_WAIT_2状态的客户端需要等待服务器发送结束报文段,才能转移至TIME_WAIT状态,否则它将一直停留在这个状态。如果不是为了在半关闭状态下继续接收数据,连接长时间地停留在FIN_WAIT_2状态并无益处。连接停留在FIN_WAIT_2状态的情况可能发生在:客户端执行半关闭后,未等服务器关闭连接就强行退出了。此时客户端连接由内核来接管,可称之为孤儿连接(和孤儿进程类似)。
-
Linux为了防止孤儿连接长时间存留在内核中,定义了两个内核参数:
-
/proc/sys/net/ipv4/tcp_max_orphans 指定内核能接管的孤儿连接数目
-
/proc/sys/net/ipv4/tcp_fin_timeout。,指定孤儿连接在内核中生存的时间
-
有限状态机
-
客户端先发送一个FIN给服务端,自己进入了FIN_WAIT_1状态,这时他等待接收服务端的报文,该报文会有三种可能:
-
只有服务端的ACK
只有服务端的FIN
基于服务端的ACK,又有FIN
-
只收到服务器的ACK,客户端会进入FIN_WAIT_2状态,后续当收到服务端的FIN时,回应发送一个ACK,会进入到TIME_WAIT状态,这个状态会持续2MSL(TCP报文段在网络中的最大生存时间,RFC 1122标准的建议值是2min).客户端等待2MSL,是为了当最后一个ACK丢失时,可以再发送一次。因为服务端在等待超时后会再发送一个FIN给客户端,进而客户端知道ACK已丢失
-
只有服务端的FIN时,回应一个ACK给服务端,进入CLOSING状态,然后接收到服务端的ACK时,进入TIME_WAIT状态
-
同时收到服务端的ACK和FIN,直接进入TIME_WAIT状态
-
只有服务端的ACK
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)
-
拥塞控制
-
TCP为提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。即所谓的拥塞控制
-
TCP拥塞控制的标准文档是RFC 5681,其中详细介绍了拥塞控制的四个部分:慢启动(slow start)、拥塞避免(congestion avoidance)、快速重传(fast retransmit)和快速恢复(fast recovery)。拥塞控制算法在Linux下有多种实现,比如reno算法、vegas算法和cubic算法等。它们或者部分或者全部实现了上述四个部分
-
当前所使用的拥塞控制算法
- /proc/sys/net/ipv4/tcp_congestion_control
TCP协议
- 传输层通过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
-
-
Internet
-
运行于 OSI 网络层
面向无连接的协议
独立处理数据包
分层编址
尽力而为传输
无数据恢复功能
IP报头
-
版本:占4位,指 IP 协议的版本目前的IP协议版本号为4
-
首部长度:占4位,可表示的最大数值是15个单位,一个单位为4字节,因此IP 的首部长度的最大值是60字节
-
区分服务:占8位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过.后改名为区分服务.只有在使用区分服务(DiffServ)时,这个字段才起作用.一般的情况下都不使用
-
总长度:占16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535(2^16-1) 字节.总长度必须不超过(对应层的传输介质的)最大传送单元 MTU
-
标识:占16位,它是一个计数器,通常,每发送一个报文,改值会加1, 也用于数据包分片,在同一个包的若干分片中,该值是相同的
-
标志(flag):占3位,目前只有前两位有意义。
-
MF:标志字段的最低位是MF(More Fragment),MF=1表示后面还有分片,MF=0 表示最后一个分片
-
DF:标志字段中间的一位是DF(Don’t Fragment),只有当 DF=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 字节,分别记录源地址和目的地址
-
可变部分:必须是4字节的整数倍,当可选字段不够时,由填充部分补齐;
IP地址
-
它们可唯一标识 IP 网络中的每台设备
-
每台主机(计算机、网络设备、外围设备)必须具有唯一的地址
-
IP地址由两部分组成:
-
网络ID:
-
标识网络
每个网段分配一个网络ID
-
标识网络
-
主机 ID:
-
标识单个主机
由组织分配给各设备
-
标识单个主机
-
-
IP(internet protocol)地址:网络号+主机号
-
IPv4:32bits
IPv6:128bits-
IPv4地址分类:
-
公式1:一个网络中IP数量=2^主机ID位-2
公式2:多少个网络=2^可变的网络ID位
公式3:网络ID值=IP和子网掩码相“与”
公式4:CIDR 无类域间路由
IP/网络ID位数=IP/(32-主机ID位数)
公式5:划分子网
划分子网的数=2^借位数(网络ID位向主机ID位借位)
-
公式1:一个网络中IP数量=2^主机ID位-2
-
A类:
前8位为网络号,后24位为主机号
网络号:(第1位为0)
0 000 0000 – 0 111 1111 :0-127
网络数量:126(1-126)
每个网络中的主机数量:2^24-2(16777214)(排除全0、全1)
默认子网掩码:255.0.0.0/8
私网地址:只能在本地进行通讯;10.0.0.0/255.0.0.0 -
B类:
前16位为网络号,后16位为主机号
网络号:(前2位为10)
10 00 0000-10 11 1111 :128-191
网络数:2^14
每个网络中的主机数量:2^16-2
默认子网掩码:255.255.0.0/16
私网地址:172.16.0.0-172.31.0.0 -
C类:
前24位为网络号,后8位为主机号
网络号:(前3位为110)
110 0 0000-110 1 1111 :192-223
网络数:2^21
每个网络中的主机数量:2^8-2
默认子网掩码:255.255.255.0 , /24 -
D类:组播通讯
1110 0000-1110 1111 :224-239 -
E类:科研通讯
240-254 -
无类:网络ID和主机ID根据情况来指定
- 子网掩码:32位二进制,和IP配合使用,高位全为1对应网络ID位,低位全为0对应主机ID位
- 网络ID值=子网掩码与IP地址按位进行“与”运算,从而取出其网络地址;(1和#相“与”是#,0和#相“与”是0)
- CIDR(无类域间路由):IP/网络ID位数
-
-
公共IP地址
-
A类:
1.0.0.0 – 9.255.255.255
11.0.0.0 – 126.255.255.255 -
B类:
128.0.0.0 – 172.15.255.255
172.32.0.0 – 191.255.255.255 -
C类:
192.0.0.0 – 192.167.255.255
192.169.0.0 – 223.255.255.255
-
A类:
-
私有IP地址
- A类:10.0.0. – 10.255.255.255
- B类:172.16.0.0 – 172.31.255.255
- C类:192.168.0.0 – 192.168.255.255
-
特殊地址
-
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服务器获取地址,系统会为主机分配这样地址。
-
-
网络地址、主机地址、广播地址
-
网络地址:用来标识一个有类或无类网络的地址,是对应网络或子网的第一个IPv4地址,即“主机ID”部分全为0的IPv4地址。
-
主机地址:除了网络地址和广播地址这两个一头一尾的地址外,中间的其他所有地址都是主机地址,可以直接分配给主机使用
-
广播地址:是一个有类或无类网络中的最后一个IPv4地址,即“主机ID”部分全为1的IPv4地址
-
-
网络配置
跨网络通信:路由
-
路由分类:
-
主机路由
网络路由
默认路由
优先级:精度越高,优先级越高
-
主机路由
-
路由表的构成:
Destination Gateway Genmask Flags Metric Ref Use Iface link-local * 255.255.0.0 U 1002 0 0 eth0
-
目标网络(Destination):网络ID、子网掩码
接口(IFace):到达目标网络,从哪个接口出来
网关(gateway):下一个邻近路由器的邻近接口的IP地址,如果目标网络和本路由器直接连接,网关为本路由的相对应接口的IP地址
-
目标网络(Destination):网络ID、子网掩码
基本网络配置
-
将Linux主机接入到网络,需要配置网络相关设置。
-
一般包括如下内容:
主机名
IP/netmask
路由:默认网关
DNS服务器-
主DNS服务器
次DNS服务器
第三DNS服务器
-
主DNS服务器
-
一般包括如下内容:
网络配置方式
-
静态指定:
-
ifcfg: ifconfig, route, netstat
ip: object {link, addr, route}, ss, tc
system-config-network-tui (setup)
配置文件
CentOS 7:网络配置工具:nmcli, nmtui, nm-connection-editor
-
ifcfg: ifconfig, route, netstat
-
动态分配:
-
DHCP: Dynamic Host Configuration Protocol
-
动态主机配置协议DHCP
源MAC 、目标MAC(FF.FF.FF.FF.FF.FF)、源IP0.0.0.0 、目标IP 255.255.255.255
-
-
配置网络接口
-
接口命名方式:CentOS 6:
-
以太网:eth[0,1,2,…]
ppp:ppp[0,1,2,…]
-
-
-
配置动态路由
-
通过守护进程获取动态路由
- 安装quagga包,支持多种格式的RIP、OSPF和BGP
- 命令vtysh配置
-
-
ifconfig命令
-
ifconfig [interface]
-
ifconfig -a
ifconfig IFACE [up|down]
-
ifconfig -a
-
ifconfig interface [aftype] options | address …
-
ifconfig IFACE IP/netmask [up]
ifconfig IFACE IP netmask NETMASK
注意:立即生效
-
ifconfig IFACE IP/netmask [up]
-
启用混杂模式:[-]promisc
-
ifconfig [interface]
-
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
-
目标:192.168.1.3 网关:172.16.0.1
-
默认路由,网关: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
-
目标:192.168.1.3 网关:172.16.0.1
-
-
netstat命令
netstat – Print network connections, routing tables,interface statistics, masquerade connections, and multicast memberships-
显示网络连接:
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
-
-t: tcp协议相关
-
常用组合:
-tan, -uan, -tnl, -unl -
显示路由表:
netstat {–route|-r} [–numeric|-n]-
-r: 显示内核路由表
-n: 数字格式
-
-r: 显示内核路由表
-
显示接口统计数据:
netstat {–interfaces|-I|-i} [iface] [–all|-a] [–extend|-e] [–program|-p] [–numeric|-n]-
netstat -i
netstat –I=IFACE
ifconfig -s eno16777736
-
netstat -i
-
-
ifstat命令
ifstat:统计网络接口活动状态的工具-
选项:
-
-l 监测环路网络接口(lo)。缺省情况下,ifstat监测活动的所有非环路网络接口。经使用发现,加上-l参数能监测所有的网络接口的信息,而不是只监测 lo的接口信息,也就是说,加上-l参数比不加-l参数会多一个lo接口的状态信息。
-a 监测能检测到的所有网络接口的状态信息。使用发现,比加上-l参数还多一个plip0的接口信息,搜索一下发现这是并口(网络设备中有一 个叫PLIP (Parallel Line Internet Protocol).它提供了并口…)
-z 隐藏流量是无的接口,例如那些接口虽然启动了但是未用的
-i 指定要监测的接口,后面跟网络接口名
-s 等于加-d snmp:[comm@][#]host[/nn]] 参数,通过SNMP查询一个远程主机
-h 显示简短的帮助信息
-n 关闭显示周期性出现的头部信息(也就是说,不加-n参数运行ifstat时最顶部会出现网络接口的名称,当一屏显示不下时,会再一次出现接口的名称,提示我们显示的流量信息具体是哪个网络接口的。加上-n参数把周期性的显示接口名称关闭,只显示一次) -t 在每一行的开头加一个时间戳(能告诉我们具体的时间)
-T 报告所有监测接口的全部带宽(最后一列有个total,显示所有的接口的in流量和所有接口的out流量,简单的把所有接口的in流量相加,out流量相加)
-w 用指定的列宽,而不是为了适应接口名称的长度而去自动放大列宽
-W 如果内容比终端窗口的宽度还要宽就自动换行
-S 在同一行保持状态更新(不滚动不换行)注:如果不喜欢屏幕滚动则此项非常方便,与bmon的显示方式类似
-b 用kbits/s显示带宽而不是kbytes/s
-q 安静模式,警告信息不出现
-v 显示版本信息
-d 指定一个驱动来收集状态信息
-
-
-
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
-
可设置属性:
-
show [dev IFACE]:指定接口
[up]:仅显示处于激活状态的接口
-
-
ip addr { add | del } IFADDR dev STRING
-
[label LABEL]:添加地址时指明网卡别名
[scope {global|link|host}]:指明作用域-
global: 全局可用
link: 仅链接可用
host: 本机可用
-
global: 全局可用
-
[broadcast ADDRESS]:指明广播地址
-
ip address show – look at protocol addresses
-
[dev DEVICE]
[label PATTERN]
[primary and secondary] -
ip address 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
-
-
ip route – routing table management
-
添加路由:ip route add
ip route add TARGET via GW dev IFACE src SOURCE_IP-
TARGET:
主机路由:IP
网络路由:NETWORK/MASKip 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 delete
ip route del TARGET -
显示路由:ip route show|list
-
清空路由表:ip route flush [dev IFACE] [via PREFIX]
ip route flush dev eth0
-
-
-
ss
格式:ss [OPTION]… [FILTER]
netstat通过遍历proc来获取socket信息,ss使用netlink与内核tcp_diag模块通信获取socket信息。-
[OPTION]:
-
-t: tcp协议相关
-u: udp协议相关
-w: 裸套接字相关
-x:unix sock相关
-l: listen状态的连接
-a: 所有
-n: 数字格式
-p: 相关的程序及PID
-e: 扩展的信息
-m:内存用量
-o:计时器信息
-
-t: tcp协议相关
-
FILTER : [ state TCP-STATE ] [ EXPRESSION ]
-
TCP的常见状态:
-
tcp finite state machine:
LISTEN: 监听
ESTABLISHED:已建立的连接
FIN_WAIT_1
FIN_WAIT_2
SYN_SENT
SYN_RECV
CLOSED
-
tcp finite state machine:
-
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连接
ss -o state established ‘( dport = :http or sport = :http )’ 显示所有已建立的HTTP连接
ss -s 列出当前socket详细信息 -
-
网络配置文件
-
IP、MASK、GW、DNS相关配置文件:
/etc/sysconfig/network-scripts/ifcfg-IFACE -
路由相关的配置文件:
/etc/sysconfig/network-scripts/route-IFACE
-
/etc/sysconfig/network-scripts/ifcfg-IFACE:
说明参考:/usr/share/doc/initscripts-9.49.30/sysconfig.txt-
DEVICE:此配置文件应用到的设备
HWADDR:对应的设备的MAC地址
BOOTPROTO:激活此设备时使用的地址配置协议,常用的dhcp, static, none, bootp
NM_CONTROLLED:NM是NetworkManager的简写,此网卡是否接受NM控制;建议CentOS6为“no”
ONBOOT:在系统引导时是否激活此设备
TYPE:接口类型;常见有的Ethernet, Bridge
UUID:设备的惟一标识
IPADDR:指明IP地址
NETMASK:子网掩码
GATEWAY: 默认网关
DNS1:第一个DNS服务器指向
DNS2:第二个DNS服务器指向
USERCTL:普通用户是否可控制此设备
PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许
dhcp server分配的dns服务器指向信息直接覆盖至/etc/resolv.conf文件中
-
DEVICE:此配置文件应用到的设备
`配置网关:` `/etc/sysconfig/network ` `如果配置文件和network中都设置网关,则配置文件的网关优先`
-
centos6 关闭NetworkManager服务
chkconfig NetworkManager
重启NetworkManager:service NetworkManager restart
service NetworkManager stop -
本地解析器:
解析器执行正向和逆向查询
/etc/hosts
本地主机名数据库和IP地址的映像
对小型独立网络有用
通常,在使用DNS前检查
getent hosts 查看/etc/hosts 内容 -
DNS名字解析:
-
查看dns,/etc/resolv.conf
NetworkManager与DNS的关系:- NetworkManager启动、peerdns=yes:/etc/resolv.conf中的地址会重新生成,dhcp分配ip和网卡配置文件中的dns也会有效,支持3个
-
NetworkManager启动、peerdns=no:会重新生成 /etc/resolv.conf,dhcp不在分配dns,使用的dns是本机的网卡配置文件中的dns,支持3个
-
NetworkManager不启动、peerdns=yes:/etc/resolv.conf文件会自动生成,地址从网卡配置文件中来,并且/etc/resolv.conf中的地址,只是获取前两个
-
NetworkManager不启动、peerdns=no:dns地址就没了,配置文件中的dns地址也不会读取,/etc/resolv.conf中没有地址;如果/etc/resolv.conf不存在时,此文件也不会自动生成,如需使用必须手写
-
/etc/resolv.conf
nameserver DNS_SERVER_IP1
nameserver DNS_SERVER_IP2
nameserver DNS_SERVER_IP3
search magedu.com
DNS:只有当第一个dns网络不通时才会启用第二个
如果第一个不能够解析,也不会启用第二个-
DNS默认/etc/hosts的优先级高于/etc/resolv.conf;
在 /etc/nsswitch.conf 中可修改优先级 -
正向解析: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
-
(1) TARGET via GW
-
IP、MASK、GW、DNS相关配置文件:
-
网卡别名
对虚拟主机有用
将多个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
-
DEVICE=eth0:0
注意:service network restart 生效
参考/usr/share/doc/initscripts-*/sysconfig.txt -
关闭NetworkManager服务
-
-
网络配置
-
Linux网络属性配置的tui(text user interface):
system-config-network-tui
setup
注意:记得重启网络服务方能生效 -
配置当前主机的主机名:
第一步:改文件/etc/sysconfig/network
第二步: hostname [HOSTNAME]
第三步:/etc/hosts中添加新的主机名;
-
-
CentOS 6网卡名称
-
网络接口识别并命名相关的udev配置文件
/etc/udev/rules.d/70-persistent-net.rules -
查看网卡
dmesg | grep -i eth
ethtool -i eth0 -
卸载网卡驱动
modprobe -r e1000
rmmod e1000 -
装载网卡驱动
modprobe e1000
-
网络接口识别并命名相关的udev配置文件
网络接口配置-bonding
- Bonding:就是将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。当然,直接给两块网卡设置同一IP地址是不可能的。通过bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址。
-
bonding的工作模式
-
Mode 0 (balance-rr)
轮转(Round-robin)策略:从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均衡和容错的能力 -
Mode 1 (active-backup)
活动-备份(主备)策略:在绑定中,只有一个slave被激活。当且仅当活动的slave接口失败时才会激活其他slave。为了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见 -
Mode 3 (broadcast)
广播策略:在所有的slave接口上传送所有的报文。本模式提供容错能力。
-
-
bonding配置
-
创建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
-
-
CentOS 7网络属性配置
-
CentOS 6之前,网络接口使用连续号码命名:eth0、eth1等,当增加或删除网卡时,名称可能会发生变化
-
CentOS 7使用基于硬件,设备拓扑和设置类型命名:
-
网卡命名机制
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 -
名称组成格式
en: Ethernet 有线局域网
wl: wlan 无线局域网
ww: wwan无线广域网
-
名称类型:
o: 集成设备的设备索引号
s: 扩展槽的索引号
x: 基于MAC地址的命名
ps: enp2s1
-
-
网卡设备的命名过程:
-
第一步:
udev, 辅助工具程序/lib/udev/rename_device
/usr/lib/udev/rules.d/60-net.rules -
第二步:
biosdevname 会根据/usr/lib/udev/rules.d/71-biosdevname.rules -
第三步:
通过检测网络接口设备,根据/usr/lib/udev/rules.d/75-net-description
ID_NET_NAME_ONBOARD
ID_NET_NAME_SLOT
ID_NET_NAME_PATH
-
-
使用传统命名方式:
-
编辑/etc/default/grub配置文件
GRUB_CMDLINE_LINUX=”rhgb quiet net.ifnames=0″
为grub2生成其配置文件
grub2-mkconfig -o /etc/grub2.cfg
/etc/grub2.cfg是/boot/grub2/grub.cfg的软链接或:直接修改修改/boot/grub2/grub.cfg
-
重启系统
-
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 helpip link == nmcli device 数据链路层的设置
ip addr == nmcli connection 网络层的设置
-
-
修改IP地址等属性:
-
nmcli connection modify IFACE [+|-]setting.property value
-
setting.property:
ipv4.addresses ipv4.gateway
ipv4.dns1 ipv4.method manual | auto
-
setting.property:
-
-
修改配置文件执行生效:
-
systemctl restart network
nmcli con reload
-
-
nmcli命令生效: nmcli con down eth0 ;nmcli con up eth0
-
网络接口配置tui工具:nmtui
-
主机名称配置工具:hostnamectl
status
set-hostname
使用nmcli配置主机名
-
CentOS6之前主机名配置文件:/etc/sysconfig/network
-
CentOS7主机名配置文件:/etc/hostname ,默认没有这个文件,通过DNS反向解析获取主机名,主机名默认为:localhost.localdomain
-
显示主机名信息
hostname
hostnamectl status -
创建并修改文件并生效
hostnamectl set-hostname desktopX.example.com -
删除文件,恢复主机名localhost.localdomain
使用nmcli配置网络
NeworkManager是管理和监控网络设置的守护进程
设备即网络接口,连接是对网络接口的配置。一个网络接口可有多个连接配置,但同时只有一个连接配置生效
-
显示所有包括不活动连接
nmcli con show -
显示所有活动连接
nmcli con show –active -
显示网络连接配置
nmcli con show “System eth0“ -
显示设备状态
nmcli dev status -
显示网络接口属性
nmcli dev show eno16777736 -
创建新连接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 ip4 172.25.X.10/24 gw4 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.25.X.10/24 172.25.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
网络配置文件
-
设备配置被保存在文本文件中
/etc/sysconfig/network-scripts/ifcfg-
帮助文档列出完整选项列表:/usr/share/doc/initscripts-*/sysconfig.txt-
动态配置
DEVICE=ethX HWADDR=0:02:8A:A6:30:45 BOOTPROTO=dhcp ONBOOT=yes Type=Ethernet
-
静态配置
DEVICE=ethX HWADDR=0:02:8A:A6:30:45 IPADDR=192.168.0.123 NETMASK=255.255.255.0 GATEWAY=192.168.0.254 ONBOOT=yes Type=Ethernet
-
动态配置
-
修改连接配置后,需要重新加载配置
-
nmcli con reload
nmcli con down “system eth0” 可被自动激活
nmcli con up “system eth0”
nmcli dev dis eth0 禁用网卡,访止被自动激活
-
nmcli con reload
-
图形工具
- nm-connection-editor
-
字符工具
-
nmtui
nmtui-connect
nmtui-edit
nmtui-hostname
-
nmtui
nmcli实现bonding
-
添加bonding接口(逻辑接口):
nmcli con add type bond con-name mybond0 ifname mybond0 mode active-backup -
添加从属接口(物理接口):
nmcli con add type bond-slave ifname ens7 master mybond0
nmcli con add type bond-slave ifname ens3 master mybond0
注:如无为从属接口提供连接名,则该名称是接口名称加类型构成 -
要启动绑定,则必须首先启动从属接口:
nmcli con up bond-slave-ens7
nmcli con up bond-slave-ens3 -
现在可使用以下方法启动绑定:
nmcli con up mybond0
网络组Network Teaming
-
网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量
-
网络组不同于旧版中bonding技术,提供更好的性能和扩展性
-
网络组由内核驱动和teamd守护进程实现.
-
多种方式runner
-
broadcast
roundrobin
activebackup
loadbalance
lacp (implements the 802.3ad Link Aggregation Control Protocol)
-
broadcast
-
启动网络组接口不会自动启动网络组中的port接口
启动网络组接口中的port接口总会自动启动网络组接口
禁用网络组接口会自动禁用网络组中的port接口
没有port接口的网络组接口可以启动静态IP连接
启用DHCP连接时,没有port接口的网络组会等待port接口的加入 -
创建网络组接口
nmcli con add type team con-name CNAME ifname INAME [config JSON]-
CNAME 连接名
INAME 接口名
JSON 指定runner方式-
格式:'{“runner”: {“name”: “METHOD”}}’
- METHOD 可以是broadcast, roundrobin,activebackup, loadbalance, lacp
-
格式:'{“runner”: {“name”: “METHOD”}}’
-
CNAME 连接名
-
创建port接口
nmcli con add type team-slave con-name CNAME ifname INAME master TEAM-
CNAME 连接名
INAME 网络接口名
TEAM 网络组接口名 -
连接名若不指定,默认为team-slave-IFACE
nmcli dev dis INAME
nmcli con up CNAME
INAME 设备名 CNAME 网络组接口名或port接口
-
-
删除网络组
-
nmcli connection down team0
teamdctl team0 state
nmcli connection show
nmcli connectioni delete team0-eth0
nmcli connectioni delete team0-eth1
nmcli connection show
-
nmcli connection down team0
测试网络工具
-
在命令行下测试网络的连通性
-
显示主机名
hostname -
测试网络连通性
ping
mtr -
显示正确的路由表
ip route -
确定名称服务器使用:
nslookup
host
dig -
跟踪路由
traceroute
tracepath
-
网络客户端工具
交互式
-
ftp,lftp是明文的
-
子命令:
-
单个文件
get(下载单个文件) -
多个文件
mget(可下载多个文件)
mput(上传多个文件)
lftp [-p port] [-u user[,password]] SERVER
-
-
非交互式
-
lftpget URL 非交互式
-
wget [option]… [URL]…
-
-q: 静默模式
-c: 断点续传
-O: 保存位置
–limit-rates=: 指定传输速率
-
-q: 静默模式
-
links URL :字符界面浏览器
-
–dump
–source
-
–dump
原创文章,作者:s,如若转载,请注明出处:http://www.178linux.com/74859