一、简述OSI七层模型和TCP/IP五层模型
OSI七层模型
OSI是Open System Interconnect的缩写,意为开放式系统互联,各个层次的划分按照以下原则:
1、同一层中的各网络节点都有相同的层次结构,具有同样的功能 。
2、同一节点内相邻层之间通过接口(可以是逻辑接口)进行通信 。
3、七层结构中的每一层使用下一层提供的服务,并且向其上层提供服务。
4、不同节点的同等层按照协议实现对等层之间的通信 。
具体定义如下表所示:
层次 | 层次名 | 定义 | 设备/协议 |
---|---|---|---|
第一层 | 物理层 | 在局部局域网上传送数据帧(Data Frame),它负责管理电脑通信设备和网络媒体之间的互通 | 针脚、电压、线缆规范、集线器、中继器、网卡、主机接口卡;ISO2110,IEEE802,IEEE802.2等协议 |
第二层 | 数据链接层 | 负责网络寻址、错误侦测和改错 | SLIP,CSLIP,PPP,ARP,RARP,MTU |
第三层 | 网络层 | 决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成报文 | IP,ICMP,RIP,OSPF,BGP,IGMP |
第四层 | 传输层 | 把传输表头(TH)加至数据以形成数据包 | TCP,UDP |
第五层 | 会话层 | 负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接 | 无协议 |
第六层 | 表示层 | 把数据转换为能与接收者的系统格式兼容并适合传输的格式 | 无协议 |
第七层 | 应用层 | 提供为应用软件而设的接口,以设置与另一应用软件之间的通信 | HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3、MySQL |
TCP/IP五层模型
物理层:负责光电信号传递方式。集线器工作在物理层。以太网协议。
数据链路层:负责设备之间的数据帧的传输和识别。交换机工作在数据链路层。例如网卡设备的驱动,帧同步,冲突检测,数据差错校验等工作。
网络层:负责地址管理和路由选择。路由器工作在网络层。
传输层:负责两台主机之间的数据传输。
应用层:负责应用程序之间的沟通。网络编程主要针对的就是应用层。
注: 传输层和网络层的封装在操作系统完成。应用层的封装在应用程序中完成。数据链路层和物理层的封装在设备驱动程序与网络接口中完成。
二、总结描述TCP三次握手四次挥手
TCP连接的建立(三次握手)
三次握手的流程图如下所示:
1、TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态。
2、TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。
3、TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。
4、TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。
5、当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。
TCP连接的释放(四次挥手)
流程图如下:
-
客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
-
服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
-
客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
-
服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
-
客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
-
服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
参考文档(https://www.cnblogs.com/lipengfei159263/p/9745986.html)
三、描述TCP和UDP区别
协议 | 优点 | 缺点 |
---|---|---|
TCP | 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源 | 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击 |
UDP | 快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些 | 不可靠,不稳定 因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包 |
四、网卡绑定bond0的实现
本实验中使用的是虚拟机进行相关操作
网卡地址:
ens33:10.0.0.150 ens37:10.0.0.155 bond0接口地址10.0.0.160 主机版本centos8
##添加bond0接口
nmcli con add type bond con-name testbond0 ifname bond0 mode active-backup ipv4.method manual ipv4.addresses 10.0.0.160/24
##添加从属接口
nmcli con add type bond-slave ifname ens33 master bond0
nmcli con add type bond-slave ifname ens37 master bond0
##接口添加完成后,可查看接口信息
[root@centos8 ~]# nmcli connection
NAME UUID TYPE DEVICE
ens33 278708d1-d2ae-4f95-b134-66d47485df37 ethernet ens33
Wired connection 1 dff57098-445d-3fb4-9fad-cd038c792f49 ethernet ens37
testbond0 442fca16-da86-4690-be3e-24612a4ac9b0 bond bond0
bond-slave-ens33 acd78d4d-f8cf-4839-8b36-471bddc19833 ethernet --
bond-slave-ens37 4f9b011b-8e83-4abf-9b17-e1c66572659d ethernet --
##启动从属接口
nmcli con up bond-slave-ens33
nmcli con up bond-slave-ens37
##启动bond
[root@centos8 ~]# nmcli con up testbond0
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
##启动后查看ip信息
[root@centos8 ~]# 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: ens33: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP group default qlen 1000
link/ether 00:0c:29:7a:9e:d1 brd ff:ff:ff:ff:ff:ff
3: ens37: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP group default qlen 1000
link/ether 00:0c:29:7a:9e:d1 brd ff:ff:ff:ff:ff:ff
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:7a:9e:d1 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.160/24 brd 10.0.0.255 scope global noprefixroute bond0
valid_lft forever preferred_lft forever
inet6 fe80::c707:bd06:ed9d:75c9/64 scope link noprefixroute
valid_lft forever preferred_lft forever
##网卡绑定bond0成功