网络管理

网络概念

  • 网络应用程序

    • 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、视频
        人与人的交互
        端到端的延时至关重要
  • 网络的特征

    • 速度、成本、安全性、可用性、可扩展性、可靠性、拓扑
  • 拓扑结构

    • 物理拓扑分类:总线拓扑、环状拓扑、双环拓扑、星型拓扑、扩展星型拓扑、全网拓扑、部分全网拓扑

    • 逻辑拓扑

网络设备

  • Hub集线器

    • 基于CSMA/CD;
      共享带宽、半双工
      Hub并不记忆该信息包是由哪个MAC地址发出,哪个MAC地址在Hub的哪个端口
  • 以太网桥

    • 交换式以太网的优势

      • 扩展了网络带宽
      • 分割了网络冲突域,使网络冲突被限制在最小的范围内
      • 交换机作为更加智能的交换设备,能够提供更多用户所要求的功能:优先级、虚拟网、远程检测……
    • 以太网桥的工作原理:

      • 以太网桥监听数据帧中源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
    • Fiber-Optic:
  • UTP:

    • T568B:直通线
      T568A:交叉线,13对调,26对调;
    • 交换机已经做完交叉线了;

      橙白、橙、绿白、蓝、蓝白、绿、棕白、棕 ,橙蓝绿棕,3、5对调

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
    1. 只收到服务器的ACK,客户端会进入FIN_WAIT_2状态,后续当收到服务端的FIN时,回应发送一个ACK,会进入到TIME_WAIT状态,这个状态会持续2MSL(TCP报文段在网络中的最大生存时间,RFC 1122标准的建议值是2min).客户端等待2MSL,是为了当最后一个ACK丢失时,可以再发送一次。因为服务端在等待超时后会再发送一个FIN给客户端,进而客户端知道ACK已丢失

    2. 只有服务端的FIN时,回应一个ACK给服务端,进入CLOSING状态,然后接收到服务端的ACK时,进入TIME_WAIT状态

    3. 同时收到服务端的ACK和FIN,直接进入TIME_WAIT状态

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位借位)
      • 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
    • 私有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地址

基本网络配置

  • 将Linux主机接入到网络,需要配置网络相关设置。

    • 一般包括如下内容:
      主机名
      IP/netmask
      路由:默认网关
      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
  • 动态分配:

    • 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 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
  • 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
    • 常用组合:
      -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 eno16777736
  • 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: 本机可用
      • [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/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 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:计时器信息
    • 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/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文件中
    `配置网关:`
      `/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
  • 网卡别名
    对虚拟主机有用
    将多个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

  • 网络配置

    • 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

网络接口配置-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使用基于硬件,设备拓扑和设置类型命名:

    1. 网卡命名机制
      systemd对网络设备的命名方式
      (a) 如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,且可预测则根据此索引进行命名,例如eno1
      (b) 如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,例如ens1
      (c) 如果硬件接口的物理位置信息可用,则根据此信息进行命名,例如enp2s0
      (d) 如果用户显式启动,也可根据MAC地址进行命名,enx2387a1dc56
      (e) 上述均不可用时,则使用传统命名机制

    2. 网卡名称
      基于BIOS支持启用biosdevname软件
      内置网卡:em1,em2
      pci卡:pYpX   Y:slot ,X:port

    3. 名称组成格式
      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

  • 使用传统命名方式:

    1. 编辑/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

    2. 重启系统

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 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
  • 修改配置文件执行生效:

    • 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 禁用网卡,访止被自动激活
  • 图形工具

    • nm-connection-editor
  • 字符工具

    • nmtui
      nmtui-connect
      nmtui-edit
      nmtui-hostname

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)
  • 启动网络组接口不会自动启动网络组中的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-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

测试网络工具

  • 在命令行下测试网络的连通性

    • 显示主机名
      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=: 指定传输速率
  • links URL :字符界面浏览器

    • –dump
      –source

原创文章,作者:s,如若转载,请注明出处:http://www.178linux.com/74859

(0)
上一篇 2017-05-06 21:40
下一篇 2017-05-06 22:13

相关推荐

  • 练习

    练习 显示/proc/meminfo文件中以大小s开头的行;     显示/etc/passwd文件中不以/bin/bash结尾的行     找出/etc/passwd中的两位或三位数     显示/etc/grub2.cfg文件中,至少以一个空白字符开头的 且后面存非空白字符的行   &…

    Linux干货 2016-08-12
  • 书写博客的作用

    博客,一个对于我们是一个既贴近又遥远的词汇。在我们生活中常常听到这个词汇,但是很大的一部分人并不会去发布属于自己的博客。而我在这里会发表一些对于博客作用的认识,以供大家借鉴。

    2018-03-26
  • 马哥教育网络班19期+第九周课程练习

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin),分别这两类用户的个数,通过字符串比较来实现。 #!/bin/bash for user_shell in `awk -F: '{print $7}'&nbsp…

    Linux干货 2016-07-01
  • Linux用户、组和权限管理

    知识框架图 学习笔记 用户和组 UID root:0 系统用户:1-499、1-999 普通用户:500+、1000+ GID 管理员组:0 系统组:1-499、1-999 普通组:500+、1000+ 安全上下文 进程:运行中的程序 进程所能访问资源的权限取决于进程运行用户本身 组的类别 主要组 用户有且只能有一个主要组 组名=用户名,组中只能有一个用户 …

    2018-03-17
  • ☞rsyslog

    rsyslog 概述 rsyslog支持的facility与priority facility:设施、信道: priority:级别 rsyslog程序 配置文件 配置日志记录级别和路径 配置日志记录在远程rsyslog server rsyslog server端 rsyslog client端 测试远程服务器是否记录日志 rsyslog记录在MySQL中…

    Linux干货 2016-10-16
  • linux内核(kernel)版本号的意义

      在linux下有一个目录,即/usr/src/kernels/目录,下面记载着一个linux系统的内核文件, 例如:2.6.18-164.el5-x86_64、2.6.18-8.el5-x86_64和2.6.18-194.el5-x86_64等,这些文件编号意味着什么呢?例如2.6.18代表着什么?el5代表着什么?x86_64又代表着什么? …

    Linux干货 2016-01-14