IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 网络基础及Linux链路聚合实现 -> 正文阅读

[网络协议]网络基础及Linux链路聚合实现

OSI七层模型和TCP/IP五层模型

OSI模型与TCP/IP模型对比

请添加图片描述

各层简介

应用层(Application Layer)

  • 功能:负责完成网络中应用程序与网络操作系统之间的联系,是计算机用户及各种应用程序和网络之间的接口,直接向用户提供服务,完成用户希望在网络上完成的各种工作
  • 常见协议:FTP、HTTP、Telnet、SSH、SMTP等

表示层(Presentation Layer)

  • 功能:对数据进行转换,使数据适合传输或与接收者的系统格式兼容,即处理用户信息的表示问题,如编码、数据格式转换和加密解密

会话层(Session Layer)

  • 功能:在计算机的通信应用程序之间建立并管理会话

传输层(Transport Layer)

  • 功能:提供建立、维护和拆除传输连接的功能,并具有复用、分用会话的功能。传输层在网络层的基础上为高层提供”面向连接”和“面向无连接”的两种服务,提供错误控制和数据流控制
  • 常见协议:TCP、UDP

网络层(Network Layer)

  • 功能:提供独立于硬件的逻辑寻址和路由
  • 常见协议:IP、ICMP、RIP

数据链路层(Data Link Layer)

  • 功能:物理寻址,分为两个子层:逻辑链路控制(logical link control,LLC)子层和介质访问控制 (Media access control,MAC)子层

    MAC子层的主要任务是解决共享型网络中多用户对信道竞争的问题,完成网络介质的访问控制

    LLC子层的主要任务是建立和维护网络连接,执行差错校验、流量控制和链路控制

  • 常见协议:ARP、RARP

物理层(Physical Layer)

  • 功能:实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异

TCP三次握手四次挥手

三次握手

请添加图片描述

第一次握手

Client向Server发送连接请求报文,报文中标志位SYN=1(表示要发起一个连接),且随机产生一个值seq=N;Client进入SYN_SENT状态,等待Server确认

第二次握手

Server收到Client发来的请求报文,由请求报文SYN=1得知Client请求建立连接,回复一个确认报文,报文中标志位SYN=1,ACK=1,确认序号ack=N+1(表示回复请求),随机产生一个值seq=M;Server进入SYN_RCVD状态

第三次握手

Client收到Server回复的确认报文后,检查确认序号ack是否为N+1,标志位ACK是否为1,如果正确,则给Server回复一个确认报文,报文中ACK=1,ack=M+1,并进入ESTABLISHED状态;Server收到该确认报文后,检查确认序号ack是否为M+1,标志位ACK是否为1,如果正确,Server进入ESTABLISHED状态;至此,三次握手完成,连接建立成功,开始传输数据

四次挥手

请添加图片描述

第一次挥手

Client停止发送数据,发出连接释放请求报文,释放数据的报文首部中,标志位FIN=1,序列号seq=P(发送数据的最后一个报文的序号+1),此时,Client进入FIN-WAIT-1状态(终止等待1状态)

第二次挥手

Server收到Client发来的连接释放请求后,发送一个确认报文,报文首部标志位ACK=1,确认序号ack=P+1,此时Server进入CLOSE-WAIT状态(关闭等待状态),继续发送未发送完的数据;

Client收到Server的确认报文后,检查标志位ACK是否为1,ack是否为P+1,确认无误后进入FIN-WAIT-2状态(终止等待2状态),等待服务器发送连接释放报文,在这之前还需要接受服务器发送的最后的数据

第三次挥手

Server发送完数据后,向Client发送连接释放请求报文,报文首部标志位FIN=1,ACK=1,确认序号ack=P+1(对Client连接释放请求的确认),序号seq=Q(发送数据的最后一个报文的序号+1),然后Server进入LAST-ACK状态(最后确认状态),等待客户端的确认

第四次挥手

Client收到Server的连接释放请求后,检查标志位ACK是否为1,ack是否为P+1,确认无误后返回确认报文,报文首部标志位ACK=1,确认序号ack=Q+1,然后进入TIME-WAIT状态(时间等待状态),该状态会持续 2MSL(2倍最大报文段生存时间),随后进入CLOSED 状态

Server收到Client的确认后,检查标志位标志位ACK是否为1,确认序号ack是否为Q+1,随后进入CLOSED状态

常见问题

为什么连接的时候是三次握手,关闭的时候却是四次握手?

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能还有数据需要发送,并不能立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四次挥手

TCP和UDP区别

TCPUDP
是否连接面向连接面向无连接
是否可靠可靠(流量控制、拥塞控制)不可靠
首部开销首部开销最小20字节,最大60字节首部开销8字节
应用场景要求可靠传输的应用对实时性要求较高的应用

网卡绑定bond

bond简介

bonding是一种Linux系统下的网卡绑定技术,可以把服务器上n个物理网卡在系统内部抽象(绑定)成一个逻辑上的网卡,能够提升网络吞吐量、实现网络冗余、负载等功能;bond支持7种模式,如下

  • mode=0,(balance-rr) Round-robin policy(平衡轮循环策略)

    传输的数据包按顺序依次送达各个网络接口

  • mode=1,(active-backup) Active -backup policy(主-备份策略)

    提高了网络可靠性,但资源利用率较低,同时只有一个网络接口在工作中

  • mode=2,(balance-xor) XOR policy(平衡策略)

    基于指定的传输HASH策略传输数据包,缺省策略为:(源MAC地址 XOR 目标MAC地址) % slave数量;提供可靠性同时提高了网络带宽

  • mode=3,(broadcast)(广播策略)

    在每个slave接口上传输每个数据包,此模式提供可靠性

  • mode=4,(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 动态链接聚合)

    根据802.3ad协议策略分发流量,即LACP模式

  • mode=5,(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)

    在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址

  • mode=6,(balance-alb) Adaptive load balancing(适配器适应性负载均衡)

    根据ARP对流量分发,与mode=0区别在于,mode=0的所有网口流量较均衡,而mode=6先把eth0流量占满,再占eth1,….ethX;通常一个流量很高,其余流量很低

模式与交换机配置对应关系

网卡绑定模式网卡绑定对应策略是否增加带宽交换机对接方式
mode=0balance-rr是,均衡配置手工模式链路聚合
mode=1active-backup配置对接接口属于同一个VLAN
mode=2balance-xor是,由策略决定配置手工模式链路聚合
mode=3broadcast建议每个端口分别连接一个交换机,且属于不同VLAN
mode=4802.3ad是,由策略决定配置LACP模式链路聚合
mode=5balance-tlb是,均衡无需配置,建议每个端口分别连接一个交换机
mode=6balance-alb是,不均衡无需配置,建议每个端口分别连接一个交换机

CentOS 7 网卡绑定bond0的实现

准备一台有两个网卡的CentOS 7虚拟机

[root@alita ~]# nmcli d
DEVICE  TYPE      STATE      CONNECTION         
ens33   ethernet  connected  Wired connection 1 
ens37   ethernet  connected  Wired connection 2 
lo      loopback  unmanaged  -- 

手动修改配置文件方式

# 配置bond接口
[root@alita ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
NAME=bond0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.171
PREFIX=24
GATEWAY=192.168.1.254
DNS1=114.114.114.114
BONDING_MASTER=yes
BONDING_OPTS="mode=0 miimon=100"

# TYPE=Ethernet 或者 TYPE=bond 均可


# 配置两个slave接口
[root@alita ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
NAME=ens33
DEVICE=ens33
ONBOOT=yes
MASTER=bond0
SLAVE=yes

[root@alita ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
NAME=ens37
DEVICE=ens37
ONBOOT=yes
MASTER=bond0
SLAVE=yes


# 重启网卡
[root@alita ~]# systemctl restart network

# 查看bond状态
[root@alita ~]# 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

Slave Interface: ens33
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:2c:c8:f1
Slave queue ID: 0

Slave Interface: ens37
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:2c:c8:fb
Slave queue ID: 0

nmcli方式

# 确认NetworkManager已经开启
[root@alita ~]# systemctl status NetworkManager

# 查看网络接口
[root@alita ~]# nmcli c show
NAME                UUID                                  TYPE      DEVICE 
Wired connection 1  a65e0174-abff-3780-97f9-e29b4face1de  ethernet  ens33  
Wired connection 2  23b9b66c-930a-331e-a0b9-1c7876ee30ee  ethernet  ens37  

# 使用nmcli创建bond接口,并配置IP、网关、DNS等信息
[root@alita ~]# nmcli c add type bond con-name bond-bond0 ifname bond0 mode 0 ipv4.addresses 192.168.1.171/24 ipv4.method manual connection.autoconnect yes ipv4.dns 114.114.114.114 ipv4.gateway 192.168.1.254


# 使用nmcli创建slave接口
[root@alita ~]# nmcli con add type bond-slave ifname ens33 master bond0
[root@alita ~]# nmcli con add type bond-slave ifname ens37 master bond0


# 查看网络接口
[root@alita ~]# nmcli c show
NAME                UUID                                  TYPE      DEVICE 
Wired connection 1  a65e0174-abff-3780-97f9-e29b4face1de  ethernet  ens33  
Wired connection 2  23b9b66c-930a-331e-a0b9-1c7876ee30ee  ethernet  ens37  
bond-bond0          b4d44cad-9cda-47d5-a305-39b951305430  bond      bond0  
bond-slave-ens33    53a8088a-4962-4d99-98f5-5c87ff0d8a84  ethernet  --     
bond-slave-ens37    8bd77b2d-5f41-4189-bec9-126484a87319  ethernet  --   

# 启动从属接口
[root@alita ~]# nmcli c up bond-slave-ens33
[root@alita ~]# nmcli c up bond-slave-ens37 

# 启动绑定接口
[root@alita ~]# nmcli c up bond-bond0



# 查看bond0的IP地址
[root@alita ~]# nmcli c show bond-bond0 | grep ipv4
ipv4.method:                            manual
ipv4.dns:                               114.114.114.114
ipv4.dns-search:                        --
ipv4.dns-options:                       ""
ipv4.dns-priority:                      0
ipv4.addresses:                         192.168.1.171/24
ipv4.gateway:                           192.168.1.254
ipv4.routes:                            --
ipv4.route-metric:                      -1
ipv4.route-table:                       0 (unspec)
ipv4.routing-rules:                     --
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-timeout:                      0 (default)
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.never-default:                     no
ipv4.may-fail:                          yes
ipv4.dad-timeout:                       -1 (default)



# 查看当前bond0配置
[root@alita ~]# 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

Slave Interface: ens33
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:2c:c8:f1
Slave queue ID: 0

Slave Interface: ens37
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:2c:c8:fb
Slave queue ID: 0
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-10 13:47:35  更:2021-08-10 13:50:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:38:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码