18-Linux网络协议和管理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/dushansao/article/details/102728543

网络协议和管理

  • 计算机网络:指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

    • 分类

      • 局域网(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:
      • 标识单个主机
      • 由组织分配给各设备
  • 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]:仅显示处于激活状态的接口
  • 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.conf

    systemd-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.conf

    systemd-resolve --status

  • 修改主机名
    hostnamectl set-hostname ubuntu1904

猜你喜欢

转载自blog.csdn.net/dushansao/article/details/102728543