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区别
| TCP | UDP |
---|
是否连接 | 面向连接 | 面向无连接 | 是否可靠 | 可靠(流量控制、拥塞控制) | 不可靠 | 首部开销 | 首部开销最小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=0 | balance-rr | 是,均衡 | 配置手工模式链路聚合 | mode=1 | active-backup | 无 | 配置对接接口属于同一个VLAN | mode=2 | balance-xor | 是,由策略决定 | 配置手工模式链路聚合 | mode=3 | broadcast | 无 | 建议每个端口分别连接一个交换机,且属于不同VLAN | mode=4 | 802.3ad | 是,由策略决定 | 配置LACP模式链路聚合 | mode=5 | balance-tlb | 是,均衡 | 无需配置,建议每个端口分别连接一个交换机 | mode=6 | balance-alb | 是,不均衡 | 无需配置,建议每个端口分别连接一个交换机 |
CentOS 7 网卡绑定bond0的实现
准备一台有两个网卡的CentOS 7虚拟机
[root@alita ~]
DEVICE TYPE STATE CONNECTION
ens33 ethernet connected Wired connection 1
ens37 ethernet connected Wired connection 2
lo loopback unmanaged --
手动修改配置文件方式
[root@alita ~]
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"
[root@alita ~]
TYPE=Ethernet
NAME=ens33
DEVICE=ens33
ONBOOT=yes
MASTER=bond0
SLAVE=yes
[root@alita ~]
TYPE=Ethernet
NAME=ens37
DEVICE=ens37
ONBOOT=yes
MASTER=bond0
SLAVE=yes
[root@alita ~]
[root@alita ~]
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方式
[root@alita ~]
[root@alita ~]
NAME UUID TYPE DEVICE
Wired connection 1 a65e0174-abff-3780-97f9-e29b4face1de ethernet ens33
Wired connection 2 23b9b66c-930a-331e-a0b9-1c7876ee30ee ethernet ens37
[root@alita ~]
[root@alita ~]
[root@alita ~]
[root@alita ~]
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 ~]
[root@alita ~]
[root@alita ~]
[root@alita ~]
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)
[root@alita ~]
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
|