网络技术:
1.网络基础,CCNA+CCNP
2.网络功能实现

网络基础:
什么是网络?

物理组件:
计算机:
PC,Server
网络设备:
HUB,Bridge,Switch,Router,Gateway,Firewall,Net-Defence,LB,...
网络连接器:
NIC(Network Interface Card),Connection-Ware(RJ-45网线水晶头,RJ-11电话线水晶头,...)
网络通信介质:
有线:同轴电缆,光纤,双绞线
无线:微波,蓝牙,红外线

软件组件:
网络操作系统:
Windows、Linux、UNIX
Cisco:IOS,Internetwork Operating System;
Huawei:ComWare,Communication Ware;
通信协议:
通过库实现:
TCP/IP
IPX/SPX
OSI
数据库:
数据库管理系统:
Oracle,MySQL,MariaDB,Percona Server,PostGreSQL(PGSQL),SQL Sever
网络应用程序:

计算机网络:将地理位置分散且功能独立的主机通过网络设备通信介质连接起来,基于某种通信协议标准实现数据通信和资源共享的系统的集合;

网络基本功能:
数据通信:
实现数据通信功能的OSI层次我们称为通信子网:包括:物理层、数据链路层、网络层、传输层;
通信子网关注数据通信的细节和过程;
资源共享:
实现资源共享功能的OSI层次我们称为资源子网;包括:会话层、表示层、应用层;
资源子网关注通信的结果;
数据通信是实现资源共享的手段,资源共享是实现数据通信的最终目的

1984年:
ISO:International Standard Organization
ISO/OSI(Open System Internetwork)

根据网络功能划分层次:
资源子网
 应用层:
  1.为应用程序提供网络连接服务;
  2.完成身份验证
 表示层:数据表示
  1.数据编码和解码
  2.数据加密和解密
  3.数据压缩和解压缩
 会话层:主机到主机之间的会话通信
  主机之间的会话建立的主体是应用程序进程;

通信子网
 传输层:端到端的连接,范围到范围的通信连接;
  端到端连接的建立,维护和拆除;
  可靠性传输和非可靠性传输;
   可靠性传输:
    面向连接
    流量控制
    数据重传和确认
    序列化数据
   非可靠传输:
    面向无连接
    无序列化数据
    无数据重传和确认
    无流量控制
    数据快速传输
 网络层:路由选择
  1.逻辑寻址:用逻辑地址标识数据的发送者和接收者;
  2.确定路由:根据逻辑地指标识确定数据传输路径;
  3.地址解析:用逻辑地址解析物理地址;

  定义逻辑地址:
   IP地址:互联网地址,IPv4、IPv6
    IPv4地址:32 bits --> digit,地址表示形式:点分十进制;
     示例:172.16.72.1
    IPv6地址:ipng,128 bits --> 32 xdigits --> 冒号分十六进制;
     示例:D120::45

   注意:逻辑地址用于标识主机在网络中的位置,物理地址用于数据通信;

 数据链路层:介质访问,点到点连接
  功能:
  1.格式化数据:将数据规范成二进制格式
  2.物理寻址:标识数据的发送者和接受者
  3.错误检测:CRC算法

  定义了物理地址:
   以太网:以太网地址,MAC地址,MAC(Media Access Control)
    48Bits --> 12 xdigit
    Windows:00-00-00-00-00-00
    Linux/UNIX:00:00:00:00:00:00
    Cisco:0000.0000.0000
    MAC地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开,如:08:00:20:0A:8C:6D就是一个MAC地址,其中前6位16进制数08:00:20代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后3位16进制数0A:8C:6D代表该制造商所制造的某个网络产品(如网卡)的系列号
    注意:物理地址是直接烧录在网络接口设备的ROM芯片中;

 物理层:
  二进制比特流传输 
  定义了:电气规范,机械规范,功能规范,过程规范

OSI的应用:
数据的封装和解封装;
发送数据一方实施数据封装;
接收数据一方实施数据解封装;

保证封装和解封装能够顺利进行的标准:
对等通信原则:
发送方和接收方双方的相同层次,必须拥有完全相同的数据处理方式;

TCP/IP
协议栈,协议标准:

IEEE:美国电气和电子工程师协会(IEEE)是一个国际性的电子技术与信息科学工程师的协会,是世界上最大的专业技术组织之一(成员人数),拥有来自175个国家的36万会员(到2005年)。

TCP/IP协议栈是根据协议来分层;分层标准模糊;
网络的实际应用标准;网络实现的事实标准;

物理层:
 X.25,TIA/EIA 568A/568B,...
数据链路层:
 ppp,pppoE,HDLC,SLIP,Frame_Relay(FR),...
互联网层:
 IP,IGMP(管理组播通信),ICMP,ARP(能够根据逻辑地址能够解析到MAC地址),RARP(能够根据MAC地址能够获取到逻辑地址)
传输层:
 TCP,UDP,OSPF,EIGRP,...
应用层:
 HTTP,HTTPS,FTP,DNS,DHCP,SMB(服务消息块),

互联网层:
IP的功能:
1.寻址和路由
2.数据分片和重组
3.无连接不可靠传输(无序传输)

IP寻址:
分层编址的地址:网络部分 + 主机部分
网络部分:描述主机所在的逻辑网络范围
主机部分:描述在特定的逻辑网络范围内的具体位置

IPv4地址:
32bits二进制构成的地址标识符号;4个8位组
为方便人读取,将其设置为点分十进制格式;

A.B.C.D
 A:0~255
 B:0~255
 C:0~255
 D:0~255

IPv4地址分类:
 A类:最左侧的二进制数字是“0”,8个网络位,24个主机位;
    00000000 - 011111111
    0 - 127
    0:
    127:主机环回地址;
    可以地址范围:
    1.0.0.0-126.255.255.255
 B类:最左侧的两位二进制数字是“10”,16个网络位,16个主机位;
    10000000 00000000 - 10111111 11111111
    128.0 - 191.255
    可以地址范围:
    128.0.0.0-191.255.255.255     
 C类:最左侧的三位二进制数字是“110”,24个网络位,8个主机位;
    11000000 00000000 00000000 00000000 - 11011111 11111111 11111111 11111111
    192.0.0 - 223.255.255
    可以地址范围:
    192.0.0.0-223.255.255.255      
 D类:最左侧的四位二进制数字是“1110”,32个网络位,0个主机位;
  组播地址,多播地址
    11100000 00000000 00000000 00000000 - 11101111 11111111 11111111 11111111
    224.0.0.0 - 239.255.255.255
    可以地址范围:
    224.0.0.0-239.255.255.255 
 E类:最左侧的四位二进制数字是“1111”,32个网络位,0个主机位;
  多用于科学研究
    11110000 00000000 00000000 00000000 - 11111111 11111111 11111111 11111111
    240.0.0.0 - 255.255.255.255
    可以地址范围:
    240.0.0.0-255.255.255.255 

私有IP地址:
A:10.0.0.0 - 10.255.255.255
B:172.16.0.0 - 172.31.255.255
C:192.168.0.0 - 192.168.255.255
公有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

NAT:Nework Address Translation ,网络地址转换
SNAT:
将数据包的源IP地址从私有IP地址换为公有IP地址;
多用于让客户端连接到互联网;
DNAT:
将数据包的目的IP地址从公有IP地址换为私有IP地址;
多用于将服务器上的服务发布到互联网;

以太网协议首部:
第一行:
第一字段:目的地址,6bits
第二字段:源地址,6bits
第三字段:类型,2bits
第四字段:数据,46~1500bits
第二行:
第一字段:类型,2bits
第二字段:IP数据报,46~1500bits
第三行:
第一字段:类型,2bits
第二字段:ARP请求/应答,28bits
第三字段:PAD,18bits
第四行:
第一字段:类型,2bits
第二字段:RARP请求/回答,28bits
第三字段:PAD,18bits

UDP协议首部:
第一行:
第一字段:源端口号,16bits;
第二字段:目标端口号,16bits;
第二行:
第一字段:UDP长度,16bits;
第二字段:UDP检验和,16bits;
第三行:(如果有就是)数据

IP PDU 首部:!!!!! 看一下IPv6的首部格式 首部是工作面试中的重点!!!
第一行:
1.Ver:4bits,IP协议的版本号:0110表示IPv6|0100表示IPv4
2.IHLL:4bits,Header Length,首部长度;最少0101 - 最多1111(200Bytes- 600Bytes)
3.TOS and PRIORITY:8bits
0000:最大带宽,最小延迟,最高可靠性,最高负载;只有5中取值方式0000,1000,0100,0010,0001
0:保留为;
000:优先级,000-111
4.Packet Length:16bits,IP协议可以封装的数据包的最大长度65535Bytes;
第二行:
1.Indentifier:16bits,标识来源于那一个上层协议报文;
2.Flag:3bits,
0:是否可分片;
0:是否为最后分片;
0:保留
3.Offset:13bits,被切分为数据分片之后的各分片的顺序标号;
第一个分片为0,第二各分片偏移量为第一个分片的大小除以8的结果,...
第三行:
1.TTL:8bits,为了防止数据包被路由时,因为缺少目的地址而无限循环;
数据包在经过任意的路由设备时,其TTL会减1,一旦TTL减到0,接受此数据包的设备将其丢弃;
2.Protocol:8bits,互联网层和传输层的通信接口,通过此处指明的协议号,互联网层可以在上层找到对应的协议来继续处理该数据;
TCP:6 00000110
UDP:17 00010001
OSPF:89
EUGRP:88
3.Header Checksum:16bits,首部校验和,将整个首部做hash,得到4位16进制数字;通常会在接收放主机上,对于接受到的数据包再次进行hash运算,将得到的结果与此处保存的结果进行异或比较,以确定是否在传输过程中被修改;
第四行:
源IP地址
第五行:
目的IP地址

IP地址的使用:
源IP地址:
1.手动配置
2.自动配置:DHCP,RARP

目的IP地址:
1.手动指定
2.名称解析:
hosts文件
NIS
DNS(手动指定或自动获得)

TCP/IP分层模型中,通信界定地址:
物理地址:
以太网地址,MAC地址;
功能:真正的用于本地通信的地址; 使用范围:本地局域网内部且不夸路由设备;

逻辑地址:
在TCP/IP协议栈中,逻辑地址被定义为IP地址;
功能:界定主机到主机的通信地址;点到点通信;逻辑地址仅用于主机定位不用于真正的通信;
使用范围:全球互联网;

逻辑端口号:
在TCP/IP协议栈中
功能:界定进程到进程的通信;

逻辑端口号的组成:
16bits二进制构成;其表示范围为0~65535;
0:他是特殊端口号不做定义;
1-1023:固定服务端口;
FTP:20/TCP,21/TCP
SSH:22/TCP
TELNET:23/TCP
SMTP:25/TCP
DNS:53/TCP,53/UDP
DHCP:
DHCPS:67/UDP
DHCPC:68/UDP
TFTP:69/UDP
HTTP:80/TCP
POP3:110/TCP
IMAP4:143/TCP
SNMP:161/UDP,162/UDP
HTTPS:443/TCP
1024-45121:半固定服务端口;也可以称为注册端口
mysql:3306/TCP
tomcat:8080/TCP,8009/TCP,8005/TCP,8040/TCP
Memcached:11211/TCP
其余端口号:可自由分配使用的端口;

逻辑地址:逻辑端口号——套接字(Socket)
能够界定特定主机上的特定应用程序服务进程;

TCP协议:
1.面向连接:
1)通信开始之前,必须先建立通信双方主机之间的TCP通信连接;
2)在整个通信过程中,必须维持通信双方主机之间的TCP通信连接的稳定性;
3)在通信结束时,必须拆除双方主机之间已建立的TCP通信连接;

TCP协议建立连接的过程:三次握手
a)通信请求发起方,创建一个无数据报文,将其中的SYN标志位置一;
b)接收方在收到建立连接的请求之后,根据给报文的目标端口号判断本地是否有监听此套接字的进程;如果有,即返回确认消息;创建一个无数据报文,将其中的ACK标志位置一,同时将SYNC标志位置一,用户向对方请求建立同步连接;
c)通信请求发起方,再创建一个无数据报文,将其中的ACK标志位置一;
TCP协议拆除连接的过程:四次挥手
a)由任何一方在数据传输结束之后,向另一方发送一个自己创建出来的数据报文,其中FIN标志位置一;
b)收到连接断开请求的一方,会对此请求信息予以确认,创建一个无数据报文,其中ACK标志位置一;
c)此前收到连接断开请求的一方会再次创建一个无数据报文,将其中的FIN标志位置一,向对方请求断开连接;
d)对方在收到此请求报文之后,再创建一个无数据报文,将其中的ACK标志位置一确认断开连接的请求;

TCP协议的有限状态机(TCP FSM)

TCP协议首部:
第一行:
第一字段:源端口号,16bits;
第二字段:目标端口号,16bits;可以手动指定,也可以通过/etc/services文件判断自动解析应用层协议获得;

第二行:
序列号:TCP协议将大数据报文分段的顺序编号,取值范围是0~2^32-2;默认情况下,第一个数据段的序列号为随机选择,以后的数据段的序列号通过计算得到;
第一段:随机产生;
后续其他数据段:前一数据段的序列号+前一数据段的数据部分大小+1;

第三行:
确认号:(下一段的序列号)
接收到的最后一个数据段的下一个数据段的序列号;取值范围1~2^32-1;

第四行:
第一字段:4bits,报文首部长度,通常报文首部长度为24Bytes~60Bytes;
第二字段:标志位:13bits
前三位:保留位;
4-6位:特殊标志位;
URG:紧急指针标志位,优先转发标志位;URG指针置一,后面的16bits的紧急指针才能生效
ACK:确认标志位,保证数据传输可靠性;
PSH:推进标志位
RST:重置标志位
SYN:同步标志位,三次握手建立连接时必选的标志位
FIN:结束标志位,四次握手拆除连接时必选的标志位;
第三字段:窗口大小,16bits;一次并发传输的数据段的数量;

第五行:
第一字段:数据段校验和,16bits,保证数据的完整性;
第二字段:紧急指针,16bits,在URG标志位置一时,哪个数据段更紧急

第六行:
选项:TCP协议分段的标准;TCP协议的数据分段数间戳;...

TCP协议的确认机制:
1.发送方在接受到接收方返回的确认数据之前,不会继续发送后续的数据段;
2.在指定定的时间内,发送方没有接收到接收方返回的确认数据,则重新发送此前发送的数据段;

数据传输过程:
发送方打算把应用数据发送给接收方:
1.将给出的主机名解析为此次通信的目标主机IP地址;
2.将应用层协议解析为传输层协议加传输层端口号的组合(套接字),进而完成传输层封装;
3.如果传输层使用TCP协议,则还需要为TCP协议通信建立连接;
4.如果需要建立TCp连接,必须能够在网络层正确封装IP地址以及在数据链路层正确封装MAC地址;
5.在ARP缓存中,如果没有对应的目标IP地址条目信息,则需要广播ARP解析目标主机地址;
6.解析获得目标主机的MAC地址后,则可以通过三次握手建立TCP连接;
7.为应用层程序提供数据发送;
8.在数据传输完成之后,需要拆除TCP连接;

子网掩码(Netmask)
组成:32bits二进制组成,与IPv4的地址位数相同;以点分十进制进行标识;
作用:用来标识IPv4地址中的网络部分和主机部分各占多少个二进制位;凡是万罗部分就用“1”表示,凡是主机部分,就用“0”表示;

A类地址的标准子网掩码:255.0.0.0
B类地址的标准子网掩码:255.255.0.0
C类地址的标准子网掩码:255.255.255.0

将IPv4的地址与其相对应的子网掩码做逻辑与运算,得到的结果是:该IPv4地址所属的网络范围的网络地址;

网络地址:主机位全都是“0”的IP地址;也被称为网络名称;也可以称为逻辑网段;
定向广播地址:主机位全都是“1”的IP地址;在特定的逻辑网段中能够被应用的广播地址;

以上两个地址通常是不能分配给主机使用的;

在一个逻辑网段中主机位全0和主机位全1的地址,必须排除在可以地址范围之外;

子网掩码地表示方法:
1.全掩码表示法:172.16.72.1/255.255.0.0
2.前缀表示法:172.16.72.1/16

192.168.0.1/16 CIDR,Classless Inter-Domain Routing,无类域间路由;
10.1.1.1/28    变长子网掩码;

结论:
主机通过将自身的IP地址和目标主机的IP地址分别与自己的子网掩码进行逻辑与运算,最终得到的结果就是两台主机的逻辑网络地址;
然后将此二结果进行比较,如果相同,则表示此二主机在同一逻辑网络范围之内,因此可以直接使用ARP协议获取对方的MAC地址,从而实现通信;如果不相同,则意味着此二主机在不同的逻辑网络范围之中,于是必须借助于网关才能实现二主机的相同通信;

网关:可以理解为一个逻辑网络的门户,或者是出入口;现在多用路由器充当网关设备;

注意:一旦数据传输经过网关等路由设备,则其数据链路层的封装格式会彻底改变;即:重新封装数据的源MAC地址及目的MAC地址;

对于主机来说,在一次通信的过程中,需要使用配置在自身网络设备接口上的子网掩码判断目标主机与自身IP地址是否在同一逻辑网段;

对于路由器来说,需要利用路由表中路由条目上所携带的子网掩码,来判断目标主机所在的网络地址,是否存在与本地路由表中,若果有,则按照路由表知识进行转发;否则直接丢弃不予转发;

Linux网络配置网络层中的IP地址是内核的属性这是对Linux而言的!!!
在Linux系统中,网络功能的实现被分成两部分存放:
1.存放于内核空间中的协议栈:
包括:物理层、数据链路层、网络层及传输层协议;
实现通信子网的功能
2.存放与用户空间中的应用程序协议:
包括:会话层、表示层及应用层协议;
实现资源子网之功能;

网络接口的命名规则:
1.传统的命名规则:
以太网网卡设备:ethX:X是从0开始的整数标识;如:ech0,eth1,...
PPP网络设备(家里的ads猫):PPPoE(PPP over Ethernet)
pppX:X是从0开始的整数标识;如:ppp0,ppp1,...
virt:虚拟网络接口
环回接口:loopback,简称loX,X可以省略,X是从0开始的整数标识
2.可预测的命名规则:(CentOS 7开始)
1)根据Firmware进行命名;
每一台计算机上的网卡设备在其计算机硬件固件中都有唯一的标识符,比如:MAV地址,厂商标识,设备的电器编号等;

  a.如果Firmware或BIOS是主板集成的设备提供的索引信息并且给信息可以被引用,则根据此索引信息进行设备命名,如:
   enoX:如:eno1,eno4646,eno6464,...
  b.如果Firmware或BIOS是主板上扩展插槽所提供的索引信息并且该信息可以被引用,则根据此索引信息进行设备命名,如:
   ensX:如:ens1,ens5555,...
  c.如果用户现实的定义可以使用诸如MAC地址之类的信息引用网络设备,可以将设备命名为:
   enx000c290005b4
2)根据设备在主板上的物理拓扑结构进行命名;
 每一台计算机的主板上都有固定数量的插槽或接口,根据设备插接位置来唯一标识设备;比如:主板上第二个PCI插槽所插3的网卡的第一个接口;

  a.如果硬件接口的物理拓扑位置信息存在并且可以被引用则可以根据此信息进行设备命名,如:
   enp1s0

注意:在CentOS 7中,如果上述可预测命名规则皆不可用,则延续传统命名方式对网络设备进行命名;

在可预测的明明命名结构中,命名格式表示的含义:
 en:Ethernet,表示以太网;
 wl:wlan,表示无线以太网;
 ww:wwan,无线广域网;

 o:表示集成设备的索引编号;
 s:表示扩展插槽编号或扩展插槽的索引号;
 x:基于MAC地址进行命令的网络接口;
 ps:基于总线模型和扩展插槽的索引联合索引编号;

CentOS系统中的网络管理方式:
1.为网卡设备设置网络属性参数:
自动设置:
当主机所在的网络中至少有一台DHCP服务器时,可以考虑使用此方法;
通过DHCP服务器可以获取的网络配置属性参数包括:
主要参数:
IPv4地址/Netmask
可选参数:
默认网关
DNS服务器地址
主机域名后缀
TFTP服务器地址
WINS服务器地址
...

手动设置:
 1)使用命令完成配置
  在所有的CentOS系统中,都可以使用的命令;
   net-tools家族(ifcfg家族)
   iproute2家族

  仅在CentOS 7中可以完美使用的命令
   nm家族

 2)修改配置文件完成配置
   /ifcfg-IF_NAME
  /etc/sysconfig/network-scripts/route-IF_NAME
  /etc/hosts
  /etc/host.conf后来被/etc/nsswitch.conf取代
  /etc/resolv.conf
  /etc/services

net-tools家族(ifcfg家族)
ifconfig
ifconfig - configure a network interface 配置一个网络接口
格式:
ifconfig [-v] [-a] [-s] [interface]
查看网络接口的配置属性;
如果省略接口名称[interface]则默认查看所有处于UP状态的接口的配置属性;
-a:查看所有接口,包括处于DOWN状态的接口的配置属性;
示例:
[root@localhost ~]# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:0C:29:7D:39:22
inet addr:172.16.72.10 Bcast:172.16.255.255 Mask:255.255.0.0
inet6 addr: fe80::20c:29ff:fe7d:3922/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:536 errors:0 dropped:0 overruns:0 frame:0
TX packets:275 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:52465 (51.2 KiB) TX bytes:24683 (24.1 KiB)
Bcast:172.16.255.255广播地址
BROADCAST支持广播通信 RUNNING正在运行状态 MULTICAST支持多播结构 MTU:1500最大传输单元为1500字节
Metric:1度量值 衡量路径选择的好坏的一种标准 越小开销越小 越好
RX收到的传输数据包packets:536收到数据包数量errors:0收到报文中错误报文数量dropped:0丢弃报文数量overruns:0溢出的
TX传出的传输数据包
collisions:0冲突 由于网络连接有问题产生的冲突
如果其中错误 冲突 丢弃 有一个不是0就证明你的网络一定是有问题的
目的地址不是你所以你收不到,交换机有一个特性为泛洪,如果设置为混杂模式,主机将接受所有数据,监听网络中所有的网络数据,这要求我们能够分析数据,如果没必要执行时此命令是危险的;
-v:查看详细信息
ifconfig [-v] interface [aftype] options | address ...
设置网络接口的配置属性或IP地址信息;
[-]arp:在指定网络接口上开启或关闭ARP协议支持;
[-]promisc:在指定网络接口上开启或关闭混杂模式;
up:激活指定接口;
down关闭指定接口上的驱动;
netmask:明确的指定与IP地址相关的子网掩码;个是必须是点分十进制;
address:将指定的地址设置在指定的网络接口上;

route
route - show / manipulate the IP routing table 显示或操纵IP路由表;

路由表示路由设置完成路由转发的基础依据,因此路由表的存在对于路由设备而言至关重要;

路由表中可能存在的路由条目类型:
1.主机路由:目的地址为特定单个IP地址的路由条目;
172.16.72.1/32

2.网络路由
子网路由:目标地址是子网地址的路由条目
172.16.72.0/24
10.1.1.4/30
主网路由:目标地址为主网地址的路由条目;
超网路由(CIDR):目标地址为CIDR的路由条目;或称为聚合路由或汇总路由;

3.默认路由:目标地址为0.0.0.0/0的路由条目:
0.0.0.0/表示整个IPv4地址栈中所有有效IPv4地址;
默认路由意思是:到达任意主机的路由

通常情况下路由表条目匹配的顺序为“首项匹配域”;匹配范围最小的优先级最高;

格式:
route [-CFvnNee] [-A family |-4|-6]
查看kernel中的IP路由表
-n:不将IP地址反解为主机名,而是以数字化的IP地址显示主机标识
route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
route del [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
操纵路由表
~]# route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.2 dev eth0
~]# route add default gw 172.16.0.2
~]# route del -host 192.168.100.1
~]# route del -net 192.168.10.0

netstat
netstat - Print network connections, routing tables, interface statis‐tics, masquerade connections, and multicast memberships

Print network connetions:
[--tcp|-t]:仅显示与TCP协议相关的会话连接的信息;
[--udp|-u]:仅显示与UDP协议相关的会话连接的信息;
[--udplite|-U]:仅显示与UDPLITE协议相关的会话连接的信息;
[--sctp|-S] :仅显示与SCTP协议相关的会话连接信息;
[--raw|-w]:仅显示与裸套接字相关的会话连接信息;
[--listening|-l]:仅显示当前主机上处于LISTEN状态的TCP连接的信息;
[--all|-a]:查看所有状态的任意协议的连接信息;
[--numeric|-n]:数字化显示查询结果中的主机名,端口号,用户ID等信息;
[--numeric-hosts]
[--numeric-ports]
[--numeric-users]
[--program|-p]:显示与该网络会话连接相关的应用程序进程信息
TCP协议有限状态机: 了解就好
ESTABLISHED
The socket has an established connection.

   SYN_SENT
          The socket is actively attempting to establish a connection.

   SYN_RECV
          A connection request has been received from the network.

   FIN_WAIT1
          The socket is closed, and the connection is shutting down.

   FIN_WAIT2
          Connection  is  closed, and the socket is waiting for a shutdown from the remote end.

   TIME_WAIT
          The socket is waiting after close to handle packets still in the network.

   CLOSE  The socket is not being used.

   CLOSE_WAIT
          The remote end has shut down, waiting for the socket to close.

   LAST_ACK
          The  remote end has shut down, and the socket is closed. Waiting for acknowledgement.

   LISTEN 
          The socket is listening for incoming connections.  Such  sockets are  not included in the output unless you specify the --listen‐ing (-l) or --all (-a) option.

   CLOSING
          Both sockets are shut down but we still don't have all our  data sent.

   UNKNOWN
          The state of the socket is unknown.

常用的选项组合:
-tan , -uan , -tnl , -unl , -tnlp , -unlp , -tunlp

Print routing tables 没有示意的有兴趣可以自己了解!
{--route|-r}:显示kernel路由表信息;
[--numeric|-n]:数字化显示查询结果;
[--numeric-hosts]
[--numeric-ports]
[--numeric-users]
[--extend|-e[--extend|-e]]:显示扩展主机名

常用的选项组合:
-rn , -rne

Print interface statistics
{--interfaces|-I|-i}:显示接口的状态统计信息
[--all|-a]
[--extend|-e]
[--verbose|-v]
[--pro-gram|-p]
[--numeric|-n]
[--numeric-hosts]
[--numeric-ports]
[--numeric-users]

常用的选项组合:
-i,-ie

Print protocol statistics
{--statistics|-s}:显示各个协议的详细的统计信息
[--tcp|-t]
[--udp|-u]
[--udplite|-U]
[--sctp|-S]
[--raw|-w]

iproute2家族:
ip
ip - show / manipulate routing, devices, policy routing and tunnels
格式:
ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT := { link | addr | addrlabel | route | netns }
OPTIONS := { -V[ersion] | -s[tatistics] | -n[etns] name }
COMMAND :={ add | delete | set | show | }

 link:
  ip link ...
   ip-link - network device configuration

   ip link { add | delete | set | show/list }

   ip link set [dev] IF_NAME { up | down }
    激活或关闭指定的网络接口;

   ip link set [dev] IF_NAME { arp {up | down} }
    是否允许在指定接口上使用ARP协议;

   ip link set [dev] IF_NAME name NEWNAME
    修改网络接口的名称,需要将要改名的借口关闭

   ip link set [dev] IF_NAME { netns PID | netns NETNSNAME }
    将指定的网络接口添加到指定的网络命名空间中;

  ip link show | ip link list
   列表显示所有的网络接口,只显示网络接口的数据链路层的属性信息

  ip link help:
   获取简短的帮助信息

netns仅在CentOS7中可用:
 ip-netns - process network namespace management
  设置内核中的网络命名空间;

 ip netns add NTENSNAME
  创建网络命名空间

 ip netns extc [ NETNSNAME ] command...
  在指定的网络命名空间中执行命令;

 ip [-all] netns del [ NETNSNAME ]
  删除指定的网络命名空间,或者删除所有的网络命名空间;

address:
ip-address - protocol address management
ip [ OPTIONS ] address { COMMAND | help }

ip address { add|del } IF_ADDR dev IF_NAME
在网络接口上添加IP地址或者从网络接口上删除IP地址;

 ~]# ip address add 192.168.100.100/24 dev eth666
 ~]# ip address del 192.168.100.100/24 dev eth666

ip address { show | list } [dev IF_NAME]
查看指定接口上或所有接口上的地址属性信息;

ip address flush [dev IF_NAMME]
将指定接口或所有接口上通过ip命令添加配置的IP地址全部清除

注意:此命令在执行之前,必须保证不能影响全部网络接口,不能阻止远程管理的进行

示例:
[root@localhost ~]# ip addr add 192.168.10.1/24 dev eth666
[root@localhost ~]# ip addr add 10.1.1.1/24 dev eth666
[root@localhost ~]# ip addr add 172.18.0.1/24 dev eth666
[root@localhost ~]# ip addr list dev eth666
3: eth666: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 00:0c:29:7d:39:2c brd ff:ff:ff:ff:ff:ff
inet 192.168.100.100/24 scope global eth666
inet 192.168.10.1/24 scope global eth666
inet 10.1.1.1/24 scope global eth666
inet 172.18.0.1/24 scope global eth666
[root@localhost ~]# ip address flush dev eth666
[root@localhost ~]# ip addr list dev eth666
3: eth666: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 00:0c:29:7d:39:2c brd ff:ff:ff:ff:ff:ff

ip address add IF_ADDR dev IF_NAME label LABEL_NAME
ifconfig LABLE_NAME IF_ADDR
给网络接口添加新的IP地址时,指定将IP地址应用于接口的某一个标签上,其目的是为了能够让ifconfig命令查看到同一接口上不同的IP地址配置;

一般来讲,接口的标签都会使用IF_NAME:#

route:静态路由管理 !!!!
ip-route - routing table management 路由表管理工具
ip route { add | del | change | append | replace } ROUTE

ROUTE := TARGET(目标地址)/NETMASK(目标地址掩码) [via NEXT_HOP [dev IF_NAME]] 修改的时候要写完整 删除时[]号中的内容可省略
~]# ip route add 192.168.100.0/24 via 172.16.0.1 dev eth666
~]# ip route del 192.168.100.0/24

ss
ss - another utility to investigate sockets

-t,--tcp:仅显示与TCP协议相关的会话连接状态统计信息;
-u,--udp:仅显示与UDP协议相关的会话连接状态统计信息;
-w,--raw:仅显示与裸套接字相关的会话连接状态统计信息;
-l,--listening:仅显示处于监听状态的套接字状态统计信息;
-a,--all:显示所有的套接字会话连接的状态统计信息;
-n,--numeric:数字化显示结果;
-p,--processes:显示与连接会话相关的应用程序进程及进行ID;
-e,--extended:显示详细的扩展信息;
-m,--memory:显示套接字占用的内存数量;
-o,--options:显示计时器信息;
常用选项组合:
-tan,-uan,-tnl,-unl,-tnlp,-unlp,-tunlp

FILTER:=[ state STATE-FILTER ] [ EXPRESSION ]
STATE-FILTER:
ALL standard TCP states: established , syn-sent,syn-recv,fin-wait-l,fin-wait-2,time-wait,closed,close-wait,last-ack,listen and closing.

 all - for all the states

 connected - all the states except for listen and closed

 synchronized - all the connected ststes except for syn-sent

 bucket - states,whic are maintained as minisockets,i.e. time-wait and syn-recv

 big - opposite to bucket

EXPRESSION:
 dport = :port
 sport = :port 

 示例:
  '( dport = :80 or dport = :22)'

net-tools家族和iprote2家族:
特点:所有能够完成网络参数配置的命令,在进行网络参数的配置之后,其配置结果会立即生效;但是,只要重新启动网络设备或刷新内核参数,其配置就会立即丢失;

为了能够持久化保存网络参数的配置结果,需要将有意义的参数写入到配置文件中;

配置文件:
1./etc/sysconfig/network-scripts/ifcfg-IF_NAME
在CentOS 6中:跟IP、MASK、GATEWAY、DNS相关的配置文件;
DEVICE=eth0
此网络接口的名称;
HWADDR=00:0C:29:28:03:BD
此网络接口设备的物理地址,在以太网中即为MAC地址;
TYPE=Ethernet
此网络接口的网络类型,比较常见的是:Ethernet,Bridge,Token Ring,...
NM_CONTROLLED=no
是否受到Network_Manager组件的管理控制;
ONBOOT=yes
在操作系统引导启动的过程中,是否自动激活此网络接口;
BOOTPROTO=static
在激活此网络接口时,使用何种协议来配置此接口的IP地址等属性;
手动指定,静态配置:static | none
自动获取,动态配置:dhcp | bootp
IPADDR=172.16.67.1
如果BOOTPROTO配置指令的值为静态配置,则此指令为当前网络接口配置静态IP地址;
如果BOOTPROTO配置指令的值为动态配置,即便定义了此指令,也不生效;
PREFIX=16
通过指定网络位长度而指定子网掩码;
NETMASK=255.255.0.0
指定子网掩码;
NETBOOT=yes
当前网络接口是否支持网络引导启动;
IPV6INIT=no
是否在此网络接口上初始化IPv6协议;
USERCTL=no
是否允许普通用户管理此网络接口;推荐取值为"no";
GATEWAY=172.16.0.1
设置默认网关;
DNS1=x.x.x.x
DNS2=y.y.y.y
DNS3=z.z.z.z
定义首选DNS服务器,备用DNS服务器及第三DNS服务器地址;
PEERDNS=no:
是否允许把从DHCP服务器获取到的DNS服务器地址覆盖存储到/etc/resolv.conf文件中;默认值为允许;

    注意:在CentOS 6中,不建议使用Network-Manager管理网络接口;因此建议在CentOS 6中将NM服务彻底关闭,使用下列命令即可:
        ~]# service NetworkManager stop
        ~]# chkconfig NetworkManager off

    在CentOS 7中:跟IP、MASK、GATEWAY、DNS相关的配置文件;
        TYPE=Ethernet
        BOOTPROTO=dhcp
        DEFROUTE=yes
        PEERDNS=yes
        PEERROUTES=yes
        IPV4_FAILURE_FATAL=no
        IPV6INIT=yes
        IPV6_AUTOCONF=yes
        IPV6_DEFROUTE=yes
        IPV6_PEERDNS=yes
        IPV6_PEERROUTES=yes
        IPV6_FAILURE_FATAL=no
        NAME=eno33554984
        UUID=2ffd49eb-26ac-4eaf-92cc-45deed5d9e04
        DEVICE=eno33554984
        ONBOOT=yes
        NM_CONTROLLED=yes

2.主机名的配置文件:/etc/sysconfig/network
    CentOS 6:
        HOSTNAME=mylab11.qhdlink.com

    设置主机名的命令:
        hostname
            hostname - show or set the system’s host name

        修改主机名:
            # hostname HOST_NAME
                注销再登录则新主机名生效;重启之后,该主机名失效;

    CentOS 7:
        /etc/sysconfig/network不具备保存主机名的意义;

        hostnamectl命令:
            # hostnamectl set-hostname HOST_NAME
                注销再登录,新主机名生效,重启之后,该主机名仍然有效;

3.本地解析文件:/etc/hosts
    格式:
        IP地址 主机名 主机名 ...

    CentOS 6和CentOS 7中,功能相同;

4.解析器文件:/etc/resolv.conf
    保存了DNS服务器的IP地址,以用于基于DNS服务的主机名称解析;
        search DOMAIN_NAME
        nameserver DNS_SERVER_IP1
        nameserver DNS_SERVER_IP2
        nameserver DNS_SERVER_IP3
        ...

5.静态路由配置文件:/etc/sysconfig/network-scripts/route-IF_NAME
    注意:IF_NAME必须是此次路由出站的接口名称;
    此文件通常有两种书写风格:
        1) 每条静态路由信息,占用一行:
            TARGET/MASK via NEXT_HOP [dev IF_NAME]

            示例:
                10.0.0.0/8 via 172.16.0.1 dev eno16777736

        2) 在多行中分别列出每条路由信息的内容:
            ADDRESS#=TARGET
            NETMASK#=MASK
            GATEWAY#=NEXT_HOP

            示例:
                ADDRESS0=10.0.0.0
                NETMASK0=255.0.0.0
                GATEWAY0=172.16.0.1

6.名称解析顺序的定义:/etc/host.conf
    multi on;
        服务器上的多个网络接口是否能够同时完成网络功能;

    order hosts,dns
        在实现将名称解析为IP地址时,本地hosts文件和远程DNS服务器哪一个被优先查找;

7.各种名称解析的顺序:/etc/nsswitch.conf

8.内核参数的调整文件:/etc/sysctl.conf
    net.ipv4.ip_forward = 0
        Linux内核中的核心转发功能,是否开启;

    sysctl命令:
        sysctl - configure kernel parameters at runtime
            -a:查看当前所有有效的内核参数及值;
            -w:修改运行时内核参数值;修改的结果为一次性有效,下次重载内核参数时就失效;
            -p:从/etc/sysctl.conf文件中重载所有内核参数的值;

nm家族:仅限于CentOS 7发行版;
nmcli:命令行接口工具
nmcli - command‐line tool for controlling NetworkManager
格式:
nmcli [ OPTIONS ] OBJECT { COMMAND | help }

  OBJECT := { general | networking | radio | connection | device | agent }

   connection - start, stop, and manage network connections
    COMMAND := { show | up | down | add | edit | modify | delete | reload | load }

    show:显示所有 | 指定的网络连接的属性信息;
    up | down:启用或关闭网络连接;
    add:添加一个网络连接;创建网络接口的配置文件;
      autoconnect yes | no :是否自动启动此连接,相当于在配置文件中指明OONBOOT={yes|no}
      ifname IF_NAME:指定要创建连接的目标网络接口的设备名称;
      con-name CON_NAME:为指定的网络接口设备创建一个连接名称;
      type TYPE:指定网络设备的接口类型;
    delete:删除一个网络连接,删除网络接口的配置文件;参数为CON_NAME
    reload:不重启网络接口,但重新加载接口的配置文件中所定义的配置信息;
    modify:
     modify [id | uuid | path ]  [+|-]. 
      :
       connection.autoconnect yes|no
       ipv4.addresses
       ipv4.dns
       ipv4.gateway
       ipv4.method [auto,link-local,manual,shared,disabled]
     通过nmcli命令设置的网络连接的配置,默认会直接存放在网络接口的配置文件中,因此配置不会立即生效,如果想要配置文件中的配置属性
      1.重启全部网络接口:
       #sustemctl restart network.service
      2.重启指定的网络接口:
       ifdown IF_NAME ; ifup IF_NAME
      3.不重启接口加载配置文件:
       nmcli connection reload CON_NAME
    device:
     device - show and manage network interfaces
     COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }

nmtui:文本用户接口
nmtui - Text User Interface for controlling NetworkManager

与nmtui相似的CentOS 5 | 6中的命令:

system-config-network[-tui]

setup --> [Network Configuration,网络配置]

注意:上述操作,完成之后必须重启网络接口,才能使新配置信息生效;

Bonding——接口绑定
就是将多块网络接口设备组织成一个统一的逻辑接口,并设置IP地址;在所有被绑定的网络接口之间可以实现网络数据的负载均衡或者网络接口的高可用功能;

在设置了绑定之后,虚拟出一个网络接口对外提供网络服务及网络连接,将所有的物理网络接口的物理地址都改为相同的MAC地址;

Bonding的工作模式:
mode=0:balance-rr,默认的工作模式,负载均衡解决方案;round-robin,从头到尾按照顺序在每个slave接口上面发送数据包,可以实现负载均衡和容错;
mode=1:active-backup,主备解决方案;在此模式中,只有一个slave接口被激活,用于正常的数据传输;而其他的接口都仅仅只是监视活动接口的工作状态;当且仅当活动的slave接口被判定为失败时,才会从其他的备份接口中选择一个接口用于激活;此模式只能实现容错,不能实现负载均衡;

mode=2:balance-xor;

mode=3:boadcast,全广播模式解决方案;在所有的slave接口上,传输全部报文内容;无法实现负载均衡,可以实现容错;
mode=4:802.3ad,动态链路聚合;创建一个聚合组,同时要求所有参与据合租的借口必须具备相同的速率模式和双工模式;而且必须要求连接此接口的交换机也支持802.3ad模式;

mode=5:balance-tlb,自适应的传输负载均衡,无需交换机支持;每个slave接口根据当前的负载情况分配外出的数据流量;

mode=6:balance-alb,自适应负载均衡,包括mode=5模式,同时加上针对于IPv4流量的接收负载均衡(rlb,recieve loab balance),而且无需交换机支持;

Bonding的监控时长:
miimon=Number

用miimon来监控链路状态;在指定的时间内(Number,单位是ms)时间内,如果某个借口的测试结果为不能联通则将此接口标识为失效,此时需要进行故障倒换;

Bonding的配置:
1.创建虚拟接口,其名称通常bond0,...;
2.选择miimon的监测时间;
3.选择bonding的工作模式;
4.选择用于此次bonding的物理接口(slave接口);

nmcli,nmtui,vim6

注意:直接在虚拟机上物理断开网络连接进行测试,不要使用ifdown命令:

配置方式:
1.虚拟接口的配置(Master 接口)

vim /etc/sysconfig/network-scripts/ifcfg-bond0

vim /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
BONDING_OPTS="mode=1 miimon=100"
IPADDR=172.16.254.1
PREFIX=16

2.物理接口的配置(Slave 接口)

vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
NM_CONTROLLED=no
USERCTL=no

所有物理接口,进行类似配置:DEVICE的值一定要和物理接口保持一致;

在CentOS 7中除了Bonding之外,还引入了一个新的概念,网络组(Network Teaming)
网络组:将多个网络接口设备聚合在一起的方案,可以实现网络接口的冗余和高可用,提高吞吐量;

网络组和Bonding相比,具有更好的性能以及更好的可扩展性;建议在CentOS7中使用网络组而不是Bonding;

在CentOS7所选择的内核中支持网络组;网络组就是其内核中的一个内核驱动,和一个名字为teamd的守护进程;

在bonding中能够使用的工作模式,网络组都可以支持,并且网络组使用运行器(runner)来实现这些功能;
loadbalance
activebackup
broadcast
roundrobin
lacp(802.3ad,Link Aggregation Control Protocol)

网络组的特点:
1.启动网络组接口不会自动启动网络组中的其他的port接口;
2.启动网络组port接口,也不会自动启动网络组接口;
3.禁用网络组接口,则会立即禁用网络组中所有的port接口;
4.对于没有添加任何port接口的网络组而言,只能配置静态IP地址,不能设置DHCP获取IP地址;如果对于此类的网络组接口设置了DHCP配置,这样的网络组接口就一直不启动,一直等待其他的port接口加入此网络组;

网络组的配置方法:
1.创建网络组接口
nmcli connection add type team con-name TEAM_CON_NAME ifname IF_NAME config JSON
JSON是用来指定runner的,其格式为:
'{"runner": {"name": "METHOD"}}'

示例:
    ~]# nmcli connection add type team con-name class18 ifname class18 config '{"runner": {"name": "loadbalance"}}'

2.创建port接口:
nmcli connection add type team-slave [con-name CON_NAME] ifname IF_NAME master TEAM_NAME

注意:如果不知道con-name,默认的con-name为: team-slave-IF_NAME

示例:
~]# nmcli connection add type team-slave ifname eno33554984 master class18
~]# nmcli connection add type team-slave ifname eno16777736 master class18

~]# nmcli connection up class18
~]# nmcli connection up eno16777736
~]# nmcli connection up eno33554984

~]# nmcli device disconnect eno16777736
~]# nmcli device disconnect eno33554984

注意:
1.所有的port接口不需要配置IP地址,子网掩码,网关,DNS服务器等属性;此类配置属性仅在网络组接口中配置即可;配置的方法,可以直接修改其配置文件,也可以使用nmcil connection modify...
2.配置完成之后,需要重启网络服务:

建议:
 在CentOS6中使用Bonding
 在CentOS7中使用Network Teaming;

网络检测工具:
ping
traceroute
arp

ping命令:
ping, ping6 - send ICMP ECHO_REQUEST to network hosts
格式:
ping [-c count] [-I interface] [-t ttl] [-W timeout] [-s pack‐etsize]
常用选项:
-c #:此次测试发送的报文数量;
-I interface|address:如果参数是IP地址,则此次测试操作的源IP地址即为此处指明的IP地址;
如果参数是接口名称,则此次测试操作,经由该口发送出去;
-t ttl:手动设置此次测试时的报文的TTL值;
-W timeout:设置接收相应报文的超时时间;
-s pack‐etsize:指明包的大小;

traceroute命令:
Windows中为tracert

traceroute - print the route packets trace to network host
仅返回TTL值为1时的路由接口的IP地址;

arp命令:
arp - manipulate the system ARP cache
查看或修改arp缓存中的内容;
常用选项:
-n, --numeric:以数字化显示结果;

网络客户端工具:
ftp,lftp,lftpget,wget

wget:
Wget - The non-interactive network downloader.
格式:
wget [option]... [URL]...
常用选项:
-O file ,--oupt-document=file
--limit-rate=amount
-nH,--no-host-directories
-np,--no-parent