未经博主允许,禁止转载本博客任何内容,如需转载或内容雷同请留言,谢谢合作,不胜感激!

网络协议和管理

Linux基础 毛竹、 1059℃ 0评论

网络概念

OSI模型

网络设备

TCP/IP

IP地址

配置网络

实现网络组

测试网络

网络工具

什么是网络

数据共享的功能和优点

  • 数据和应用程序
  • 资源
  • 网络存储
  • 备份设备

常见的网络物理组件

网络应用程序

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

网络的特征

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

带宽

物理拓扑分类

  • 物理拓扑描述了物理设备的布线方式

逻辑拓扑

  • 逻辑拓扑描述了信息在网络中流动的方式

总线拓扑

  • 所有设备均可接收信号

星型拓扑

  • 通过中心点传输
  • 单一故障点

拓展星型拓扑

  • 比星型拓扑的复原能力更强

环拓扑

  • 信号绕环传输
  • 单一故障点

双环拓扑

  • 信号沿相反方向传输
  • 比单环的复原能力更强

全网状拓扑

  • 容错能力强
  • 实施成本高

部分网状拓扑

  • 在容错能力与成本之间寻求平衡

了解主机到主机通信

  • 旧模型
    • 专有产品
    • 由一个厂商控制应用程序和嵌入的软件
  • 基于标准的模型
    • 多厂商软件
    • 分层方法

网络模型分层

  • 降低复杂性
  • 标准化接口
  • 简化模块化设计
  • 确保技术的互操作性
  • 加快发展速度
  • 简化教学

 

 

OSI模型的七层结构

数据封装

数据解封

对等通信

PDU

  • PDU:Protocol Data Unit,协议数据单元是指对等层次之间传递的数据单位
  • 物理层的 PDU是数据位 bit
  • 数据链路层的 PDU是数据帧 frame
  • 网络层的PDU是数据包 packet
  • 传输层的 PDU是数据段 segment
  • 其他更高层次的PDU是消息 message

三种通信模式

  • 单播

  • 广播

  • 组播

局域网Local Area Network

LAN 组成

  • Computers
    •  PCs
    • Servers
  • Interconnections
    • NICs
    • Media
  • Networkdevices
    •  Hubs
    • Switches
    • Routers
  • Protocols
    •  Ethernet
    • IP
    • ARP
    • DHCP

LAN标准

Ethernet Frame结构

数据链路层

MAC地址

HUB集线器

  • Hub:多端口中继器
  • Hub并不记忆该信息包是由哪个MAC地址发出,哪个MAC地址在Hub的哪个端口
  • Hub的特点:
    • 共享带宽
    • 半双工

 

以太网桥

  • 交换式以太网的优势
    • 扩展了网络带宽
    • 分割了网络冲突域,使网络冲突被限制在最小的范围内
    • 交换机作为更加智能的交换设备,能够提供更多用户所要求的功能:优先级、虚拟网、远程检测……
  • 以太网桥的工作原理
    • 以太网桥监听数据帧中源MAC地址,学习MAC,建立MAC表
    • 对于未知MAC地址,网桥将转发到除接收该帧的端口之外的所有端口
    • 当网桥接到一个数据帧时,如果该帧的目的位于接收端口所在网段上,它就过滤掉该数据帧;如果目的MAC地址在位于另外一个端口,网桥就将该帧转发到该端口
    • 当网桥接到广播帧时候,它立即转发到除接收端口之外的所有其他端口

HUB和交换机

  • 集线器属于OSI的第一层物理层设备,而网桥属于OSI的第二层数据链路层设备
  • 从工作方式来看,集线器是一种广播模式,所有端口在一个冲突域里面。网桥的可以通过端口隔离冲突
  • Hub是所有共享总线和共享带宽。网桥每个端口占一个带宽

路由器

  • 为了实现路由,路由器需要做下列事情:
    • 分隔广播域
    • 选择路由表中到达目标最好的路径
    • 维护和检查路由信息
    • 连接广域网

路由

  • 路由:把一个数据包从一个设备发送到不同网络里的另一个设备上去。这些工作依靠路由器来完成。路由器只关心网络的状态和决定网络中的最佳路径。路由的实现依靠路由器中的路由表来完成

VLAN

  • 分隔广播域
  • 安全
  • 灵活管理

 

VLAN = 广播域= 逻辑网络 (Subnet)

分层的网络架构

TCP/IP协议栈

  • Transmission Control Protocol/InternetProtocol 传输控制协议/因特网互联协议
  • TCP/IP是一个ProtocolStack,包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP等许多协议
  • 最早发源于美国国防部(缩写为DoD)的因特网的前身ARPA网项目,1983年1月1日,TCP/IP取代了旧的网络控制协议NCP,成为今天的互联网和局域网的基石和标准,由互联网工程任务组负责维护
  • 共定义了四层
  • 和ISO参考模型的分层有对应关系

 

TCP/IP协议栈和OSI模型

TCP/IP应用层

 

  • Filetransfer
    • FTP
    • TFTP
    • Network FileSystem
  • E-mail
    • Simple Mail TransferProtocol
  • Remotelogin
    • Telnet
    • rlogin
  • Networkmanagement
    • Simple NetworkManagement Protocol
  • Namemanagement
    • Domain NameSystem

传输层

可靠性VS.高效性

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确认后才能再继续传送后面数据,由Windowsize value * Window size scaling factor(此值在三次握手阶段TCP选项Window scale协商得到)得出此值
  • 校验和:提供额外的可靠性
  • 紧急指针:标记紧急数据在数据字段中的位置
  • 选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节
    • 常见选项:
      • 最大报文段长度:MaxiumSegment Size,MSS,通常1460字节
      • 窗口扩大:WindowScale
      • 时间戳: Timestamps

TCP包头选项

  • 1最大报文段长度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

  • 2窗口扩大

为了扩大窗口,由于TCP首部的窗口大小字段长度是16位,所以其表示的最大数是65535。但是随着时延和带宽比较大的通信产生(如卫星通信),需要更大的窗口来满足性能和吞吐率,所以产生了这个窗口扩大选项

  • 3时间戳

可以用来计算RTT(往返时间),发送方发送TCP报文时,把当前的时间值放入时间戳字段,接收方收到后发送确认报文时,把这个时间戳字段的值复制到确认报文中, 当发送方收到确认报文后即可计算出RTT。也可以用来防止回绕序号PAWS,也可以说可以用来区分相同序列号的不同报文。因为序列号用32为表示,每2^32个序列号就会产生回绕,那么使用时间戳字段就很容易区分相同序列号的不同报文

映射第四层到应用程序

TCP协议PORT

  • 传输层通过port号,确定应用层协议
  • Port number:
  • tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路
    • 0-65535
  • udp:UserDatagram 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三次握手

TCP四次挥手

有限状态机FSM:Finite State Machine

  • CLOSED没有任何连接状态
  • LISTEN侦听状态,等待来自远方TCP端口的连接请求
  • SYN-SENT在发送连接请求后,等待对方确认
  • SYN-RECEIVED在收到和发送一个连接请求后,等待对方确认
  • ESTABLISHED代表传输连接建立,双方进入数据传送状态
  • FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认
  • FIN-WAIT-2主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
  • TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
  • CLOSE-WAIT被动关闭,收到对方发来的关闭连接请求,并已确认
  • LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
  • CLOSING 双方同时尝试关闭传输连接,等待对方确认

有限状态机

  • 客户端先发送一个FIN给服务端,自己进入了FIN_WAIT_1状态,这时等待接收服务端的报文,该报文会有三种可能:
    • 只有服务端的ACK
    • 只有服务端的FIN
    • 基于服务端的ACK,又有FIN
  • 1、只收到服务器的ACK,客户端会进入FIN_WAIT_2状态,后续当收到服务端的FIN时,回应发送一个ACK,会进入到TIME_WAIT状态,这个状态会持续2MSL(TCP报文段在网络中的最大生存时间, RFC1122标准的建议值是2min). 客户端等待2MSL,是为了当最后一个ACK丢失时,可以再发送一次。因为服务端在等待超时后会再发送一个FIN给客户端,进而客户端知道ACK已丢失
  • 2、只有服务端的FIN时,回应一个ACK给服务端,进入CLOSING状态,然后接收到服务端的ACK时,进入TIME_WAIT状态
  • 3、同时收到服务端的ACK和FIN,直接进入TIME_WAIT状态

客户端的典型状态转移

  • 客户端通过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指定孤儿连接在内核中生存的时间

TCP协议中的三次握手和四次挥手

客户端的三次握手和四次挥手

服务器端的三次握手和四次挥手

sync半连接和accept全连接队列

  • ss–lnt
  • /proc/sys/net/ipv4/tcp_max_syn_backlog 未完成连接队列大小,建议调整大小为1024以上
  • /proc/sys/net/core/somaxconn 完成连接队列大小,建议调整大小为1024以上

TCP端口号

TCP序列和确认号

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滑动窗口

拥塞控制

  • 网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间, 若对网络中某一资源的需求超过了该资源所能提供的可承受的能力,网络的性 能就会变坏。此情况称为拥塞
  • TCP为提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。即所谓的拥塞控制
  • TCP拥塞控制的标准文档是RFC5681,其中详细介绍了拥塞控制的四个部分: 慢启动(slow start)、拥塞避免(congestion avoidance)、快速重传(fast retransmit)和快速恢复(fast recovery)。拥塞控制算法在Linux下有多种实现,比如reno算法、vegas算法和cubic算法等。它们或者部分或者全部实现了上述四个部分
  • 当前所使用的拥塞控制算法
    • /proc/sys/net/ipv4/tcp_congestion_control

UDP特性

  • 工作在传输层
  • 提供不可靠的网络访问
  • 非面向连接协议
  • 有限的错误检查
  • 传输性能高
  • 无数据恢复特性

UDP包头

Internet层

Internet Control Message Protocol

Address Resolution Protocol

ARP

[root@centos7 ~]#ip neigh

192.168.74.1 dev eth0 lladdr 00:50:56:c0:00:01 REACHABLE

192.168.74.254 dev eth0 lladdr 00:50:56:e3:29:de STALE

192.168.199.1 dev eth1 lladdr d4:ee:07:52:3a:46 STALE

192.168.199.207 dev eth1 lladdr ac:c1:ee:7b:a3:5b STALE

[root@centos7 ~]#arp -n

Address HWtype HWaddress Flags Mask Iface
192.168.74.1 ether 00:50:56:c0:00:01 C eth0
192.168.74.254 ether 00:50:56:e3:29:de C eth0
192.168.199.1 ether d4:ee:07:52:3a:46 C eth1
192.168.199.207 ether ac:c1:ee:7b:a3:5b C eth1

主机到主机的包传递 (1 of 22)

主机到主机的包传递 (2 of 22)

主机到主机的包传递 (3 of 22)

主机到主机的包传递 (4 of 22)

主机到主机的包传递 (5 of 22)

主机到主机的包传递 (6 of 22)

主机到主机的包传递 (7 of 22)

主机到主机的包传递 (8 of 22)

主机到主机的包传递 (9 of 22)

主机到主机的包传递 (10 of 22)

主机到主机的包传递 (11 of 22)

主机到主机的包传递 (12 of 22)

主机到主机的包传递 (13 of 22)

主机到主机的包传递 (14 of 22)

主机到主机的包传递 (15 of 22)

主机到主机的包传递 (16 of 22)

主机到主机的包传递 (17 of 22)

主机到主机的包传递 (18 of 22)

主机到主机的包传递 (19 of 22)

主机到主机的包传递 (20 of 22)

主机到主机的包传递 (21 of 22)

主机到主机的包传递 (22 of 22)

默认网关

反向ARP

Internet协议特征

  • 运行于 OSI网络层
  • 面向无连接的协议
  • 独立处理数据包
  • 分层编址
  • 尽力而为传输
  • 无数据恢复功能

IP PDU报头

  • 版本:占4位,指 IP协议的版本目前的IP协议版本号为4
  • 首部长度:占4位,可表示的最大数值是15个单位,一个单位为4字节,因此IP的首部长度的最大值是60字节
  • 区分服务:占8位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过.后改名为区分服务.只有在使用区分服务(DiffServ)时,这个字段才起作用.一般的情况下不使用
  • 总长度:占16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为65535 字节.总长度必须不超过最大传送单元 MTU
  • 标识:占16位,它是一个计数器,通常,每发送一个报文,该值会加1, 也用于数据包分片,在同一个包的若干分片中,该值是相同的
  • 标志(flag):占3位,目前只有后两位有意义
  • DF: Don‘tFragment,中间的一位,只有当 DF=0 时才允许分片
  • MF: MoreFragment,最后一位,MF=1表示后面还有分片。MF=0 表示最后一个分片
  • 片偏移:占12位,指较长的分组在分片后,该分片在原分组中的相对位置.片偏移以8个字节为偏移单位
  • 生存时间:占8位,记为TTL(Time To Live) 数据报在网络中可通过的路由器数的最大值,TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字RFC 指定,当前值为 发送 ICMP 回显应答时经常把 TTL 设为最大值 255
  • 协议:占8位,指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据部分上交给哪个处理过程, 1表示为 ICMP协议, 2表示为 IGMP 协议, 6表示为TCP 协议, 17表示为 UDP 协议
  • 首部检验和:占16位,只检验数据报的首部不检验数据部分.这里不采用 CRC 检验码而采用简单的计算方法
  • 源地址和目的地址:都各占4字节,分别记录源地址和目的地址

IP PDU报头示例

  • 片偏移以8个字节为偏移单位,假定MTU=1500
  • 三个包标识 ID都相同,三个包DF都为0,前两个MF=1,最后一个MF=0

协议域

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

公有IP地址

私有IP地址

特殊地址

  • 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服务器获取地址,系统会为主机分配这样地址

保留地址

子网掩码

有子网的子网络掩码

子网掩码的8位

可变长度子网掩码

Subnet

优化IP地址分配

跨网络通信

  • 跨网络通信:路由
  • 路由分类:
    • 主机路由
    • 网络路由
    • 默认路由
  • 优先级:精度越高,优先级越高

动态主机配置协议DHCP

基本网络配置

  • 将Linux主机接入到网络,需要配置网络相关设置。
  • 一般包括如下内容:
    • 主机名
    • IP/netmask
    • 路由:默认网关
    • DNS服务器
      • 主DNS服务器
      • 次DNS服务器
      • 第三DNS服务器

Centos6网卡名称

  • 接口命名方式:CentOS6
    • 以太网: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
  • 添加:routeadd
    • route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
    • 目标:168.1.3 网关:172.16.0.1
      • route add -host 192.168.1.3 gw 172.16.0.1 dev eth0
    • 目标: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
  • 删除:routedel
    • route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]
    • 目标:168.1.3 网关:172.16.0.1
      • route del -host 192.168.1.3
    • 目标: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 andtunnels
    • 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
    • [labelLABEL]:添加地址时指明网卡别名
    • [scope {global|link|host}]:指明作用域
      • global: 全局可用
      • link: 仅链接可用
      • host: 本机可用
    • [broadcast ADDRESS]:指明广播地址
  • ip address show – look at protocoladdresses
    • [dev DEVICE]
    • [label PATTERN]
    • [primary and secondary]
  • ipaddress 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 tablemanagement
    • 添加路由: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信息。
  • 选项:
    • -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-scripts/ifcfg-<name>
    • 帮助文档列出完整选项列表:/usr/share/doc/initcripts-*/sysconfig.txt

主机名和本地解析器

  • 配置当前主机的主机名:
    • hostname[HOSTNAME]
    • /etc/sysconfig/network
    • HOSTNAME=
  • 解析器执行正向和逆向查询
  • /etc/hosts
    • 本地主机名数据库和IP地址的映像
    • 对小型独立网络有用
    • 通常,在使用DNS前检查
    • getenthosts 查看/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 AFQDN
  • 反向解析:IP–>FQDN
    • dig -x IP
    • host -t PTR IP

网络配置文件

  • /etc/sysconfig/network-scripts/route-IFACE
  • 注意:需servicenetwork restart生效
  • 两种风格:
    • TARGET viaGW
      • 如:10.0.0.0/8 via 172.16.0.1
  • 每三行定义一条路由

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

  • 注意:servicenetwork restart 生效
  • 参考:/usr/share/doc/initscripts-*/sysconfig.txt

网卡接口配置-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接口上传送所有的报文,提供容错能力
  • 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

Centos7网络属性配置

  • CentOS 6之前,网络接口使用连续号码命名:eth0、eth1等,当增加或删除网卡时,名称可能会发生变化
  • CentOS 7使用基于硬件,设备拓扑和设置类型命名:
  •  (1) 网卡命名机制
    • systemd对网络设备的命名方式
      • (a) 如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,且可预测则根据此索引进行命名,例如eno1
      • (b) 如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测, 则根据此索引进行命名,例如ens1
      • (c) 如果硬件接口的物理位置信息可用,则根据此信息进行命名,例如enp2s0
      • (d) 如果用户显式启动,也可根据MAC地址进行命名,enx2387a1dc56
      • (e) 上述均不可用时,则使用传统命名机制

网络名称

  • 基于BIOS支持启用biosdevname软件
    • 内置网卡:em1,em2
    • pci卡:pYpX Y:slot ,X:port
  •  (2) 名称组成格式
    • en: Ethernet 有线局域网
    • wl: wlan 无线局域网
    • ww: wwan无线广域网
  • 名称类型:
    • o<index>: 集成设备的设备索引号
    • s<slot>: 扩展槽的索引号x<MAC>: 基于MAC地址的命名
    • p<bus>s<slot>: enp2s1

采用传统命名方式

  •  使用传统命名方式:
  • (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) 重启系统

Centos7网络配置工具

  • 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

使用nmcli配置网络

  • 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.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

nmcli命令

  • 修改连接配置后,需要重新加载配置
    • 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-eth0
    • nmcli con up bond-slave-eth1
  • 启动绑定
    • nmcli con up mybond0

网络组Networking 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 con add type team con-name team0 ifname team0 config ‘{“runner”: {“name”: “loadbalance”}}’
  • nmcli con mod team0 ipv4.addresses 192.168.1.100/24
  • nmcli con mod team0 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 team0
  • nmcli con up team0-eth1
  • nmcli con up team0-eth2
  • teamdctl team0 state; nmcli dev dis eth1

实验:创建网络组

  • ip link
  • nmcli con add type team con-name team0 ifname team0 config ‘{“runner”: {“name”: “activebackup”}}’
  • nmcli con mod team0 ipv4.addresses ‘192.168.0.100/24’
  • nmcli con mod team0 ipv4.method manual
  • nmcli con add con-name team0-port1 type team-slave ifname eth1 master team0
  • nmcli con add con-name team0-port2 type team-slave ifname eth2 master team0
  • teamdctl team0 state

 

  • ping -I team0 192.168.0.254
  • nmcli dev dis eno1
  • teamdctl team0 state
  • nmcli con up team0-port1
  • nmcli dev dis eno2
  • teamdctl team0 state
  • nmcli con up team0-port2
  • teamdctl team0 state

管理网络组配置文件

  • /etc/sysconfig/network-scripts/ifcfg-team0 DEVICE=team0
    • DEVICETYPE=Team
    • TEAM_CONFIG=”{\”runner\”: {\”name\”: \”broadcast\”}}”
    • BOOTPROTO=none
    • IPADDR0=172.25.5.100
    • PREFIX0=24
    • NAME=team0
    • ONBOOT=yes
  • /etc/sysconfig/network-scripts/ifcfg-team0-eth1
    • DEVICE=eth1
    • DEVICETYPE=TeamPort
    • TEAM_MASTER=team0
    • NAME=team0-eth1
    • ONBOOT=yes

删除网络组

  • 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、ls、help
  • lftp [-p port] [-u user[,password]] SERVER
  • lftpget URL
  • wget [option]… [URL]…
    • -q: 静默模式
    • -c: 断点续传
    • -P:保存在指定目录
    • -O: 保存为指定的文件名
    • –limit-rate=: 指定传输速率,单位K,M等
  • links URL
    • –dump
    • –source

转载请注明:黑夜 » 网络协议和管理

喜欢 (8)or分享 (0)

您必须 登录 才能发表评论!