网络协议和管理
-
计算机网络
:指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。-
分类 :
-
局域网
(Local Area Network;LAN) 通常我们常见的“LAN”就是指局域网,这是我们最常见、应用最广的一种网络。 -
城域网
(Metropolitan Area Network;MAN) 这种网络一般来说是在一个城市,但不在同一地理小区范围内的计算机互联。 -
广域网
(Wide Area Network,WAN) 这种网络也称为远程网,所覆盖的范围比城域网(MAN)更广,它一般是在不同城市之间的LAN或者MAN网络互联,地理范围可从几百公里到几千公里。 -
无线网
(Wireless network)指任何型式的无线电计算机网络,普遍和电信网络结合在一起,不需电缆即可在节点之间相互链接。无线电信网络一般被应用在使用电磁波的摇控信息传输系统,像是无线电波作为载波和物理层的网络。
-
-
计算机的性能指标 :
-
速率
:指连接在计算机网络上的主机在数字信道上传送数据的速率,它也称为数据率(data rate)或比特率(bit rate)。速率是计算机网络中最重要的一个性能指标。速率的单位是bit/s(比特每秒)(即bit per second)。 -
带宽
: 本指某个信号具有的频带宽度。信号的带宽
是指该信号所包含的各种不同频率成分所占据的频率范围。
在计算机网络中,带宽用来表示网络的通信线路所能传送数据的能力,因此网络带宽
表示在单位时间内从网络中的某一点到另一点所能通过的“最高数据率”。单位是“比特每秒”,记为bit/s -
吞吐量
:表示在单位时间内通过某个网络(或信道、接口)的数据量,吞吐量受网络的带宽或网络的额定速率的限制。 -
时延
:指数据(一个报文或分组,甚至比特)从网络(或链路)的一端传送到另一端所需的时间。① 发送时延 ② 传播时延 ③ 处理时延 ④ 排队时延
-
时延带宽积
:把以上讨论的网络性能的两个度量—传播时延和带宽相乘,就得到另一个很有用的度量:传播时延带宽积,即时延带宽积=传播时延×带宽。 -
往返时间
(RTT) :表示从发送方发送数据开始,到发送方收到来自接收方的确认(接受方收到数据后便立即发送确认)总共经历的时间。 -
利用率
:分为信道利用率和网络利用率两种。信道利用率指某信道有百分之几的时间是被利用的(有数据通过),完全空闲的信道的利用率是零。网络利用率是全网络的信道利用率的加权平均值。
-
-
-
常见的网络物理组件 :
路由器、交换机、PC机、RJ-45连接器、网络接口卡
-
物理拓扑分类:
-
逻辑拓扑
:逻辑拓扑描述了信息在网络中流动的方式 -
总线拓扑
:所有设备均可接收信号 -
星型拓扑
:通过中心点传输 ;单一故障点 -
扩展星型拓扑
:比星型拓扑的复原能力更强 -
环拓扑
:信号绕环传输 ;单一故障点 -
双环拓扑
:信号沿相反方向传输 ;比单环的复原能力更强 -
全网状拓扑
:容错能力强 ;实施成本高 -
部分网状拓扑
:在容错能力与成本之间寻求平衡
-
OSI(Open System Interconnection)模型的七层结构
-
应用层(Application) :
网络进程访问应用层 为应用程序进程提供网络服务 提供用户身份验证
-
表示层(Presentation) :
数据表示 确保接收系统可以读出该数据 格式化数据 构建数据 协商用于应用层的数据传输语法 提供加密
-
会话层(Session) :
主机间通讯 建立、管理和终止在应用程序之间的会话
-
传输层(Transport) :
传输问题 确保数据传输的可靠性 建立、维护和终止虚拟电脑 通过错误检测和恢复 信息流控制来保障可靠性
-
网络层(Network) :
数据传输 路由数据包 选择传输数据的最佳途径 支持逻辑寻址和路径选择
-
数据链路层(Data Link) :
访问介质 定义如何格式化数据以便进行传输以及如何控制对网络的访问 支持错误检测
-
物理层(Physical) :
二进制传输 为启动、维护以及物理链路定义了电气规范、机械规范、过程规范和功能规范。
PDU
-
PDU
:Protocol Data Unit,协议数据单元是指对等层次之间传递的数据单位 - 物理层的PDU是数据位bit
- 数据链路层的PDU是数据帧frame
- 网络层的PDU是数据包packet
- 传输层的PDU是数据段segment
- 其他更高层次的PDU是消息message
三种通讯方式
- 单播
- 广播
- 组播
路由器
- 为了实现路由,路由器需要做下列事情 :
- 分隔广播域
- 选择路由表中到达目标最好的路径
- 维护和检查路由信息
- 连接广域网
-
路由
:把一个数据包从一个设备发送到不同网络里的另一个设备上去。这些工作依靠路由器来完成。路由器只关心网络的状态和决定网络中的最佳路径。路由的实现依靠路由器中的路由表来完成。
VLAN
- 分隔广播域
- 安全
- 灵活管理
VLAN 标签各字段含义
-
TPID
:Tag Protocol Identifier(标签协议标识符),2Byte,表示帧类型,取值为 0x8100时表示IEEE 802.1Q的VLAN数据帧。如果不支持802.1Q的设备收到这样的帧, 会将其丢弃,各设备厂商可以自定义该字段的值。当邻居设备将TPID值配置为非 0x8100时, 为了能够识别这样的报文,实现互通,必须在本设备上修改TPID值,确保 和邻居设备的TPID值配置一致 -
PRI
:Priority,3bit,表示数据帧的802.1p(是IEEE 802.1Q的扩展协议)优先级。取 值范围为0~7,值越大优先级越高。当网络阻塞时,交换机优先发送优先级高的数据帧 -
CFI
:Canonical Format Indicator(标准格式指示位),1bit,表示MAC地址在不同的 传输介质中是否以标准格式进行封装,用于兼容以太网和令牌环网。CFI取值为0表示 MAC地址以标准格式进行封装,为1表示以非标准格式封装。在以太网中,CFI的值为0 -
VID
:VLAN ID,12bit,表示该数据帧所属VLAN的编号。VLAN ID取值范围是0~ 4095。由于0和4095为协议保留取值,所以VLAN ID的有效取值范围是1~4094
TCP/IP 协议栈
-
Transmission Control Protocol/Internet Protocol 传输控制协议/因特网互联协议
-
TCP/IP是一个Protocol Stack,包括TCP、IP、UDP、 ICMP、RIP、TELNET、FTP、SMTP、ARP等许多协议
-
最早发源于1969年美国国防部(缩写为DoD)的因特 网的前身ARPA网项目,1983年1月1日,TCP/IP取代了 旧的网络控制协议NCP,成为今天的互联网和局域网的 基石和标准,由互联网工程任务组负责维护
-
共定义了四层
-
和OSI参考模型的分层有对应关系
TCP/IP 模型的五层结构
- 应用层
- 传输层
- Internet层
- 数据链路层----------->也可与物理层统称为网络访问层
- 物理层---------------->也可与数据链路层统称为网络访问层
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(Transmission Control Protocol) 传输控制协议
-
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接
-
位码即tcp标志位,有6种标示:
1 :SYN(synchronous建立联机)
2 :ACK(acknowledgement 确认)
3 :PSH(push传送)
4 :FIN(finish结束)
5 :RST(reset重置)
6 :URG(urgent紧急)
sequence number(顺序号码)
acknowledge number(确认号码)
establish 建立,创建
序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。
确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。
确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效
同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。
终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接
ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号
三次分手
》阿强给阿珍打电话《
阿强:喂,阿珍
阿珍:喂,你是谁
阿强:我是阿强
。。。开始通讯。。。
第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
4次挥手
》阿强和阿珍的爱情《
阿珍说:对不起,我不喜欢你了,
阿强:好的,我知道你不喜欢我了
阿珍:你知道了,那分手吧,再见
阿强:好吧,分手吧,再见
。。。断开连接。。。
四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。
由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
中断连接端可以是客户端,也可以是服务器端。
第一次挥手:客户端发送一个FIN=M,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。意思是说"我客户端没有数据要发给你了",但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据。
第二次挥手:服务器端收到FIN后,先发送ack=M+1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。这个时候客户端就进入FIN_WAIT_2 状态,继续等待服务器端的FIN报文。
第三次挥手:当服务器端确定数据已发送完成,则向客户端发送FIN=N报文,告诉客户端,好了,我这边数据发完了,准备好关闭连接了。服务器端进入LAST_ACK状态。
第四次挥手:客户端收到FIN=N报文后,就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,所以发送ack=N+1后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。服务器端收到ACK后,就知道可以断开连接了。客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了。最终完成了四次握手。
上面是一方主动关闭,另一方被动关闭的情况,实际中还会出现同时发起主动关闭的情况,
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
IP地址
-
它们可唯一标识 IP 网络中的每台设备
-
每台主机(计算机、网络设备、外围设备)必须具有唯一的地址
-
IP地址由两部分组成
- 网络ID:
- 标识网络
- 每个网段分配一个网络ID
- 主机 ID:
- 标识单个主机
- 由组织分配给各设备
- 网络ID:
-
IPv4地址格式:点分十进制记法
IP地址分类
-
A类:
0 000 0000 - 0 111 1111: 1-127
网络数: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
特殊地址
-
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 mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分 -
子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在广域网上
CentOS 6 网卡名称
-
接口命名方式: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
网络配置方式
-
静态指定:
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
ifconfig IFACE [up|down]
ifconfig interface [aftype] options | address … ifconfig IFACE IP/netmask [up]
ifconfig IFACE IP netmask NETMASK
注意:立即生效
启用混杂模式:[-]promisc -
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
配置动态路由
-
通过守护进程获取动态路由
- 安装quagga包
- 支持多种路由协议:RIP、OSPF和BGP
- 命令vtysh配置
-
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:扩展格式
- -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
- 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
- show [dev IFACE]:指定接口
[up]:仅显示处于激活状态的接口
- set dev IFACE
-
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
-
清空路由表: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: 裸套接字相关
-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连接
- ss -o state established ‘( dport = :http or sport = :http )’ 显示所有已建立 的HTTP连接
- ss -s 列出当前socket详细信息
网络配置文件
-
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
- 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”,YES将允许dhcp server分配 的dns服务器信息直接覆盖至/etc/resolv.conf文件,NO不允许修改resolv.conf
-
设备配置被保存在文本文件中
- /etc/sysconfig/network-scripts/ifcfg-
- 帮助文档列出完整选项列表:/usr/share/doc/initcripts*/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
-
网卡别名
-
对虚拟主机有用
-
将多个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
- 注意:service network restart 生效
- 参考:/usr/share/doc/initscripts-*/sysconfig.txt
网络接口配置-bonding
-
Bonding
将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。直 接给两块网卡设置同一IP地址是不可以的。通过bonding,虚拟一块网卡对外提供 连接,物理网卡的被修改为相同的MAC地址
Bonding工作模式
-
共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配置
-
创建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
-
https://www.kernel.org/doc/Documentation/networking/bonding.txt
-
CentOS 7采用传统命名方式
-
使用传统命名方式:
-
(1) 编辑/etc/default/grub配置文件
GRUB_CMDLINE_LINUX=“rhgb quiet net.ifnames=0”
或:修改/boot/grub2/grub.cfg -
(2) 为grub2生成其配置文件
grub2-mkconfig -o /etc/grub2.cfg -
(3) 重启系统
CentOS 7网络配置工具
- CentOS7主机名
- 配置文件:/etc/hostname ,默认没有此文件,通过DNS反向解析获取主机 名,主机名默认为:localhost.localdomain
- 显示主机名信息
- hostname
- hostnamectl status
- 设置主机名
- hostnamectl set-hostname centos7.magedu.com
- 删除文件/etc/hostname,恢复主机名localhost.localdomain
- CentOS 7网络配置工具
- 图形工具: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
-
修改配置文件执行生效:systemctl restart network
- nmcli con reload
-
nmcli命令生效: nmcli con down eth0 ;nmcli con up eth0
-
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 禁用网卡,访止被自动激活
-
图形工具
- nm-connection-editor
-
字符工具
- nmtui
- nmtui-connect
- nmtui-edit
- nmtui-hostname
nmcli实现bonding
-
添加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
网络组Network Teaming
-
网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量
-
网络组不同于旧版中bonding技术,提供更好的性能和扩展性
-
网络组由内核驱动和teamd守护进程实现
-
启动网络组接口不会自动启动网络组中的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
创建port接口
- nmcli con add type team-slave con-name CNAME ifname INAME master
TEAM
CNAME 连接名
INAME 网络接口名
TEAM 网络组接口名 - 连接名若不指定,默认为team-slaveIFACE
- nmcli dev dis INAME
- nmcli con up CNAME
- INAME 设备名 CNAME 网络组接口名或port接口
网络组示例
-
nmcli con add type team con-name myteam0 ifname team0 config ‘{“runner”: {“name”: “loadbalance”}}’ ipv4.addresses 192.168.1.100/24 ipv4.method manual
-
nmcli con add con-name team0-eth1 type team-slave ifname eth1 master team0
-
nmcli con add con-name team0-eth2 type team-slave ifname eth2 master team0
-
nmcli con up myteam0
-
nmcli con up team0-eth1
-
nmcli con up team0-eth2
-
teamdctl team0 state
-
nmcli dev dis eth1
删除网络组
- nmcli connection down team0
- teamdctl team0 state
- nmcli connection show
- nmcli connectioni delete team0-eth0
- nmcli connectioni delete team0-eth1
- nmcli connection show
网桥
桥接:把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网 口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互 相转发。网桥就是这样一个设备,它有若干个网口,并且这些网口是桥接起来 的。与网桥相连的主机就能通过交换机的报文转发而互相通信
配置实现网桥
- 创建软件网桥
nmcli con add con-name mybr0 type bridge 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 addbr | delbr br0
- 添加和删除网桥中网卡 brctl addif | delif br0 eth0
- 注意:NetworkManager只支持以太网接口接口连接到网桥,不支持聚合接口
Ubuntu网络配置
-
网卡名称:
默认ubuntu的网卡名称和CentOS 7类似,如:ens33,ens38等 -
修改网卡名称为传统命名方式:
- 修改配置文件为下面形式
- vi /etc/default/grub - GRUB_CMDLINE_LINUX=“net.ifnames=0”
- 生效新的grub.cfg文件
- grub-mkconfig -o /boot/grub/grub.cfg
- reboot
- 修改配置文件为下面形式
-
官网文档:
https://help.ubuntu.com/lts/serverguide/network-configuration.html.zh-CN -
修改网卡配置文件后需执行命令生效:netplan apply
-
查看ip和gateway
ip addr
route -n -
查看DNS
ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Dec 12 11:36 /etc/resolv.conf > …/run/systemd/resolve/stub-resolv.confsystemd-resolve --status
-
修改主机名
hostnamectl set-hostname ubuntu1904
t0
- 工具包 yum install bridge-utils
- 查看网桥 brctl show
- 查看CAM表 brctl showmacs br0
- 添加和删除网桥 brctl addbr | delbr br0
- 添加和删除网桥中网卡 brctl addif | delif br0 eth0
- 注意:NetworkManager只支持以太网接口接口连接到网桥,不支持聚合接口
Ubuntu网络配置
-
网卡名称:
默认ubuntu的网卡名称和CentOS 7类似,如:ens33,ens38等 -
修改网卡名称为传统命名方式:
- 修改配置文件为下面形式
- vi /etc/default/grub - GRUB_CMDLINE_LINUX=“net.ifnames=0”
- 生效新的grub.cfg文件
- grub-mkconfig -o /boot/grub/grub.cfg
- reboot
- 修改配置文件为下面形式
-
官网文档:
https://help.ubuntu.com/lts/serverguide/network-configuration.html.zh-CN -
修改网卡配置文件后需执行命令生效:netplan apply
-
查看ip和gateway
ip addr
route -n -
查看DNS
ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Dec 12 11:36 /etc/resolv.conf > …/run/systemd/resolve/stub-resolv.confsystemd-resolve --status
-
修改主机名
hostnamectl set-hostname ubuntu1904