1. 简述osi七层模型和TCP/IP五层模型
- OSI 参考模型
开放式系统互联参考模型(Open System Interconnection Reference Model),由国际标准化组织提出的一种概念模型。其将计算机网络体系结构划分为以下七层:
应用层(Application Layer):作为用户和应用进程去访问网络的一个窗口。终端用户和应用进程通过其提供的协议,可以实现和位于远端的用户或应用进程进行网络通信,资源贡献等操作。常见的一些应用层协议有:HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。
表示层(Presentation Layer):主要关心两个系统之间被交换信息的语法和语义,它在网络通信中扮演一个翻译者角色,主要从事两个系统之间被交换数据的编码转换,加、解密,压缩与解压缩等工作。
会话层(Session Layer):会话层用于建立、维护和同步通信设备之间的交互。 它在网络通信中扮演一个对话控制器的角色。
传输层(Transport Layer):传输层位于第4层,提供两种主要的传输方式:可靠的传输方式(TCP)和不可靠的传输方式(UDP)。利用可靠的传输方式(TCP),建立源和目标之间的端到端的连接,接收应答、超时重传机制确保传输数据的完整性和可靠性。利用不可靠的传输方式(UDP),实现在不需要可靠性数据通信场景下的高效快速的数据通信。 协议数据单元(PDU):TCP:段,UDP:报文
网络层(Network Layer):提供联网、寻址、路由、打包等功能。能够根据网络条件,服务优先级和其他因素来选择源和目的之间传输数据的最优路径;代表协议包括:IP、IPX、RIP、OSPF等。 协议数据单元(PDU):分组或包
数据链路层(Data Link Layer):它的主要任务是负责在两个相邻结点之间的线路上无差错地传输以帧为单位的数据。数据链路层将数据分解成帧,然后按顺序传输帧,每一帧包括数据和必要的控制信息(包括同步信息、地址信息、差错控制信息和流量控制信息等)。 该层包含两个子层:逻辑链路控制层(Logical Link Control Layer)和介质访问控制层(Media Access Control Layer)。该层协议的代表包括SDLC、HDLC、PPP、STP、帧中继等。 协议数据单元(PDU):帧
物理层(Physical Layer):物理层的主要功能是将各个位从一个节点传输到另一个节点。 它建立、维护和停用物理连接,规定了机械、电气和程序网络接口规范。
TCP/IP五层模型:
组成:应用层、传输层、Internet层、数据链路层、物理层; 其中应用层对应OSI参考模型的应用层、表示层、会话层;
TCP/IP四层模型:
组成:应用层、传输层、网际层、网络接口层
网络接口层:网络接口层严格来说不是一个独立的层次,只是一个接口,TCP/IP并没有对他定义什么具体的协议。网络接口层负责将网络层的数据发送出去,或从网络层收数据帧,抽出IP数据报上交网际层。
网际层:功能和OSI七层模型中的网络的作用相似,处理联网、寻址、路由、打包等事项。
2. 总结描述TCP三次握手四次挥手
为了建立一个TCP连接,需要经历称为“三次握手”的三个步骤,如下所示: 状态转换如下图所示:
- 客户端通常作为TCP连接建立的主动发起者,首先向服务端发送一个请求建立TCP连接的数据报文段(“段1”)。“段1”中SYN置位,序列号字段为自己选择的初始序列号(ISN?),以及额外选项;【此时客户端状态由 CLOSED 切换到 SYN-SENT,服务端处于 LISTEN】
- 服务端接收到来自客户端的 “段1” 时,会发送一个相应数据报文段(“段2”)。“段2”中SYN、ACK字段置位,包含自己的初始序列号(ISN(s))且确认序列号字段为“段1”的序列号ISN?+1;【服务端状态:由LISTEN 转为 SYN-RECV,客户端状态:SYN-SENT】
- 客户端收到来自服务端的“段2”后,会发送一个应答数据报文段(“段3”)给服务端。“段3” 中 ACK置位,序列号为ISN?+1,ACK序列为:ISN(s)+1。服务端收到报文段后,则TCP连接建立成功。【客户端状态:SYN-SENT 转换为 ESTABLISHED;服务端状态:SYN-RECV 转换为 ESTABLISHED】
验证: 实验环境介绍: 启动两台centos7主机,hostA:10.48.4.7 ;hostB:10.48.4.254
- hostA 启动ssh客户端连接 hostB上的ssh服务器,发生tcp连接的建立,三次握手成功时,如下图所示:
可见三次握手成功后,hostA 到 hostB的连接已建立。 - 阻止第一次握手,查看相关的状态:
如下图,通过设置防火墙阻挡第一次握手的syn数据报文段: 在hostA上发起与hostB的TCP连接建立请求,数据报文段如下图,出现超时重传现象,成功阻止第一次握手: 查看hostA (TCP客户端)的连接状态,如下图所示,处于 SYN-SENT 状态: 查看hostB(TCP服务端)的连接状态,如下图所属,处于 LISTEN 状态: - 阻止第二次握手,查看相关状态:
在hostA(客户端)上配置防火墙使其阻止 SYN,ACK都置位的tcp数据报文段; 下图所示,出现超时重传,客户端未接收到服务端的应答数据报文段,故而成功阻止第二次握手: 查看客户端的状态,依旧处于 SYN-SENT ,如下图所示: 查看服务端的状态,由LISTEN —> SYN-RECV 如下图所示: - 阻止第三次握手阶段,查看相关状态:
在hostB(服务端)上通过防火墙阻止仅ACK置位的数据段,从而阻止第三次握手。如下: 查看客户端-服务端之间的数据段情况,如下图所示,出现超时重传,服务端未收到第三次握手的数据段,成功阻止第三次握手: 查看客户端状态,客户端由 SYN-SENT —> ESTABLISHED,表示连接已建立: 查看服务端状态,依旧处于 SYN-RECV 状态: 【总结:】 数据报文段: 第一次握手:【客户端发起】SYN置位,Seq=ISN( c ) 第二次握手:【服务端发起】SYN、ACK置位,Seq=ISN( s )、Ack=ISN( c )+1 第三次握手:【客户端发起】ACK置位,Seq=ISN( c )+1、Ack=ISN( s )+1 状态变化: 第一次握手:【客户端】CLOSED —> SYN_SENT 【服务端】LISTEN 第二次握手:【客户端】SYN_SENT 【服务端】LISTEN —> SYN_RECV 第三次握手:【客户端】SYN_SENT —> ESTABLISHED 【服务端】SYN_RECV —> ESTABLISHED
TCP 断开连接需要经过4此挥手操作,原理上是经过两次主动发起端发送 FIN置位的数据报文段给被动接受端,被动接收端发送ACK置位的数据报文段对其进行回应。 1.连接的主动关闭者发送一个FIN段指明接收者希望看到的自已当前的序列号K 。FIN段还包含了一个ACK段用于确认对方最近一次发来的数据。 2. .连接的被动关闭者将K 的数值加1作为响应的ACK值,以表明它已经成功接收到主动关闭者发送的FIN。此时,上层的应用程序会被告知连接的另一端已经提出了关闭的请求。通常,这将导致应用程序发起自已的关闭操作。接着,被动关闭者将身份转变为主动关闭者,并发送自已的FIN。该报文段的序列号L。 3. 为了完成连接的关闭,最后发送的报文段还包含一个ACK用于确认上一个FIN。值得注意的是,如果出现FIN丢失的情况,那么发送方将重新传输直到接收到一个ACK确认为止。
3. 描述TCP和UDP区别
- tcp协议是面向连接的可靠的协议,而UDP是非面向连接的不可靠协议;
- tcp支持超时重传机制,而UDP不支持;
- tcp有拥塞控制功能,而UDP不支持;
- 协议号不同;TCP协议号为:6,UDP协议号为:17;
- TCP支持无序数据段重新排序机制,而UDP不支持;
- TCP有接受确认机制,而UDP没有;
- UDP数据传输速度快,而TCP由于可靠性机制损失了部分数据传输速度;
- TCP一般用在文件传输,下载等需要可靠性高的应用场景中,而UDP一般用在语音或视频流需要实时响应,低延时的环境中。
4. 网卡绑定bond0的实现
实验环境: OS : centos7 centos7有网卡设备:eth3、eth4 虚拟机:vmware workstation 16 pro
[root@route-c7 ~]
bonding 152979 0
[root@route-c7 ~]
如果没有载入:
[root@route-c7 ~]
[root@route-c7 ~]
bonding 152979 0
[root@route-c7 ~]
如果内核没有自带bonding模块:请重新编译内核并选择BONDING功能
- 配置bonding的主备策略,利用多网卡来提高容错能力。
方法一:手动修改配置文件实现:
- 添加bond0的配置文件
/etc/sysconfig/network-scripts/ifcfg-bond0
[root@route-c7 ~]
>NAME=bond0
>TYPE=bond
>DEVICE=bond0
>BOOTPROTO=none
>ONBOOT=yes
>BONDING_OPTS="mode=1 miimon=100 fail_over_mac=active"
>IPADDR=10.48.4.100
>PREFIX=12
>EOF
参数解释: mode=1 : 表示选择bonding的模式一:主备模式(active-backup); miimon=100:以毫秒级的方式来指定MII链路的监控频率;默认值为0,表示关闭MII链路监控。 fail_over_mac: 指定主备“active-backup”模式下,所有的从接口是否都设置成一样的mac地址,或者启用后,根据所选策略对绑定的 MAC 地址执行特殊处理。可能的值有:
- none or 0:默认值,关闭fail_over_mac,会使主备模式下(“active-backup”)所有的从接口在绑定时
有相同的mac地址; - active or 1:“active” 表示bond接口的mac地址应该总是等于当前处于active状态的从接口的mac地址。从接口的mac地址不会改变,然而bond接口的地址会在故障转移期间发生改变。
- follow or 2:“follow” 表示bond接口的mac地址通常一开始选择第一个添加进来的从接口的mac地址,处于备份状态的从接口一开始不会改变其mac地址,但是在故障转移的过程中,切换的从接口的mac地址会改变成和bond接口的mac地址相同。
- 添加eth3、eth4的配置文件
ifcfg-eth3、ifcfg-eth4
[root@route-c7 ~]
>NAME=eth3
>DEVICE=eth3
>ONBOOT=yes
>MASTER=bond0
>SLAVE=yes
>BOOTPROTO=none
>EOF
[root@route-c7 ~]
>NAME=eth4
>DEVICE=eth4
>ONBOOT=yes
>BOOTPROTO=none
>MASTER=bond0
>SLAVE=yes
>EOF
- 重启network.service 服务
[root@route-c7 ~]
- 查看是否成功
[root@route-c7 ~]
1: eth3: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
link/ether 00:50:56:aa:44:44 brd ff:ff:ff:ff:ff:ff
2: eth4: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
link/ether 00:0c:29:77:34:f0 brd ff:ff:ff:ff:ff:ff
11: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:50:56:aa:44:44 brd ff:ff:ff:ff:ff:ff
inet 10.48.4.100/12 brd 10.63.255.255 scope global noprefixroute bond0
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:feaa:4444/64 scope link
valid_lft forever preferred_lft forever
[root@route-c7 ~]
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: eth3
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth3
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:50:56:aa:44:44
Slave queue ID: 0
Slave Interface: eth4
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:77:34:f0
Slave queue ID: 0
[root@route-c7 ~]
方法二:利用nmcli命令来配置文件实现:
[root@route-c7 ~]
[root@route-c7 ~]
[root@route-c7 ~]
[root@route-c7 ~]
BONDING_OPTS="miimon=100 mode=active-backup"
TYPE=Bond
BONDING_MASTER=yes
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=10.48.4.100
PREFIX=12
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=bond0
UUID=aaf4a6bd-114b-42c8-96e7-3a5a87465d7e
DEVICE=bond0
ONBOOT=yes
[root@route-c7 ~]
[root@route-c7 ~]
TYPE=Ethernet
NAME=eth3
UUID=de8e299f-93c3-472e-b728-ded47bae6857
DEVICE=eth3
ONBOOT=yes
MASTER=bond0
SLAVE=yes
[root@route-c7 ~]
[root@route-c7 ~]
TYPE=Ethernet
NAME=eth4
UUID=a445c665-42c6-44ce-b30d-331e14655adf
DEVICE=eth4
ONBOOT=yes
MASTER=bond0
SLAVE=yes
[root@route-c7 ~]
[root@route-c7 ~]
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth3
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth3
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:50:56:aa:44:44
Slave queue ID: 0
Slave Interface: eth4
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:77:34:f0
Slave queue ID: 0
【参考链接】
- OSI Model: Layers, Characteristics, Functions - javatpoint
- 网络层(互联网中的网络层)
- Linux Ethernet Bonding Driver HOWTO
|