1、简述osi七层模型和TCP/IP五层模型
OSI七层模型
OSI(Open Systems Interconnection Reference Model)开放式系统互联参考模型。
第七层:应用层(Application Layer)提供了应用软件而设计的接口,以设置与另一个应用软件之间的通信,协议:HTTP,HTTPS,FTP,Telnet,SSH,SMTP,POP3等。
第六层:表示层(Presentation Layer)把数据转换为能与接收者的系统格式兼容并适合传输的格式,如:数据加密,解密,压缩和解压缩等。
第五层:会话层(Session Layer)负责在数据传输中设置和维护两个节点之间的通信连接
第四层:传输层(Transport Layer)把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。例如:传输控制协议(TCP)等
第三层:网络层(Network Layer)决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成分组。网络表头包含了网络资料。例如:互联网协议(IP)等
第二层:数据链路层(Data Link Layer)负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成信息框(Data Frame)。数据链表头(DLH)是包含了物理地址和错误侦测及改错的方法。数据链表尾(DLT)是一串指示数据包末端的字符串。例如以太网、无线局域网(Wi-Fi)和通用分组无线服务(GPRS)等。
分为两个子层:逻辑链路控制(logical link control,LLC)子层和介质访问控制(Media access control,MAC)子层。
第一层:物理层(Physical Layer)它负责管理电脑通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机接口卡等
TCP/IP模型
TCP/IP传输控制协议/因特网互联协议,是一个协议栈,包括许许多多的一些协议:TCP、IP、UDP、ICMP、FTP、TELNET、SMTP等。
2、总结描述TCP三次握手四次挥手
三次握手过程:
首先服务器端的服务进程已经监听在某个端口上,监听之后就可以一直等待客户端请求建立TCP连接。
1)当客户端想要和服务器端进立TCP连接时,首先会发送一个连接请求报文给服务器端。在这个请求报文中,TCP首部中的SYN位设置为1,ACK位设置为0,假设此时的序列号是x(序列号不一定是1),即SYN=1、ACK=0、seq=x。这个包也常称为SYN包,当客户端发送完SYN包后,它将进入SYN_SENT状态。
2)当服务器端收到报文后,发现其中的SYN=1、ACK=0,便知道这是一个TCP连接的请求包,如果服务器端确认与客户端建立TCP连接,那么服务器端需回复客户端。回复时,SYN=1、ACK=1、ack=x+1、seq=y。注意区分这里的ACK和ack,ACK表示的是占用一个比特位的ACK设置位,ack是确认号,这个包通常被称为ACK包,当服务器端发送完ACK包之后,它将进入AYN_RECV状态。
3)当客户端收到服务器端回复报文后,发现里面的SYN=1、ACK=1,于是也会向服务器端回复一个ACK包,回复时,SYN=0,ACK=1、seq=x+1、ack=y+1。这里的SYN=0、ACK=1表示这不是建立连接请求包,而是回复包。客户端发送完之后,就进入ESTABLISHED状态,表示连接在客户端已经建立完成。
4)服务器端最终收到客户端的ACK包之后,也将进入ESATBLISHED状态。到此,TCP连接就建立完成。
四次挥手过程
首先两端在开始释放TCP连接之前,都已经处于ESTABLISHED状态,假设客户端开始请求释放连接(当前,服务器端也可以主动释放连接)。
1)客户端发送一个TCP首部中FIN位置为1的包给服务器端,假设此时序号是u,即seq=u。FIN=1意味着这是一个请求关闭TCP连接的数据包,这种包也称为FIN包。当发送FIN包之后,客户端将从ESTABLISHED状态转为FIN-WAIT-1状态。
2)服务器端收到FIN包之后,发现其中FIN=1,知道客户端请求关闭,于是发一个回复包给A。回复时,设置ACK=1,ack=u+1,同时还设置序列号seq=v(假设服务器端现在发送到的数据序列号是v),发送完这个回复包之后,服务端进入CLOSE-WAIT状态。到了这个阶段,客户端到服务器端方向的连接就已经释放了,客户端不能再发送传输数据给服务器端,但是服务器端到客户端方向的连接还没有关闭,它可以继续发送数据给客户端,客户端也会接收。因为这个阶段只有一个方向的连接被释放,所以close-wait状态也称为半关闭状态。
3)当客户端收到服务器端的ACK包之后,它将进入FIN-WAIT2,等待服务器端发起从服务器端到客户端方向的连接关闭请求。
4)当服务器端确认已经没有数据发送给客户端后,服务器端开始主动关闭从服务器端客户端方向的TCP连接,这时会发送一个FIN包,同时ACK设置为1,ack仍然保持不变,是u+1,而seq则为一个新值w,因为进入CLOSE-WAIT之后,服务器端可能还发送了一些数据。服务器端发送完这个FIN+ACK包之后,将进入LAST-ACK(最后确认)状态。
5)当客户端收到服务器端FIN+ACK包之后,需要对B发送的关闭请求做出回复,回复时,ACK=1,seq=u+1不变,ack=w+1,当发送完这个ACK包之后,客户端不会立即就关闭,而是进入TIME-WAIT阶段等待一段时间(2倍MSL(最大段生存期)时长)。
6)当服务器端收到客户端的回复ACK包之后,意味着服务器端到客户端方向的连接关闭已经确认了,于是服务器端关闭连接。
7)当客户端等待了2倍MSL的时长之后,将真正关闭连接。
3、描述TCP和UDP区别
-
相同点
两者都是以协议的概念为基础
协议栈中的协议彼此相互独立
下层对上层提供服务
-
不同点
OSI是先有模型,TCP/IP是先有协议后有模型
OSI是国际标准,适用于各种协议栈,TCP/IP实际标准,只适用于TCP/IP网络
层次数量不同
4、网卡绑定bond0的实现
环境:
主机一:centos8-0
vmnet1:eth1,eth2
bond0:192.168.101.100/24
主机二:centos8-1
vmnet1:eth1,eth2
bond0:192.168.101.101/24
在vmnet1上配置bond0
主机一配置:
# 创建并配置bond0配置文件
[root@centos8-0 ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
NAME=bond0
TYPE=bond
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.101.100
PREFIX=24
BONDING_OPTS="mode=1 miimon=100 fail_over_mac=1"
# 说明:miimon指定链路监测时间间隔。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一条线路不通就转入另一条线路
# 编辑从属网卡配置
[root@centos8-0 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
NAME=eth1
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
[root@centos8-0 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
NAME=eth2
BOOTPROTO=none
ONBOOT=yes
SLAVE=yes
MASTER=bond0
# 重新加载配置
[root@centos8-0 ~]# nmcli connection reload
# 要启动绑定,则必须首先启动从属接口
[root@centos8-0 ~]# nmcli connection up eth1
[root@centos8-0 ~]# nmcli connection up eth2
# 启动绑定
[root@centos8-0 ~]# nmcli connection up bond0
# 查看bond0的状态
[root@centos8-0 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup) (fail_over_mac active)
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: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:c9:7d:fe
Slave queue ID: 0
Slave Interface: eth2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:c9:7d:08
Slave queue ID: 0
主机二配置:
# 添加bonding接口并配置IP地址信息
[root@centos8-1 ~]# nmcli conn add type bond con-name bond0 ifname bond0 mode active-backup ipv4.method manual ipv4.addresses 192.168.101.101/24 autoconnect yes
# 添加从属接口
[root@centos8-1 ~]# nmcli connection add type bond-slave ifname eth1 master bond0
[root@centos8-1 ~]# nmcli connection add type bond-slave ifname eth2 master bond0
# 要启动绑定,则必须首先启动从属接口
[root@centos8-1 ~]# nmcli connection up bond-slave-eth1
[root@centos8-1 ~]# nmcli connection up bond-slave-eth2
# 启动绑定
[root@centos8-1 ~]# nmcli conn up bond0
# 查看bond0的状态
[root@centos8-1 ~]# 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: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:9e:90:67
Slave queue ID: 0
Slave Interface: eth2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:9e:90:71
Slave queue ID: 0
测试
断开eth1,模拟某个网卡故障
再次查看bond0状态
[root@centos8-0 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup) (fail_over_mac active)
Primary Slave: None
Currently Active Slave: eth2
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: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 3
Permanent HW addr: 00:0c:29:c9:7d:fe
Slave queue ID: 0
Slave Interface: eth2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:c9:7d:08
Slave queue ID: 0