1、简述osi七层模型和TCP/IP五层模型
osi七层模型:
理论上模型,但是目前主流还是TCP/IP4层/5层模型
-
物理层(Physical Layer)
在局部局域网上传送数据帧(Data Frame),它负责管理电脑通信设备和网
络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡等 -
数据链路层(Data Link Layer)
负责网络寻址、错误侦测和改错。 -
网络层(Network Layer)
决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成报文。
网络表头包含了网络数据。例如:互联网协议(IP)等。 -
传输层(Transport Layer)
把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议
等发送信息。例如:传输控制协议(TCP)等。 -
会话层(Session Layer)
负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接。 -
表示层(Presentation Layer)
把数据转换为能与接收者的系统格式兼容并适合传输的格式 -
应用层(Application Layer)
提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如:
HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3、MySQL等
TCP/IP五层模型:
-
物理层(Physical Layer)
在局部局域网上传送数据帧(Data Frame),它负责管理电脑通信设备和网
络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机接口卡等 -
数据链路层(Data Link Layer)
负责网络寻址、错误侦测和改错。 -
互联网层(实际就是网络层):
决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成报文。
网络表头包含了网络数据。例如:互联网协议(IP)等。 -
传输层
把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议
等发送信息。例如:传输控制协议(TCP)等。 -
应用层(会话层和表示层加应用层综合)
负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接。
然后把数据转换为能与接收者的系统格式兼容并适合传输的格式
最后提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如:
HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3、MySQL等
2、总结描述TCP三次握手四次挥手
环境准备:
客户端系统 | Windows 10 |
---|---|
服务器系统 | centos 7.8 |
远程软件 | xshell 7 |
抓包工具 | 科来网络分析系统 11 |
服务器IP | 192.168.116.145 |
客户端IP | 192.168.116.175 |
TCP三次握手联想:
1、学校门口小卖部一直开着大门等着人去买东西。(服务器一直开着端口)
2、小明平常没钱买辣条,有钱的时候就去买爆款辣条。(客户端有时访问服务器,有时候不访问服务器)
3、小明昨天帮妈妈买酱油得到2块钱小费,放学跑去校门口小卖部,叫老板去找爆款辣条,小明则等着老板给辣条。(客户端连接服务器,打开端口进行连接,进入到SYN-SENT状态)
4、小卖部老板找到小明要的辣条,然后等待小明给钱。(服务器接收客户端请求,进入到SYN-RCVD状态)
5、小明确认辣条是这款辣条没错,给钱给老板。老板确认价钱没错,把辣条给了小明。小明吃得开心,老板赚得开心。(客户端发送数据给服务器,客户端进入到ESTAB-LISHED状态,服务器进入到ESTAB-LISHED状态)
TCP三次握手会话图:
三次握手参考文档:http://www.tcpipguide.com/free/t_TCPConnectionEstablishmentProcessTheThreeWayHandsh-3.htm
用xshell 7进行ssh远程抓包
点击TCP会话,可以看到客户端192.168.116.175的49777端口和192.168.116.145的22端口进行通信
TCP协议详细协商图
一、 TCP连接第一次握手
- 默认客户端的49777端口属于关闭状态,因为要进行通信,所以客户端会打开端口。
- 客户端发送SYN包给服务器,进入到SYN_SENT状态,进行TCP协议的第一次握手。
- SYN包的里面包括
Seq 信息: 3889406003 客户端随机生成
Ack 信息: 0,确认号,初始为0
Next Seq 信息: 3889406004 指定服务器下次回复客户端的ACK确认号,就是在seq包的编号后面加1
猜疑:客户端发送数据给服务器,客户端是否拥有发送数据的功能?
二、 TCP连接第二次握手
-
服务器的22端口默认是一直在LISTEN状态,等待别人进行通信。
ss -tnl | grep 22
-
当收到客户端的SYN包时,服务器回复SYN,ACK数据包给客户端,进入到SYN-RCVD(半连接状态),等待客户端进一步连接,这就是TCP协议的第二次握手。
-
数据包有SYN和ACK包,信息如下:
Seq 信息:2534631076 服务器随机生成
Ack 信息: 3889406004 这个是客户端提供的ACK确认号,回复客户端需要提供这个
Next Seq 信息: 2534631077 指定客户端下次回复服务器的确认号,就是在seq包的编号后面加1
结论:服务器收到数据包,证明客户端有发送数据的功能。
猜疑:服务器发送数据包给客户端,服务器是否有发送数据的功能?客户端是否有接收数据的功能?
三、TCP协议的第三次握手
ACK包里面包括:
Seq 信息:3889406004 客户端改变自己的Seq信息为刚才设定的Ack信息,证明自己是刚才发送的客户端
Ack 信息:2534631077 客户端提供服务器需要的Ack信息
Next Seq 信息:3889406004 指定下次服务器回复客户端的Ack编号
- 客户端发送ACK包给服务器,客户端进入到ESTAB-LISHED状态。
netstat -an Windows查看进程状态
- 服务器收到ACK包后,也进入到ESTAB-LISHED状态。
lsof -i:22 centos 7 查看端口状态,需要yum install -y lsof 安装工具
结论:
客户端收到服务器的数据,证明服务器有发送数据的功能。
客户端发送数据给回服务器,证明客户端拥有接收数据的功能
客户端和服务器都具有发送和接收功能,双方开始正常通信。
TCP协议四次挥手:
四次挥手参考文档:
http://www.tcpipguide.com/free/t_TCPConnectionTermination-2.htm
四次挥手理论图:
实验图:
注意:第二次挥手和第三次挥手因为TCP协议的本身的流量控制机制问题,所以有时候会把2个包放在一起。
三次握手后,客户端和服务器都是ESTABLISHED状态
第一次挥手:
1、客户端发送ACK包,ACK包是对上次连接的数据进行确认,不关挥手机制的事。
2、客户端发送FIN包,向服务器发起断开端口连接请求。
第二次挥手:
服务器收到客户端的断开请求后,发送ACK包进行确认收到断开请求。然后端口进入到CLOSE-WAIT等待关闭状态。
第三次挥手:
服务器准备好和客户端端口断开连接后,发送FIN包给客户端确认要断开连接,然后进入到LAST-ACK,也就是等待客户端的ACK包状态。
第四次挥手:
客户端最后发送ACK包确认收到服务器的FIN包,会先进入到TIME_WAIT等待状态。
客户端等待2MSL时间后,这段时间是为了等待服务器收到ACK包,时间到了后,客户端端口关闭,进入到CLOSED状态。服务器则会继续变成LISTEN状态
3、描述TCP和UDP区别
参考网站:http://www.tcpipguide.com/free/t_toc.htm
TCP协议的特性:
1、工作在传输层
2、面向连接协议
3、全双工协议
4、有数据包恢复机制,可重传,保障数据完整性
5、有窗口机制控制流量,避免拥塞
6、有确认机制,保障数据的正确性
7、传输相对较慢,注重高质量传输
使用TCP协议包括:http,https,ftp,ssh等
UDP协议的特性:
1、工作在传输层
2、不用连接就可以通信
3、有限的错误检查机制
4、传输快,性能高
5、没有数据恢复
使用UDP协议包括:TFTP、SNMP、NFS、DNS、BOOTP等
4、网卡绑定bond0的实现
准备一台虚拟机,使用双网卡,系统为centos7
系统版本 | Centos 7 |
---|---|
网卡1名称 | ens33 |
网卡2名称 | ens34 |
绑定网卡名称 | bond 0 |
绑定模式 | 主备模式 mode=1 |
网卡1配置:
cd /etc/sysconfig/network-scripts/ 进入网卡文件存放目录
mv ifcfg-ens33 ifcfg-ens33.bak 把旧的网卡1改为别的名字,让其不生效
vi ifcfg-ens33 新建新的网卡1配置文件
添加
NAME=ens33
DEVICE=ens33
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
网卡2配置:
mv ifcfg-ens34 ifcfg-ens34.bak 把旧的网卡2改为别的名字,让其不生效
vi ifcfg-ens34 新建新的网卡2配置文件
添加
NAME=ens34
DEVICE=ens34
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
绑定网卡bond 0配置:
vi ifcfg-bond0 新建网卡的绑定文件
添加
NAME=bond0
TYPE=bond
DEVICE=bond0
BOOTPROTO=none
IPADDR=192.168.116.146
PREFIX=24
GATEWAY=192.168.116.2
BONDING_OPTS="mode=1 miimon=100 fail_over_mac=1"
mode=1代表主备模式,当网卡1断了后,网卡2能替代网卡1,保证通信不断开。
systemctl restart network 重启网卡,使配置生效
cat /proc/net/bonding/bond0 通过进程可以看到目前工作的是网卡1
客户端开启一个长ping测试:
ping 192.168.116.146
服务器断开测试:
nmcli conn 查看默认工作的网卡,3个绿色代表3个都正常
nmcli conn down ens33 断开网卡1
nmcli conn 可以看到网卡1断开连接
cat /proc/net/bonding/bond0 通过进程可以看到目前工作的是网卡2,网卡切换完成
客户端查看是否有丢包:
总共发了68个包,0个包丢失,证明网卡绑定成功
68 packets transmitted, 68 received, 0% packet loss, time 67033ms