七层模型


第7层 应用层
应用层(Application Layer)提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如: 
HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3、MySQL等 第6层 表示层
主条目:表示层(Presentation Layer)把数据转换为能与接收者的系统格式兼容并适合传输的格式
第5层 会话层
会话层(Session Layer)负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接。
第4层 传输层
传输层(Transport Layer)把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议
等发送信息。例如:传输控制协议(TCP)等。
第3层 网络层
网络层(Network Layer)决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成报文。
网络表头包含了网络数据。例如:互联网协议(IP)等。
第2层 数据链接层
数据链路层(Data Link Layer)负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形
成信息框(Data Frame)。数据链表头(DLH)是包含了物理地址和错误侦测及改错的方法。数据链
表尾(DLT)是一串指示数据包末端的字符串。例如以太网、无线局域网(Wi-Fi)和通用分组无线服务
(GPRS)等。分为两个子层:逻辑链路控制(logical link control,LLC)子层和介质访问控制
(Media access control,MAC)子层
第1层 物理层
物理层(Physical Layer)在局部局域网上传送数据帧(Data Frame),它负责管理电脑通信设备和网
络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机接口卡等

01.png

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

02.png

#宽带运营商的计算和计算机的下载单位不一样
100Mbps=100/8M  

#网络的拓扑结构:
总线 
环线  令牌环网
星型

#网络的标准OSI模型和分层:
physic
 解决电器特效,传递高低电平0101这样的,
 数据位 bit
data link
  识别数据帧,物理地址的识别,区分唯一的MAC地址,同一局域网之间的通信,链路之间的通信
  含有校验帧可以校验数据
  数据帧
  网卡工作的地方
network
  网路地址的识别、层层的将数据报文转发过来
  数据包
transport
  负责数据的可靠的传输  数据不能丢失
  数据段
session
   建立会话
   消息
presentation
  
application
应用协议 http 
mysql数据库 

03.png04.png

三种通信模式

单播 unicast   一对一  适合点对点
广播 broadcast  一对多
组播 multicast  部分,例如,微信里面的一个群
冲突域 
广播域 

三种通讯机制

单工  只有一个方向  例如:收音机
半双工 不能同时发,也不能同时接受  例如:对讲机
全双工  电话

mii-tool 和 ethtool 来识别网卡的连接状态

[root03:16 PMcentos8 ~]#mii-tool -v eth0
eth0: negotiated 1000baseT-FD flow-control, link ok   #表示网卡是连接状态
  product info: Yukon 88E1011 rev 3
  basic mode:   autonegotiation enabled
  basic status: autonegotiation complete, link ok
  capabilities: 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
  advertising:  1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
  link partner: 1000baseT-HD 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD


[root03:31 PMcentos8 ~]#ethtool eth0
Settings for eth0:
	Supported ports: [ TP ]
	Supported link modes:   10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Supported pause frame use: No
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Advertised pause frame use: No
	Advertised auto-negotiation: Yes      # auto-negotiation  自动协商
	Advertised FEC modes: Not reported
	Speed: 1000Mb/s  #支持的结果
	Duplex: Full     #全双工模式
	Port: Twisted Pair
	PHYAD: 0
	Transceiver: internal
	Auto-negotiation: on
	MDI-X: off (auto)
	Supports Wake-on: d
	Wake-on: d
	Current message level: 0x00000007 (7)
			       drv probe link
	Link detected: yes    #当前网卡的状态是连接的
[root03:32 PMcentos8 ~]#

ip a 识别网卡是不是连接的状态

[root03:32 PMcentos8 ~]#ip  a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:41:8d:2a brd ff:ff:ff:ff:ff:ff                   # UP 开启状态
    inet 10.0.0.8/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe41:8d2a/64 scope link               # BROADCAST,MULTICAST  组播 多播
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:41:8d:34 brd ff:ff:ff:ff:ff:ff

ip link 看网卡是否连接的状态

[root03:36 PMcentos8 ~]#ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00   #安装TCP协议以后的虚拟网卡
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:41:8d:2a brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:41:8d:34 brd ff:ff:ff:ff:ff:ff

修改网卡名

第一步:
[root@localhost ~]# cat  /etc/default/grub 
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet net.ifnames=0  "
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

第二步:
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg 
Generating grub configuration file ...
done

IEEE

国际电子电器工程师协会
IEEE 802.1
IEEE 802.2
IEEE 802.3
IEEE 802.11  无线网络标准
载波侦听多路访问 ,有冲突就不发报
RJ-45水晶头 
       T568B   橙白  橙  绿白 蓝  蓝白绿  棕白 棕
       T568A   绿白  棕  橙白 蓝  蓝白绿  棕白 橙 
直连线  
交叉线

以太网的帧结构

前导信息  8个字节
目标地址  6
源地址    6 
类型     2个字节的类型(作用是:注明为下一层提供什么服务)
数据     可大可小
校验信息  FCS

MAC地址

前24位:分配给厂家的
后24位

vln 虚拟局域网

#vlan  虚拟局域网 分割广播域
在交换机上隔离广播域的效果

TCP UDP

都是传输层的两个协议
TCP :传输控制协议
[root06:45 PMcentos7 ]#yum install man-pages
[root06:45 PMcentos7 ]#man 7  tcp
可靠,对文件的可靠型要求比较高

UDP : 
非面向连接,传输速度快,提供不可靠的网络访问

网线标准

上世纪80年代初,诞生了最早的网线标准(CAT),这个标准一直沿用至今,主要根据带宽和传输速率来

区分,从一类网线CAT1——八类网线CAT8

1、 一类网线:主要用于传输语音,不同于数据传输主要用于八十年代初之前的电话线缆,已淘汰。2、 二类网线:传输带宽为1MHZ,用于语音传输,最高数据传输速率4Mbps,常见于使用4Mbps规范

令牌传递协议的旧的令牌网(Token Ring),已被淘汰

3、 三类网线:该电缆的传输带宽16MHz,用于语音传输及最高传输速率为10Mbps的数据传输,主要

用于10BASE--T,被ANSI/TIA-568.C.2作为最低使用等级 。

4、 四类网线:该类电缆的传输频率为20MHz,用于语音传输和最高传输速率16Mbps(指的是

16Mbit/s令牌环)的数据传输,主要用于基于令牌的局域网和 10BASE-T/100BASE-T。最大网段长为

100m,采用RJ形式的连接器,未被广泛采用。

5、 五类线:可追溯到1995年,传输带宽为100MHz,可支持10Mbps和100Mbps传输速率(虽然现实

中与理论值有一定差距),主要用于双绞线以太网(10BASE-T/100BASE-T),目前仍可使用,不过在

新网络建设中已经很难看到。

6、 超五类线:标准于2001年被提出,传输带宽为100MHz,近距离情况下传输速率已可达

1000Mbps。它具有衰减小,串扰少,比五类线增加了近端串音功率和测试要求,所以它也成为了当前

应用最为广泛的网线

7、 六类线:继CAT5e之后,CAT6标准被提出,传输带宽为250MHz,最适用于传输速率为1Gbps的应

用。改善了在串扰以及回波损耗方面的性能,这一点对于新一代全双工的高速网络应用而言是极重要

的,还有一个特点是在4个双绞线中间加了十字形的骨架。

8、 超六类线:超六类线是六类线的改进版,发布于2008年,同样是ANSI/TIA-568C.2和ISO/IEC 11801

超六类/EA级标准中规定的一种双绞线电缆,主要应用于万兆位网络中。传输频率500 MHz,最大传输

速度也可达到10Gbps ,在外部串扰等方面有较大改善。

9、 七类线:该线是ISO/IEC 11801 7类/F级标准中于2002年认可的一种双绞线,它主要为了适应万兆

以太网技术的应用和发展。但它不再是一种非屏蔽双绞线了,而是一种屏蔽双绞线,所以它的传输频率

至少可达600 MHz,传输速率可达10 Gbps。

10、 超七类线:相对于CAT7最大区别在于,支持的频率带宽提升到了1000MHz,在国内而言,七类网

线已经有很少地方使用了,超七类就更加没有广泛的进入人们的生活,目前使用范围最广的是超五类、

六类等网线

11、 八类线CAT8:相关标准由美国通信工业协会 (TIA)TR-43委员会在2016年正式发布,支持

2000MHz带宽,支持40Gbps以太网络,主要应用于数据中心

集线器 hub

  • 便宜 省钱

集线器(Hub)工作在物理层,是中继器的一种形式,是一种集中连接缆线的网络组件,可以认为集线

器是一个多端口的中继器,集线器能够提供多端口服务,主要功能是对接收到的信号进行再生整形放

大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上

Hub并不记忆报文是由哪个MAC地址发出,哪个MAC地址在Hub的哪个端口

Hub的特点:

共享带宽

半双工

网桥

网桥(Bridge)也叫桥接器,是连接两个局域网的一种存储/转发设备,根据MAC地址表对数据帧进行

转发,可隔离碰撞域

网桥将网络的多个网段在数据链路层连接起来,并对网络数据帧进行管理

网桥的内部结构

优点

过滤通信量

扩大了物理范围

提高了可靠性

可互连不同物理层、不同 MAC 子层和不同速率(如10 Mb/s 和 100 Mb/s 以太网)的局域网

缺点

存储转发增加了时延

在MAC 子层并没有流量控制功能

具有不同 MAC 子层的网段桥接在一起时时延更大

网桥只适合于用户数不太多(不超过几百个)和通信量不太大的局域网,否则有时还会因传播过多的

广播信息而产生网络拥塞。这就是所谓的广播风暴

交换机

工作原理

(1)交换机根据收到数据帧中的源MAC地址建立该地址同交换机端口的映射,并将其写入MAC地址表

(2)交换机将数据帧中的目的MAC地址同已建立的MAC地址表进行比较,以决定由哪个端口进行转发

(3)如数据帧中的目的MAC地址不在MAC地址表中,则向所有端口转发。这一过程称为泛洪(flflood)

(4)广播帧和组播帧向所有的端口转发

集线器与交换机的比较

(1)交换机属于数据链路层设备,而集线器属于物理层设备

(2)集线器在转发帧时,不对传输介质进行检测,交换机在转发帧之前必须执行 CSMA/CD 算法。若

在发送过程中出现碰撞,就必须停止发送和进行退避。所以交换机能隔离冲突,而集线器却只能增加冲

(3) 交换机的每个端口可提供专用的带宽,而集线器的所有端口只能共享带宽

(4)集线器只能实现半双工传送,而交换机可支持全双工传送

(5)集线器和交换机都无法隔离广播域

路由器 router

为了实现路由,路由器需要做下列事情:

分隔广播域和冲突域

选择路由表中到达目标最好的路径

维护和检查路由信息

连接广域网

路由:把一个数据包从一个设备发送到不同网络里的另一个设备上去。这些工作依靠路由器来完

成。路由器只关心网络的状态和决定网络中的最佳路径。路由的实现依靠路由器中的路由表来完成

端口

[root07:19 PMcentos7 ]#cat /proc/sys/net/ipv4/ip_local_port_range  #可以改变
32768	60999

[root@centos8 ~]#echo 20000 62000 > /proc/sys/net/ipv4/ip_local_port_range
[root@centos8 ~]#cat /proc/sys/net/ipv4/ip_local_port_range      #调大端口号
20000 62000


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

[root@localhost ~]# cat /proc/sys/net/ipv4/ip_local_port_range
32768	60999

#查看服务的端口号
[root07:29 PMcentos7 ]#less /etc/services 
#windows上也可以查看:
C:\Windows\System32\drivers\etc\services
#查看这个端口号没有被使用
[root07:31 PMcentos7 ]#grep 9527 /etc/services 

以太网MAC帧格式

数据帧的大小 72~1526 相当于邮寄包裹是包裹箱子也要称重的

11.jpg

12.jpg13.jpg 以太网(Ethernet)是一种产生较早且使用相当广泛的局域网,由美国Xerox(施乐)公司的Palo Alto

研究中心(简称为PARC)于20世纪70年代初期开始研究并于1975年研制成功

06.jpg

MAC的前24位是固定的

在局域网中,硬件地址又称为物理地址或MAC地址(因为这种地址用在MAC帧中)
IEEE 802标准为局域网规定了一种48位的全球地址(一般都简称为“地址”),是局域网中每一台计算机固
化在网卡ROM中的地址
IEEE 的注册管理机构 RA 负责向厂家分配地址字段的前三个字节(即高位 24 位)
地址字段中的后三个字节(即低位 24 位)由厂家自行指派,称为扩展标识符,必须保证生产出的适配器没
有重复地址

冲突检测的载波侦听多路访问CSMA/CD

工作原理
先听后发
边发边听
冲突停止
延迟重发

虚拟局域网 VLAN,隔离广播域

虚拟局域网的实现技术

(1)基于端口的VLAN

(2)基于MAC地址的VLAN

(3)基于协议的VLAN

(4)基于网络地址的VLAN

虚拟局域网 VLAN 是由一些局域网网段构成的与物理位置无关的逻辑组
这些网段具有某些共同的需求。每一个 VLAN 的帧都有一个明确的标识符,指明发送这个帧的工作站是
属于哪一个 VLAN。虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网
优点
(1)更有效地共享网络资源。如果用交换机构成较大的局域网,大量的广播报文就会使网络性能下
降。VLAN能将广播报文限制在本VLAN范围内,从而提升了网络的效能
(2)简化网络管理。当结点物理位置发生变化时,如跨越多个局域网,通过逻辑上配置VLAN即可形成
网络设备的逻辑组,无需重新布线和改变IP地址等。这些逻辑组可以跨越一个或多个二层交换机
(3)提高网络的数据安全性。一个VLAN中的结点接收不到另一个VLAN中其他结点的帧

21.png22.png win 445 端口是一个文件夹共享以后通过445端口可以

08.jpg

VLAN数据帧

23.jpg

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

TRUNK 的介绍和配置

https://blog.csdn.net/qq_37763760/article/details/99683320

三层交换机

企业内部,避免使用路由器。

24.jpg

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,成为今天的互联网和局域网的基石和标准,由互联网工程任务组负责维护

09.jpg10.jpg 3.1.4 TCP/IPOSI****模型的比较

相同点

两者都是以协议栈的概念为基础

协议栈中的协议彼此相互独立

下层对上层提供服务

不同点

OSI是先有模型;TCP/IP是先有协议,后有模型

OSI是国际标准,适用于各种协议栈;TCP/IP实际标准,只适用于TCP/IP网络

层次数量不同

transport

26.jpg27.jpg 14.jpg

TCP特性

TCP Transmission Control Protocol

工作在传输层
面向连接协议
全双工协议
半关闭
错误检查
将数据打包成段,排序
确认机制
数据恢复,重传
流量控制,滑动窗口
拥塞控制,慢启动和拥塞避免算法
更多关于tcp的内核参数,可参看man 7 tcp

TCP 包头

源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口
某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通
信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个,即65536
序列号:表示本报文段所发送数据的第一个字节的编号。在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字节

15.jpg

  • 端口号:2^16 个

16.jpg

三次握手和四次挥手

  • TCP协议的序号和确认号导致它的安全

28.jpg

三次握手(three-way handshaking)

1.背景:TCP位于传输层,作用是提供可靠的字节流服务,为了准确无误地将数据送达目的地,TCP协议采纳三次握手策略。

2.原理:

1)发送端首先发送一个带有SYN(synchronize)标志地数据包给接收方。

2)接收方接收后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了。

3)最后,发送方再回传一个带有ACK标志的数据包,代表我知道了,表示’握手‘结束。

通俗的说法

1)Client:嘿,李四,是我,听到了吗?

2)Server:我听到了,你能听到我的吗?

3)Client:好的,我们互相都能听到对方的话,我们的通信可以开始了

ACK:表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规 定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段

  • ACK只能是0或1 ack 是一个序列号,2^32

  • 2次握手只能说明A到B成功,但是B到A成功与否不确定,只有三次握手说明A B能相互的成功

SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报 文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同 意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段

三次握手的五种连接状态

closed syn-sent listen sys-rcvd estab-lished

四次挥手

29.jpg

四次挥手(Four-Way-Wavehand)

1.意义:当被动方收到主动方的FIN报文通知时,它仅仅表示主动方没有数据再发送给被动方了。但未必被动方所有的数据都完整的发送给了主动方,所以被动方不会马上关闭SOCKET,它可能还需要发送一些数据给主动方后,再发送FIN报文给主动方,告诉主动方同意关闭连接,所以这里的ACK报文和FIN报文多数情况下都是分开发送的。

2.原理:

1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手

通俗的说法

1)Client:我所有东西都说完了

2)Server:我已经全部听到了,但是等等我,我还没说完

3)Server:好了,我已经说完了

4)Client:好的,那我们的通信结束

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字节

  • 挥手的话,服务端和客服端都可以提出 ,也可以不友好的不按套路挥手,直接关机那种
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报文段在网络中的最大生存时间, RFC

1122标准的建议值是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参数优化

参看帮助: man tcp

[root@localhost ~]# man -w tcp
/usr/share/man/man7/tcp.7.gz

编辑文件/etc/sysctl.conf,加入以下内容:然后执行 sysctl -p 让参数生效

net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 2000 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_max_orphans = 16384
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_fin_timeout 表示套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态
的时间,默认值是60秒。 该参数对应系统路径为:/proc/sys/net/ipv4/tcp_fin_timeout 60

net.ipv4.tcp_tw_reuse 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认值
为0,表示关闭。 该参数对应系统路径为:/proc/sys/net/ipv4/tcp_tw_reuse 0

net.ipv4.tcp_tw_recycle 表示开启TCP连接中TIME-WAIT sockets的快速回收。 该参数对应系统路
径为:/proc/sys/net/ipv4/tcp_tw_recycle,默认为0,表示关闭。 提示:reuse和recycle这两个
参数是为防止生产环境下Web、Squid等业务服务器time_wait网络状态数量过多设置的。

net.ipv4.tcp_syncookies 表示开启SYN Cookies功能。当出现SYN等待队列溢出时,启用Cookies
来处理,可防范少量SYN攻击,这个参数也可以不添加。 该参数对应系统路径
为:/proc/sys/net/ipv4/tcp_syncookies,默认值为1

net.ipv4.tcp_keepalive_time 表示当keepalive启用时,TCP发送keepalive消息的频度。默认是2
小时,建议改为10分钟。 该参数对应系统路径为:/proc/sys/net/ipv4/tcp_keepalive_time,默认
为7200秒。

net.ipv4.ip_local_port_range 该选项用来设定允许系统打开的端口范围,即用于向外连接的端口
范围。 该参数对应系统路径为:/proc/sys/net/ipv4/ip_local_port_range 32768 61000

net.ipv4.tcp_max_syn_backlog 表示SYN队列的长度,即半连接队列长度,默认为1024,建议加
大队列的长度为8192或更多,这样可以容纳更多等待连接的网络连接数。 该参数为服务器端用于
记录那些尚未收到客户端确认信息的连接请求最大值。 该参数对象系统路径
为:/proc/sys/net/ipv4/tcp_max_syn_backlog

net.ipv4.tcp_max_tw_buckets 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数
值,TIME_WAIT套接字将立刻被清除并打印警告信息。 默认为180000,对于Apache、Nginx等服
务器来说可以将其调低一点,如改为5000~30000,不通业务的服务器也可以给大一点,比如
LVS、Squid。 此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的
TIME_WAIT套接字拖死。 该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_tw_buckets

net.ipv4.tcp_synack_retries 参数的值决定了内核放弃连接之前发送SYN+ACK包的数量。 该参数
对应系统路径为:/proc/sys/net/ipv4/tcp_synack_retries,默认值为5

net.ipv4.tcp_syn_retries 表示在内核放弃建立连接之前发送SYN包的数量。 该参数对应系统路径
为:/proc/sys/net/ipv4/tcp_syn_retries,默认值为6

net.ipv4.tcp_max_orphans 用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文
件句柄上。 如果超过这个数值,孤立连接将被立即被复位并打印出警告信息。 这个限制只有为了
防止简单的DoS攻击。不能过分依靠这个限制甚至认为减少这个值,更多的情况是增加这个值。
该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_orphans ,默认值8192

net.core.somaxconn 同时发起的TCP的最大连接数,即全连接队列长度,在高并发请求中,可能
会导致链接超时或重传,一般结合并发请求数来调大此值。 该参数对应系统路径
为:/proc/sys/net/core/somaxconn ,默认值是128

net.core.netdev_max_backlog 表示当每个网络接口接收数据包的速率比内核处理这些包的速率
快时,允许发送到队列的数据包最大数。 该参数对应系统路径
为:/proc/sys/net/core/netdev_max_backlog,默认值为1000

tcpdump

tcpdump  -i eth0 -nn  host 10.0.0.28           #抓包和10.0.0.28 之间的连接包

tcpdump  -i eth0 -nn  host 10.0.0.28   -X     #十六进制的方式

#只抓icmp包,譬如你用ping 命令时候想抓包
[root@localhost ~]# tcpdump  -i ens33 -nn -e icmp

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_contro
[root@localhost ~]# cat  /proc/sys/net/ipv4/tcp_congestion_control
cubic

nc

#服务端安装nc开启9527服务
[root07:32 PMcentos7 ]#yum install nc -y
[root07:36 PMcentos7 ]#nc -l 9527
hello

#客服端连接服务端发信息
[root07:36 PMcentos8 ~]#nc 10.0.0.73 9527
hello

#服务端收到信息
[root07:36 PMcentos7 ]#nc -l 9527
hello


[root07:35 PMcentos8 ~]#ss -nt   客服端用56180连接服务端的9527端口
State Recv-Q Send-Q Local Address:Port  Peer Address:Port  
ESTAB 0      0           10.0.0.8:22        10.0.0.1:57095 
ESTAB 0      36          10.0.0.8:22        10.0.0.1:65224 
ESTAB 0      0           10.0.0.8:56180    10.0.0.73:9527


端口冲突,发现端口谁在使用

[root08:21 PMcentos8 ~]#lsof -i :22 #例如22号端口
[root08:21 PMcentos8 ~]#ss  -tlnp
[root@localhost ~]# ss  -tlnp
State             Recv-Q            Send-Q                       Local Address:Port                       Peer Address:Port                                                                                                                                                 
LISTEN            0                 128                                0.0.0.0:80                              0.0.0.0:*               users:(("httpd",pid=3120,fd=3),("httpd",pid=3119,fd=3),("httpd",pid=3118,fd=3),("httpd",pid=3116,fd=3))                              
LISTEN            0                 128                                0.0.0.0:22                              0.0.0.0:*               users:(("sshd",pid=968,fd=5))                                                                                                        
LISTEN            0                 128                                   [::]:22                                 [::]:*               users:(("sshd",pid=968,fd=7))     

判断某个端口是否打开

#例如,判断22号端口是否开启
[root09:57 PMcentos7 ]#</dev/tcp/127.0.0.1/22
[root09:57 PMcentos7 ]#echo $?
0

标准输入重定向的上网

利用标准输入重定向 将80 映射8的文件描述符
用命令向8发请求
读取8

17.png

半关闭状态

服务端不挥手,继续发数据


[root@localhost ~]# cat /proc/sys/net/ipv4/tcp_max_orphans
4096

sync半连接和accept全连接队列

/proc/sys/net/ipv4/tcp_max_syn_backlog 未完成连接队列大小,默认值128,建议调整大小为1024
以上
/proc/sys/net/core/somaxconn 完成连接队列大小,默认值128,建议调整大小为1024以 上

30.jpg

strace 跟踪命令

18.jpg

优化连接数

[root09:57 PMcentos7 ]#cat  /proc/sys/net/ipv4/tcp_max_syn_backlog 
128
[root10:27 PMcentos7 ]#echo 1024 > !$
echo 1024 > /proc/sys/net/ipv4/tcp_max_syn_backlog
[root10:27 PMcentos7 ]#cat  /proc/sys/net/ipv4/tcp_max_syn_backlog 
1024

UDP

UDP User Datagram Protocol

工作在传输层
提供不可靠的网络访问
非面向连接协议
有限的错误检查
传输性能高
无数据恢复特性
更多关于udp的内核参数,可参看man 7 udp

UDP包头

31.png

ping向网络发送icmp报文

[root06:52 AMcentos8 ~]#ping 10.0.0.8 -s 655   #发送655个包
PING 10.0.0.8 (10.0.0.8) 655(683) bytes of data.
663 bytes from 10.0.0.8: icmp_seq=1 ttl=64 time=0.027 ms

-f 洪水泛滥,尽最大的能力去ping,因为每次发报文他要回复

[root@centos8 ~]#ping -s 65508 10.0.0.8
Error: packet size 65508 is too large. Maximum is 65507
[root@centos8 ~]#ping -s 65507 -f 10.0.0.8
PING 172.16.21.111 (172.16.21.111) 65507(65535) bytes of data.

DDos攻击:就是分布式发大量的报文访问

32.jpg

windows 通过进程找IP

通过PID找到 IP地址

19.png

用icmp协议判断网络状态

[root@centos7 ~]#ping 10.0.0.8
PING 10.0.0.8 (10.0.0.8) 56(84) bytes of data.
64 bytes from 10.0.0.8: icmp_seq=1 ttl=64 time=0.307 ms
64 bytes from 10.0.0.8: icmp_seq=2 ttl=64 time=0.344 ms

arp (IP装换为MAC)Address Resolution Protocol**

rarp (mac地址装换为ip)

ARP 地址解析协议由互联网工程任务组(IETF)在1982年11月发布的RFC 826中描述制定,是根据IP地

址获取物理地址的一个TCP/IP协议。

主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确

定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次

请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,局

域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将

其记入本机ARP缓存

33.jpg34.jpg

地址解析协议,利用IP地址把他解析成MAC,ARP发送广播,在数据
[root@localhost ~]# yum install -y net-tools
[root07:23 AMcentos7 ]#arp   -n       #ARP广播
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.0.3                         (incomplete)                              ens33
10.0.0.1                 ether   00:50:56:c0:00:08   C                     ens33
10.0.0.34                        (incomplete)                              ens33
10.0.0.8                 ether   00:0c:29:41:8d:2a   C                     ens33
10.0.0.2                 ether   00:50:56:e1:61:4d   C                     ens33
相互通讯以后就会有缓存,相互缓存
[root07:25 AMcentos8 ~]#tcpdump -i eth0 -nn arp  #抓包
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
07:25:51.545311 ARP, Request who-has 10.0.0.73 tell 10.0.0.8, length 28
07:25:51.545512 ARP, Reply 10.0.0.73 is-at 00:0c:29:58:ed:19, length 46
07:25:58.182096 ARP, Request who-has 10.0.0.8 tell 10.0.0.73, length 46
07:25:58.182110 ARP, Reply 10.0.0.8 is-at 00:0c:29:41:8d:2a, length 28
07:26:02.892596 ARP, Request who-has 10.0.0.8 (00:0c:29:41:8d:2a) tell 10.0.0.1, length 46
        arp没有任何的确认,直接就说自己是ARP 
#arp欺骗
arp 静态绑定,防止arp欺骗
arp -s 10.0.0.8 00:0c:29:32:80:38

ARP静态绑定可以防止ARP欺骗

[root@centos8 ~]#arp -s 10.0.0.6 00:0c:29:32:80:38
[root@centos8 ~]#arp -n
Address                 HWtype HWaddress           Flags Mask           Iface
10.0.0.6                 ether   00:0c:29:32:80:38   CM                   eth0
10.0.0.7                 ether   00:0c:29:32:80:38   C                     eth0
10.0.0.1                 ether   00:50:56:c0:00:08   C                     eth0

34.png

kali 系统实现 arp 欺骗上网流量劫持

#启动路由转发功能
[root@kali ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
#安装包
[root@kali ~]# apt-get install dsniff 
#欺骗目标主机,本机是网关
[root@kali ~]# arpspoof -i eth0 -t 被劫持的目标主机IP 网关IP
#欺骗网关,本机是目标主机
[root@kali ~]# arpspoof -i eth0 -t 网关IP 被劫持的目标主机IP

Gratuitous ARP 免费ARP

Gratuitous ARP也称为免费ARP,无故ARP。Gratuitous ARP不同于一般的ARP请求,它并非期待得到

ip对应的mac地址,而是当主机启动的时候,将发送一个Gratuitous arp请求,即请求自己的ip地址的

mac地址

免费ARP可以有两个方面的作用:

验证IP是否冲突:一个主机可以通过它来确定另一个主机是否设置了相同的 IP地址

更换物理网卡:如果发送ARP的主机正好改变了物理地址(如更换物理网卡),可以使用此方法通

知网络中其它主机及时更新ARP缓存

Reverse Address Resolution Protocol

RARP 即将MAC转换成IP 反向ARP

35.png

type

36.png

internet 协议

38.png

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

37.png

版本:占4位,指 IP 协议的版本目前的IP协议版本号为4
首部长度:占4位,可表示的最大数值是15个单位,一个单位为4字节,因此IP 的首部长度的最大值是
60字节
区分服务:占8位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过.后改名为
区分服务.只有在使用区分服务(DiffServ)时,这个字段才起作用.一般的情况下不使用
总长度:占16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节.总长度
必须不超过最大传送单元 MTU
标识:占16位,它是一个计数器,通常,每发送一个报文,该值会加1, 也用于数据包分片,在同一个
包的若干分片中,该值是相同的
标志(flag):占3位,目前只有后两位有意义
DF: Don’t Fragment 中间的一位,只有当 DF=0 时才允许分片
MF: More Fragment 最后一位,MF=1表示后面还有分片,MF=0 表示最后一个分片
IP PDU 报头
片偏移:占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字节,分别记录源地址和目的地址

40.png windows 的TTL是128

Linux的TTL是64

发现IP冲突的主机


[root@centos8 ~]#arping 10.0.0.6
ARPING 10.0.0.6 from 10.0.0.8 eth0
Unicast reply from 10.0.0.6 [00:0C:29:E0:2F:37]  0.779ms
Unicast reply from 10.0.0.6 [00:0C:29:32:80:38]  0.798ms
Unicast reply from 10.0.0.6 [00:0C:29:32:80:38]  0.926ms
Unicast reply from 10.0.0.6 [00:0C:29:32:80:38]  0.864ms
^CSent 3 probes (1 broadcast(s))
Received 4 response(s)

traceroute 跟踪经过的路由器的地址

C:\Users\Hasee> tracert  -d www.baidu.com    #Windows命令

[root09:50 AMcentos8 ~]#traceroute www.baidu.com

[root10:16 AMcentos8 ~]#tracepath 114.114.114.114

ip地址

添加IP地址 ip a a


[root@localhost ~]# ip  a a 10.0.0.27/24 dev eno16777736 label eno16777736:1

IP地址组成

它们可唯一标识 IP 网络中的每台设备 ,每台主机(计算机、网络设备、外围设备)必须具有唯一的地址

IP地址由两部分组成

网络ID:标识网络,每个网段分配一个网络ID,处于高位

主机 ID:标识单个主机,由组织分配给各设备,处于低位

mac地址唯一的网卡地址,
ip地址有可管理性,IP地址能体现出你的网段,体现出你在哪个网段,一个网段就是一个广播地址
局域网用交换机切换为VLAN,每一个网路

网络ID   主机ID   
A类 1~127         0         8位的网络号,固定了以0开头     有2^7-2=126个网段  每个网段可有的主机2^24-2=16777214
B类 128~191       10        16位网络号, 固定了以10开头    
C类 192~223       110       24位网络号   固定了以110开头
D类 224~239       1110      组播 多播
E类 240           11110     保留未使用

私有IP(不直接用于互联网,在局域网使用,公网地址世界唯一)
10.0.0.0       10.255.255.255
172.16.0.0     172.31.255.255
192.168.0.0    192.168.255.255

特殊地址:
169.254.x.x  主机使用DHCP分配的,但是却分配不到,系统给的  
0.0.0.0 所有不清楚的主机和目标网络
255.255.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服务器获取地址,系统会为主
机分配这样地址

用10进制ping

42.png

子网掩码

CIDR:无类域间路由,目前的网络已不再按A,B,C类划分网段,可以任意指定网段的范围

CIDR 无类域间路由表示法:IP/网络ID位数,如:172.16.0.100/16

netmask子网掩码:32位或128位(IPv6)的数字,和IP成对使用,用来确认IP地址中的网络ID和主机

ID,对应网络ID的位为1,对应主机ID的位为0,范例:255.255.255.0 ,表现为连续的高位为1,连续的低

位为0

相关公式:

一个网络的最多的主机数=2^主机ID位数-2

网络(段)数=2^网络ID中可变的位数

网络ID=IP与netmask

范例:一个主机:172.16.1.100/28

1、此主机所在的网段最多有多少主机?主机数=2^(32-28)-2=14

2、网络ID? IP和子网掩码相与,172.16.1.96

172.16.1.0110|0100
         1111|
       ------|------
         0110|0000
  -----------|-----------
172.16.1.96  |
-------------|----------
             |  
		 0110|1110=110	
             | 

43.png 3、此网段的主机中最小的IP:172.16.1.97,最大的IP?172.16.1.110

CIDR 无类域间路由
#分配给120台主机怎样子网掩码
2^7=128
255.255.255.10000000
255.255.255.128   =/25

拿自己的子网掩码和自己与运算
拿自己的子网掩码和对方与运算 看看是不是同一网段
A  192.168.1.100/24
B  192.168.2.200/16
     B认为和A是同一网段,B发出去的包一去无回  B访问A超时
     A却不认为和B是同一网段  A              A访问B目标主机不可达

#以下的两台机器可以ping通
192.168.1.100/8 /12 /15
192.168.2.100/16       

和1相与保留原值
和0相与都是0

范例:判断A和B是否在网一个网段

A: 192.168.1.100 netmask:255.255.255.0
B: 192.168.2.100 netmask:255.255.0.0

1)用A主机子网掩码分别与A及B的IP与
A主机网络地址11000000.10101000.00000001.01100100与
A主机子网掩码11111111.11111111.11111111.00000000得
		   11000000.10101000.00000001.00000000即
192.168.1.0

B主机网络地址11000000.10101000.00000010.01100100与
A主机子网掩码11111111.11111111.11111111.00000000得
		   11000000.10101000.00000010.00000000即
192.168.2.0

192.168.1.0<>192.168.2.0,所以A和B不在同一网段


2)用B主机子网掩码分别与A及B的IP与
A主机网络地址11000000.10101000.00000001.01100100与
B主机子网掩码11111111.11111111.00000000.00000000得
		   11000000.10101000.00000000.00000000即
192.168.0.0

B主机网络地址11000000.10101000.00000010.01100100与
B主机子网掩码11111111.11111111.00000000.00000000得
		   11000000.10101000.00000000.00000000即
192.168.0.0

192.168.0.0<>192.168.0.0,所以A和B在同一网段

通过以上比较判断,两次的结果不一致,A和B是无法通讯的

静态IP的配置

44.png

子网划分

划分子网

划分子网:将一个大的网络(主机数多)划分成多个小的网络(主机数少),主机ID位数变少,网络ID

位数变多,网络ID位向主机ID位借位

45.png

中国移动10.0.0.0/8 给32个各省公司划分对应的子网
1)每个省公司的子网的netmask?
32个分公司,需要至少32个子网,因为2^5=32,所以需要借5位主机的ID。
即网络位就是8+5=13
子网掩码就是:11111111.11111000.0.0即255.248.0.0

2)每个省公司的子网的主机数有多少?
2^(32-13)-2=524286

3)河南省得到第10个子网,网络ID是多少?
因为10.00000 000.0.0/13是第1个子网,所以第10个子网就是10.01001 000.0.0/13,
转换成二进制就是10.72.0.0/13

4)河南省得到第10个子网的最小IP和最大的IP?
最小IP地址:10.01001 000.0.1,即10.72.0.1
最大IP地址:10.01001 111.11111111.11111110,即10.79.255.254

5)所有子网中最小和最大的子网的netid?
最小的网络ID:10.00000 000.0.0/13,即10.0.0.0/13
最大的网络ID:10.11111 000.0.0/13,即10.248.0.0/13


中国移动10.0.0.0/8 给32个各省公司划分对应的子网,河南省得到第10个子网,再给省内的16个地市划分子
网。

#由上例得知,河南省得到的第10个子网的网络ID是10.01001 000.0.0/13,即10.72.0.0/13
#省内需再划分16个子网,即再从主机ID借4位,那网络ID就是17
1)每个市公司的子网的netmask?
#网络ID是17,所以子网掩码是255.255.128.0

2)每个市公司的子网的主机数有多少?
2^(32-17)-2=32766

3)各地市的最小netid和最大的netid?
最小的网络ID:10.01001 000.0 0000000.0,即10.72.0.0/17
最大的网络ID:10.01001 111.1 0000000.0,即10.79.128.0/17

4)洛阳市第2个子网,最小IP和最大IP?
第一个子网是10.01001 000.0 0000000.0,即10.72.0.0/17
第二个子网是10.01001 000.1 0000000.0,即10.72.128.0/17
第3~16个子网是:
10.73.0.0/17
10.73.128.0
10.74.0.0
10.74.128.0
10.75.0.0
10.75.128.0
10.76.0.0
10.76.128.0
10.77.0.0
10.77.128.0
10.78.0.0
10.78.128.0
10.79.0.0
10.79.128.0

洛阳第二个子网,最小IP和最大IP
最小IP:10.01001 000.1 0000000.00000001,即10.72.128.1/17
最大IP:10.01001 000.1 1111111.11111110,即10.72.255.254/17

46.png

合并超网,为了路由表优化

主机ID向网络ID借位,即将小的子网划分为一个大网,与子网划分正好相反
8个网段一个都不能少,才能正好合并为一个超网  
220.78.10101000.00000000/21
取相同的部分  220.78.168.0/21
合并必须在一块
8个C类网段
220.78.168.0/24
220.78.169.0/24
220.78.170.0/24
220.78.171.0/24
220.78.172.0/24
220.78.173.0/24
220.78.174.0/24
220.78.175.0/24
220.78.10101 000.0   220.78.168.0/24
220.78.10101 001.0   220.78.169.0/24
220.78.10101 010.0   220.78.170.0/24
......
220.78.10101 110.0   220.78.174.0/24
220.78.10101 111.0   220.78.175.0/24
合并成
220.78.168.0/21

#将220.78.168.0/21 划分8个子网 就要借3位 

DHCP获取IP

47.png

DHCP自动获取IP地址

48.png

centos6 修改网卡名字

[root@centos6 ~]# vi  /etc/udev/rules.d/70-persistent-net.rules 

# program, run by the persistent-net-generator.rules rules file.
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:e2:b4:8a", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"       #修改name就修改了网卡名字

# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:e2:b4:94", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
                                                                                                             reboot 就可以了
                                                                                                             
或者不重启,修改网卡的驱动
[root@centos6 ~]# vim  ethtool -i eth0
driver: e1000       #这是网卡驱动的名称
version: 7.3.21-k8-NAPI
firmware-version: 
bus-info: 0000:02:01.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no

[root@localhost ~]# ethtool -i eth0
driver: e1000
version: 7.3.21-k8-NAPI
firmware-version: 
expansion-rom-version: 
bus-info: 0000:02:01.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
[root@localhost ~]# 

该命令也可以查看网卡驱动
 [root@centos6 ~]# dmesg |grep eth  -C  10
 卸载网卡驱动 
  [root@centos6 ~]# modprobe -r e1000
 重新加载网卡: 
  [root@centos6 ~]# modprobe    e1000

ip link 临时修改网卡名

ip link  set  eth0  down
ip  link  set  eth0  name  abc
ip  link  set abc up

ifconfig

[root@centos6 ~]# rpm  -qf `which ifconfig`
net-tools-1.60-114.el6.x86_64
安装生成哪些文件 
[root03:10 PMcentos7 ]#rpm -ql net-tools

[root03:22 PMcentos7 ]#rpm -qi net-tools
Name        : net-tools
Version     : 2.0
Release     : 0.25.20131004git.el7
Architecture: x86_64
Install Date: Wed 21 Apr 2021 03:57:11 PM EDT
Group       : System Environment/Base
Size        : 938978
License     : GPLv2+
Signature   : RSA/SHA256, Thu 22 Aug 2019 05:36:04 PM EDT, Key ID 24c6a8a7f4a80eb5
Source RPM  : net-tools-2.0-0.25.20131004git.el7.src.rpm
Build Date  : Thu 08 Aug 2019 09:10:26 PM EDT
Build Host  : x86-02.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://sourceforge.net/projects/net-tools/
Summary     : Basic networking tools
Description :
The net-tools package contains basic networking tools,
including ifconfig, netstat, route, and others.
Most of them are obsolete. For replacement check iproute package.  # 被iproute 代替了
[root03:22 PMcentos7 ]#

ifconfig 的基本配置

#关闭网卡
ifconfig eth1 down

#临时配置IP:
ifconfig  ens33 192.168.1.2/24

#清空地址
[root03:30 PMcentos7 ]#ifconfig  ens37 0.0.0.0/0

#给一个网卡多个地址
[root03:33 PMcentos7 ]#ifconfig ens33:1 192.168.1.200/24

#清理刚才配置的ip
[root03:37 PMcentos7 ]#ifconfig ens33:1  down

-s 统计网卡的流量
[root03:40 PMcentos7 ]#ifconfig -s
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
ens33            1500      445      0      0 0           302      0      0      0 BMRU
ens37            1500        7      0      0 0            12      0      0      0 BMRU
lo              65536        1      0      0 0             1      0      0      0 LRU

ifconfig -a 查看所有的禁用或者启用的IP 

watch

50.jpg

配置静态Ip

51.jpg

  • static可以写成none
  • PREFIX=24 是子网掩码 等价于 NETMASK=255.255.255.0

52.jpg53.jpg54.jpg

主机名

#centos6 之前版本
/etc/sysconfig/network
HOSTNAME=
#centos7 以后版
/etc/hostname 
HOSTNAME

本地主机名数据库和IP地址的映射

优先于使用DNS前检查

getent hosts 查看/etc/hosts 内容

/etc/hosts

网卡别名

将多个IP地址绑定到一个NIC上
每个IP绑定到独立逻辑网卡,即网络别名,命名格式: ethX:Y,如:eth0:1 、eth0:2、eth0:3
ifconfig eth0:0 192.168.1.100/24 up 
ifconfig eth0:0 down

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

为每个设备别名生成独立的接口配置文件,格式为:ifcfg-ethX:xxx
[root@centos8 ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0:1
DEVICE=eth0:1
IPADDR=10.0.0.100
PREFIX=8
[root@centos8 ~]#ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
       inet 10.0.0.8 netmask 255.255.255.0 broadcast 10.0.0.255
       inet6 fe80::20c:29ff:fe09:f5b prefixlen 64 scopeid 0x20<link>
       ether 00:0c:29:09:0f:5b txqueuelen 1000 (Ethernet)
       RX packets 2320 bytes 200266 (195.5 KiB)
       RX errors 0 dropped 0 overruns 0 frame 0
       TX packets 1891 bytes 279736 (273.1 KiB)
       TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
       inet 10.0.0.100 netmask 255.0.0.0 broadcast 10.255.255.255
       ether 00:0c:29:09:0f:5b txqueuelen 1000 (Ethernet)

注意:

  • [ ] 建议 CentOS 6 关闭 NetworkManager 服务

  • [ ] 网卡别名必须使用静态地址

route

[root03:40 PMcentos7 ]#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.2        0.0.0.0         UG    100    0        0 ens33
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 ens37

路由的配置

#添加路由
route add  
例如:route  add -net 172.16.0.0/16 gw 172.18.0.200/16  dev eth1
     添加的路由的网段是 172.16.0.0  网关是172.18.0.200
 最边界的路由器可以配置成默认的路由: route add  default  gw 172.18.0.200/16 
 
 #查看修改内核参数
 [root07:25 PMcentos8 ~]#sysctl -a |grep  ip_forward
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
#修改内核参数,重启以后数据就丢失了
[root04:54 PMcentos8 ~]#cat  /proc/sys/net/ipv4/ip_forward
0
[root07:08 PMcentos8 ~]#echo 1 >  /proc/sys/net/ipv4/ip_forward
[root07:22 PMcentos8 ~]#cat  /proc/sys/net/ipv4/ip_forward
1
每经过一个路由器就是一跳,防火墙要禁用,selinux 

NetworkManage

chkconf NetworkManage  off  禁用

service NetworkManage  stop 关闭服务

iproute

[root08:48 PMcentos8 ~]#rpm -ql iproute

同网段也无法ping通

56.jpg

netstat 来自于net-tools包

该命令ss 也可以用 
-r 
-nr
[root08:45 PMcentos8 ~]#netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         _gateway        0.0.0.0         UG        0 0          0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
[root08:46 PMcentos8 ~]#netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.0.0.2        0.0.0.0         UG        0 0          0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0

[root08:46 PMcentos8 ~]#netstat -Ieth0  选项和参数连接一起
Kernel Interface table
Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0             1500   131326      0      0 0        163581      0      0      0 BMRU


#Windows 也有netstat 命令   不过选项是 netstat -no

ip

ip link 查看设置链路层
ip link   set    etho down
ip link   set    etho  up
ip  link  set   eth0  name NAME

#添加一条ip地址
[root08:59 PMcentos8 ~]#ip address add 10.0.0.200/24  dev eth0 label  eth0:2
[root09:01 PMcentos8 ~]#ip address add 10.0.0.100/24  dev eth0   #不加标签添加IP

#删除地址:
[root@localhost ~]# ip addr del 10.0.0.100/24 dev eth0
ip address show 
ip addr flush  清空所有的地址 包括自己

ip route 管理路由表

Destination: 目标网络ID,表示可以到达的目标网络ID,0.0.0.0/0 表示所有未知网络,又称为默认路
由,优先级最低

Genmask:目标网络对应的netmask

Iface: 到达对应网络,应该从当前主机哪个网卡发送出来

Gateway: 到达非直连的网络,将数据发送到临近(下一个)路由器的临近本主机的接口的IP地址,如果
是直连网络,gateway是0.0.0.0

Metric: 开销cost,值越小,路由记录的优先级最高

57.jpg

添加路由

62.jpg

删除路由

63.jpg

直连的默认自动生成路由

58.jpg

查看路由表:

route
route -n  以数字的显示
#添加:route add
route add [-net|-host|default] target [netmask Nm] [gw GW] [[dev] If]
#删除:route del
route del [-net|-host] target [gw Gw] [netmask Nm] [[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
route add -net 192.168.8.0/24 dev eth1 metric 200
#默认路由,网关:172.16.0.1
route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1
route add -net 0.0.0.0/0 gw 172.16.0.1
route add default gw 172.16.0.1
#目标: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

实现静态路由

四台主机:
A主机:eth0 NAT模式
R1主机:eth0 NAT模式,eth1 仅主机模式
R2主机:eth0 桥接模式,eth1 仅主机模式
B主机:eth0 桥接模式

59.jpg

#配置A主机
ifconfig eth0 10.0.0.123/8
route add -net 10.0.0.0/8 dev eth0
route add default gw 10.0.0.200 dev eth0
#配置R1
ifconfig eth0 10.0.0.200/8
ifconfig eth1 192.168.0.200/24
route add -net 10.0.0.0/8 dev eth0
route add -net 192.168.0.0/24 dev eth1
route add -net 172.16.0.0/16 gw 192.168.0.201 dev eth1
echo 1 > /proc/sys/net/ipv4/ip_forward 
#配置R2
ifconfig eth0 172.16.0.200/16
ifconfig eth1 192.168.0.201/24
route add -net 192.168.0.0/24 dev eth1
route add -net 172.16.0.0/16 dev eth0
route add -net 10.0.0.0/8 gw 10.0.0.200 dev eth1 
echo 1 > /proc/sys/net/ipv4/ip_forward 
#配置B
ifconfig eth0 172.16.0.123/16
route add -net 172.16.0.0/16 dev eth0
route add default gw 172.16.0.200 dev eth0

60.jpg

计算机收到的报文不是他自己的,他就要把他抛弃,他是计算机,不是路由器。修改内核参数,让他起到转发的功能

[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward
1
#只能用echo 修改,因为他是/proc 里面的文件,只能临时的保存  

跟踪路由的命令

mtr

tracepath

traceroute

配置动态路由

通过守护进程获取动态路由,安装quagga包,通过命令vtysh配置

支持多种路由协议:

RIP:Routing Information Protocol,路由信息协议 ,最少的的那条路由器的那条路

OSPF:Open Shortest Path First,开放式最短路径优先

BGP:Border Gateway Protocol,边界网关协议

RIP、OSPF和BGP

**netstat****命令



来自于net-tools包,建议使用 ss 代替
显示网络连接:
-t: tcp协议相关
-u: udp协议相关
-w: raw socket相关
-l: 处于监听状态
-a: 所有状态
-n: 以数字显示IP和端口
-e:扩展格式
-p: 显示相关进程及PID

#常用组合:
-tan, -uan, -tnl, -unl

61.jpg

#  route -n 和 ip route 显示的是一样的
[root09:12 PMcentos8 ~]#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.2        0.0.0.0         UG    100    0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
[root09:10 PMcentos8 ~]#ip route
default via 10.0.0.2 dev eth0 proto static metric 100 
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.8 metric 100 
#删除路由表:
[root09:23 PMcentos8 ~]#ip route del 1.1.1.0/24 via 10.0.0.2 
#删除默认路由
[root09:25 PMcentos8 ~]#ip  route  del default via 10.0.0.2 

01.png

单臂路由:

#删除所有的路由,添加新的IP自动生成新的路由
[root10:43 PMcentos7 ]#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 ens33
[root10:44 PMcentos7 ]#ip  a a 7.7.7.7/24  dev ens33 label ens33:1
[root10:46 PMcentos7 ]#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
7.7.7.0         0.0.0.0         255.255.255.0   U     0      0        0 ens33
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 ens33
[root10:47 PMcentos7 ]#ping 8.8.8.8
connect: Network is unreachable     #没有路由无法通(Gateway那里没有地址)

[root10:43 PMcentos8 ~]#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
[root10:44 PMcentos8 ~]#ip  a a 8.8.8.8/24 dev eth0 label eth0:1
[root10:47 PMcentos8 ~]#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
8.8.8.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
[root10:47 PMcentos8 ~]#ping 7.7.7.7      #没有路由无法通
connect: Network is unreachable


# 新开一台虚拟机做模拟的路由器,添加两个ip
[root10:56 PMcentos7 ~]#ip a a 7.7.7.200/24 dev ens33:7
[root10:57 PMcentos7 ~]#ip a a 8.8.8.200/24 dev ens33:8

#两台主机分别添加路由,即:路由器的两个ip
[root11:01 PMcentos7 ]#ip route add default via 7.7.7.200
[root11:12 PMcentos8 ~]#ip route add default via 8.8.8.200

#开启转发
[root11:16 PMcentos7 ~]#echo 1 >  /proc/sys/net/ipv4/ip_forward


方法二:不添加模拟路由器,各自添加一条默认路由,指定接口
#不用单臂路由,不同网段的两台机器相互通讯的底层原理
[root10:46 PMcentos7 ]#ip route
7.7.7.0/24 dev ens33 proto kernel scope link src 7.7.7.7 
10.0.0.0/24 dev ens33 proto kernel scope link src 10.0.0.73 metric 100 
[root11:27 PMcentos7 ]#ping 8.8.8.8
connect: Network is unreachable
[root11:28 PMcentos7 ]#ip route add default dev ens33  

[root11:24 PMcentos8 ~]#ip route
8.8.8.0/24 dev eth0 proto kernel scope link src 8.8.8.8 
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.8 metric 100 
[root11:27 PMcentos8 ~]#ping 7.7.7.7
connect: Network is unreachable
[root11:27 PMcentos8 ~]#ip route add default   dev eth0 

#物理上在一个网络。 逻辑上不  

ip addr change 添加地址

[root@localhost ~]# ip addr change 127.0.0.1/24 dev lo

本地回环

[root08:07 AMcentos8 ~]#ip  a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
       
  路由解决跨主机之间的通信,本机的通信是不需要路由表的,这个网卡上的地址是不会放在路由表上的
#添加回环地址不会生成路由记录
[root08:07 AMcentos8 ~]#ip a a 1.1.1.1/24 dev lo label lo:1  把地址写在回环网卡上
[root08:11 AMcentos8 ~]#ip  a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 1.1.1.1/24 scope global lo:1
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
[root08:11 AMcentos8 ~]#ping 1.1.1.125
PING 1.1.1.125 (1.1.1.125) 56(84) bytes of data.
64 bytes from 1.1.1.125: icmp_seq=1 ttl=64 time=0.013 ms  #和回环网1.1.1.1/24 在一个网段
64 bytes from 1.1.1.125: icmp_seq=2 ttl=64 time=0.023 ms


#删除默认路由
[root08:19 AMcentos8 ~]#ip route
default via 10.0.0.2 dev eth0 proto static metric 100 
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.8 metric 100 
[root08:19 AMcentos8 ~]#ip route del default via 10.0.0.2 dev eth0 proto static metric 100 
[root08:20 AMcentos8 ~]#ip route
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.8 metric 100 


两台主机上:
[root08:27 AMcentos7 ~]#ip a a 7.7.7.7 dev lo label lo:1
[root08:20 AMcentos8 ~]#ip a a 8.8.8.8 dev lo label lo:1
[root08:38 AMcentos7 ~]#ip  a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 7.7.7.7/32 scope global lo:1  #32位子网掩码而且绑在回环网卡
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever

[root08:37 AMcentos8 ~]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 1.1.1.1/24 scope global lo:1
       valid_lft forever preferred_lft forever
    inet 8.8.8.8/32 scope global lo:1    #子网掩码32位,而且绑在回环网卡
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever


#添加默认路由
现在无法两台机器相互ping通的,所以两台主机要要添加路由
[root08:36 AMcentos8 ~]#ip route  add  default dev eth0
[root08:37 AMcentos7 ~]#ip route add default dev ens33

三种模式IP

host :本机。条件最苛刻

globle :全局

link 通过固定的网卡接口访问

65.png

网络的高级配置和多网卡绑定

主机名的存放文件

centos6
[root@centos6 ~]# cat  /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=centos6

centos7 centos8
[root08:40 AMcentos7 ~]#cat /etc/hostname 
centos7

路由记录的存放

保存在配置文件里面,以routek开头的文件命名,重启生效
[root10:28 AMcentos8 ~]#cat /etc/sysconfig/network-scripts/route-eth0
172.16.0.0/16  via 10.0.0.100

66.png

路由相关的配置文件

/etc/sysconfig/network-scripts/route-IFACE
两种风格:
(1) TARGET via GW
如:172.16.0.0/16 via 10.0.0.100
(2) 每三行定义一条路由
ADDRESS#=TARGET
NETMASK#=mask
GATEWAY#=GW

永久保护网卡设置的Ip地址

[root10:34 AMcentos8 /etc/sysconfig/network-scripts]#cp ifcfg-eth0 ifcfg-eth0:1 
[root10:34 AMcentos8 /etc/sysconfig/network-scripts]#vim ifcfg-eth0:1
[root10:39 AMcentos8 /etc/sysconfig/network-scripts]#vim ifcfg-eth0:1
BOOTPROTO="static"
NAME="eth0"
DEVICE=eth0:1  #修改此项,此后的10.0.0.88 这个ip地址就会永久保存
ONBOOT="yes"
IPADDR=10.0.0.88
GATEWAY=10.0.0.2
NETMASK=255.255.255.0
DNS=10.0.0.8
HWADDR=00:0c:29:41:8d:2a
~                        

两个地址一个是自动获取,一个是手工指定

[root11:02 AMcentos8 /etc/sysconfig/network-scripts]#ls
ifcfg-ens34  ifcfg-eth0  ifcfg-eth0:1  route-eth0
[root11:01 AMcentos8 /etc/sysconfig/network-scripts]#cat ifcfg-eth0 设置为自动获取
BOOTPROTO=dhcp
NAME="eth0"
DEVICE=eth0
ONBOOT="yes"
[root11:02 AMcentos8 /etc/sysconfig/network-scripts]#cat  ifcfg-eth0:1   设置为手工配置
BOOTPROTO="static"
NAME="eth0"
DEVICE="eth0:1"
ONBOOT="yes"
IPADDR=10.0.0.8
GATEWAY=10.0.0.2
NETMASK=255.255.255.0
DNS=10.0.0.8
#注意:只能把eth0 设置为自动或取 eth0:1 设置为手动配置

多网卡绑定

逻辑上共用一个MAC地址,防止单点失败

Bonding 工作模式

#添加两张网卡,手动编写配置文件
[root11:46 AMcentos8 /etc/sysconfig/network-scripts]#ls
ifcfg-bond0  ifcfg-ens34  ifcfg-eth0  ifcfg-eth1
[root11:38 AMcentos8 /etc/sysconfig/network-scripts]#cat ifcfg-eth0
DEVICE="eth0"
ONBOOT="yes"
SLAVE=yes
MASTER=bond0
[root11:38 AMcentos8 /etc/sysconfig/network-scripts]#cat ifcfg-eth1
DEVICE="eth1"
ONBOOT="yes"
SLAVE=yes
MASTER=bond0
[root11:38 AMcentos8 /etc/sysconfig/network-scripts]#cat ifcfg-bond0 
TYPE=bond
DEVICE=bond0
BOOTPROTO=none
IPADDR=10.0.0.100
PREFIX=24
BONDING_OPTS="mode=1 miimon=100 "
#查看bond里面的
[root11:55 AMcentos8 /etc/sysconfig/network-scripts]#cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1  正在工作的网卡
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0

Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:0c:29:41:8d:2a
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:41:8d:34
Slave queue ID: 0  

#查看当前的网卡的工作状态
mii-tool eth0
mii-tool eth1
ethtool  eth0
ethtool  eth1

三模式

67.png68.png69.png

卸载bond

#禁用网卡
[root12:07 PMcentos8 /etc/sysconfig/network-scripts]#ifconfig bond0 down
#卸载模块
modprobe  -r  bonding
 #删除配置文件
 

NetworkManager 一张网卡上自由切换多个Ip

(centos6 推荐network centos7以后推荐NetworkManager )

不同的场合有不同的Ip,家里有家里的Ip 办公区有办公区的Ip

# 安装包,开启NetworkManager
[root04:31 PMcentos8 ~]#yum install NetworkManager -y
[root04:33 PMcentos8 ~]#yum  -y install bash-completion

#改名字:
[root04:37 PMcentos8 /etc/sysconfig/network-scripts]#ls
ifcfg-eth0
[root04:38 PMcentos8 ~]#nmcli connection  一块物理网卡多个配置文件
NAME                UUID                                  TYPE      DEVICE 
Wired connection 1  16a1180c-a32e-312d-a7bb-1d7f1c0fe463  ethernet  eth1   
eth0                5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  ethernet  eth0   
[root04:39 PMcentos8 ]#nmcli connection modify  Wired\ connection\ 1 con-name eth1-home
[root04:40 PMcentos8 ]#nmcli connection 
NAME       UUID                                  TYPE      DEVICE 
eth1-home  16a1180c-a32e-312d-a7bb-1d7f1c0fe463  ethernet  eth1   
eth0       5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  ethernet  eth0   

#手工修改一个eth1-home的静态Ip
[root04:40 PMcentos8 /etc/sysconfig/network-scripts]#nmcli connection modify eth1-home ipv4.addresses 192.168.0.100/24 ipv4.gateway 192.168.0.1 ipv4.dns 223.6.6.6 ipv4.method  manual
[root04:41 PMcentos8]#nmcli connection 
NAME       UUID                                  TYPE      DEVICE 
eth0       5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  ethernet  eth0   
eth1-home  16a1180c-a32e-312d-a7bb-1d7f1c0fe463  ethernet  eth1   
[root04:41 PMcentos8 ]#ls
ifcfg-eth0  ifcfg-eth1-home

#自动获取一个eth1-work 的动态Ip
[root04:42 PMcentos8]#nmcli connection  add con-name eth1-work ipv4.method manual ipv4.addresses 172.16.0.100/16 type ethernet ifname eth1
Connection 'eth1-work' (f4094db8-c105-4fba-a706-61a8fbc644fc) successfully added.

#加载 
[root04:43 PMcentos8 /etc/sysconfig/network-scripts]#nmcli connection  reload 
[root04:43 PMcentos8 /etc/sysconfig/network-scripts]#nmcli connection  
NAME       UUID                                  TYPE      DEVICE 
eth0       5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  ethernet  eth0   
eth1-home  16a1180c-a32e-312d-a7bb-1d7f1c0fe463  ethernet  eth1   
eth1-work  f4094db8-c105-4fba-a706-61a8fbc644fc  ethernet  --  

#切换以后自由变换Ip
[root04:43 PMcentos8 /etc/sysconfig/network-scripts]#nmcli connection  up eth1-work 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/8)
[root04:57 PMcentos8 /etc/sysconfig/network-scripts]#ifconfig eth1
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.0.100  netmask 255.255.0.0  broadcast 172.16.255.255
        inet6 fe80::f9bd:63b5:82d9:a169  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:41:8d:34  txqueuelen 1000  (Ethernet)
        RX packets 9  bytes 1289 (1.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 99  bytes 13143 (12.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root04:57 PMcentos8 /etc/sysconfig/network-scripts]#ls  #这样eth1 就有两份配置文件了
ifcfg-eth0  ifcfg-eth1-home  ifcfg-eth1-work
一套物理网卡有多个Ip

nmcli 子命令

[root@localhost yum.repos.d]# nmcli 
agent       connection  device      general     help        monitor     networking  radio       

[root@localhost yum.repos.d]# nmcli connection 
add      delete   edit     help     load     monitor  show     
clone    down     export   import   modify   reload   up    

[root@localhost yum.repos.d]# nmcli connection show 
1                                                   id
--active                                            --order
apath                                               /org/freedesktop/NetworkManager/ActiveConnection/1
ens33                                               path
filename                                            uuid
help                                                

nmcli connection delete

70.png

nmcli 实现bond多网卡绑定Ip

之前用的是改文件

#创建一个名字叫 mybond0的bond 
[root05:12 PMcentos8]#nmcli connection add con-name mybond0 ifname bond0 type bond ipv4.method manual ipv4.addresses 10.0.0.100/24
Connection 'mybond0' (3e7d1d3f-0615-475d-ac78-8c30c52f0c77) successfully added.

#将eth1网卡命名为 mybond0-eth1添加到bond中
[root05:24 PMcentos8 /etc/sysconfig/network-scripts]#nmcli connection add con-name mybond0-eth1 ifname eth1 type bond-slave master bond0 
Connection 'mybond0-eth1' (d8ac4db5-9c62-440a-88fc-80b61457d77a) successfully added.
[root05:27 PMcentos8 /etc/sysconfig/network-scripts]#nmcli connection 
NAME          UUID                                  TYPE      DEVICE 
eth0          5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  ethernet  eth0   
mybond0       3e7d1d3f-0615-475d-ac78-8c30c52f0c77  bond      bond0  
mybond0-eth1  d8ac4db5-9c62-440a-88fc-80b61457d77a  ethernet  eth1   

#将eth0网卡命名为 mybond0-eth0添加到bond中
root05:29 PMcentos8 /etc/sysconfig/network-scripts]#nmcli connection add con-name mybond0-eth0 ifname eth0 type bond-slave master bond0 
Connection 'mybond0-eth0' (fb22a8c7-ece4-4436-9239-a1dc7acb137b) successfully added.

#清除上次实验的eth0
root05:31 PMcentos8 /etc/sysconfig/network-scripts]#nmcli connection delete eth0 #删除了mybond-eth0才可以顶上去
Connection 'eth0' (5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03) successfully deleted.

[root05:34 PMcentos8 ~]#cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:41:8d:34
Slave queue ID: 0

Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:41:8d:2a
Slave queue ID: 0

#两张网卡绑定在bond上了,查看一下
[root05:34 PMcentos8 ~]#nmcli connection 
NAME          UUID                                  TYPE      DEVICE 
mybond0       3e7d1d3f-0615-475d-ac78-8c30c52f0c77  bond      bond0  
mybond0-eth0  fb22a8c7-ece4-4436-9239-a1dc7acb137b  ethernet  eth0   
mybond0-eth1  d8ac4db5-9c62-440a-88fc-80b61457d77a  ethernet  eth1   


team (centos7以后)

网络组 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 连接名,连接名若不指定,默认为team-slave-IFACE
INAME 网络接口名
TEAM 网络组接口名
#断开和启动
nmcli dev dis INAME
nmcli con up CNAME
INAME 设备名 CNAME 网络组接口名或port接口

范例:

72.jpg

#创建team0
[root05:54 PMcentos8 ~]#nmcli connection  add con-name myteam0 ifname team0 type team config '{"runner":{"name":"activebackup"}}' ipv4.addresses 10.0.0.200/24
Connection 'myteam0' (a7257089-5e10-47a5-abd4-12b2bf1e0905) successfully added.

#将之前的myband0删除
[root06:03 PMcentos8 /etc/sysconfig/network-scripts]#nmcli connection delete mybond0
Connection 'mybond0' (3e7d1d3f-0615-475d-ac78-8c30c52f0c77) successfully deleted.
#直接删除/etc/sysconfig/network....文件省事

#将 eth1  eth2 加入到 team0
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

ping -I team0 192.168.0.254

#断开
nmcli dev dis eth1
#查看状态
teamdctl team0 state
#连接
nmcli con up team0-port1
#断开
nmcli dev dis eth2
#查看状态
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.16.0.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


74.jpg

73.png75.jpg76.jpg77.png

网桥

桥接原理

桥接:把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其
他网口并发送出去。以使得网口之间的报文能够互相转发。网桥就是这样一个设备,它有若干个网口,
并且这些网口是桥接起来的。与网桥相连的主机就能通过交换机的报文转发而互相通信。

71.png STP 生成树协议

生成树协议(英语:Spanning Tree Protocol,STP),是一种工作在OSI网络模型中的第二层(数据链路层)的通信协议,基本应用是防止交换机冗余链路产生的环路.用于确保以太网中无环路的逻辑拓扑结构.从而避免了广播风暴,大量占用交换机的资源.