网络管理

网络概念

  • 网络应用程序

    • 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)
ss
上一篇 2017-05-06
下一篇 2017-05-06

相关推荐

  • rsync+inotify实现数据实时同步备份

    定时备份和实时备份        说到备份,无疑于定时备份和实时同步备份。定时备份可以通过脚本或者Crontab来实现,而实时同步备份可以通过某些接口监控文件的各种变化情况来实现的(比如内核接口inotify);通过对比可以发现对数据信息要求高的环境使用实时同步备份可以更好更有利的保护数据的安全性。 软件介绍之rsyn…

    Linux干货 2015-02-28
  • 如何监控Linux文件系统事件:inotify使用指南

    如何监控Linux文件系统事件:inotify使用指南 §·inotify初识 Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。学习如何将 inotify 集成到您的应用程序中,并发现一组可用来进一步自动化系统治理的命令行工具。 §·inoti…

    Linux干货 2016-10-30
  • Lnmp安装脚本

    1、源码编译安装LNMP架构环境; 此题略 此链接为安装nginx时,编译参数和各个模块和第三方模块的介绍,十分丰富,安装前可以参考学习 https://www.nginx.com/resources/admin-guide/installing-nginx-open-source/ 2、编写一个脚本完成以下功能:    (1)、一键搭建…

    Linux干货 2016-12-05
  • class-6 积累应用

    1、三种权限rwx对文件和目录的不同意义     ## 读写执行对于文件的意义         r:针对于文本文件         w:可修改内容,但不能删除文件本身,需要x权限配合  &n…

    Linux干货 2016-08-05
  • linux echo命令用法实例

           对于初学者来说,掌握一些基本命令的常用用法是必须的。本文列举了echo命令的几个常用用法并加以实例说明,以作回顾、参考。       echo命令常用作打印输出字符串,根据echo帮助文件可以获得以下信息:        语法 echo…

    2017-05-20
  • Tomcat详解

    Tomcat详解 1、tomcat安装 tomcat的组件:<Server> <Service> <connector/> <connector/> <Engine> <Host /> <Host> <Context/> … </Host> &lt…

    2017-04-27