linux作业--第五周
阅读原文时间:2023年07月11日阅读:1

1、简述osi七层模型和TCP/IP五层模型

一、OSI参考模型

(1) OSI的来源

OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。

ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。

(2)OSI七层模型的划分及其解释

OSI模型

(3)各层功能定义

<1> 应用层

OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP、HTTPS、FTP、POP3、SMTP等。

<2> 表示层

表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。

<3> 会话层

会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。

<4> 传输层

传输层建立了主机端到端的链接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路。我们通常说的,TCP UDP就是在这一层。端口号既是这里的“端”。

<5> 网络层

本层通过IP寻址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。就是通常说的IP层。这一层就是我们经常说的IP协议层。IP协议是Internet的基础。

<6> 数据链路层

将比特组合成字节,再将字节组合成帧,使用链路层地址 (以太网使用MAC地址)来访问介质,并进行差错检测。数据链路层又分为2个子层:逻辑链路控制子层(LLC)和媒体访问控制子层(MAC)。MAC子层处理CSMA/CD算法、数据出错校验、成帧等;LLC子层定义了一些字段使上次协议能共享数据链路层。 在实际使用中,LLC子层并非必需的。

<7> 物理层

实际最终信号的传输是通过物理层实现的。通过物理介质传输比特流。规定了电频、速度和电缆针脚。常用设备有(各种物理设备)集线器、中继器、调制解调器、网线、双绞线、同轴电缆。这些都是物理层的传输介质。

二、TCP/IP五层模型

TCP/IP五层协议和OSI的七层协议对应关系如下图。

TCP/IP模型

在每一层都工作着不同的设备,比如我们常用的交换机就工作在数据链路层的,一般的路由器是工作在网络层的。

各层相关设备

在每一层实现的协议也各不同,即每一层的服务也不同,下图列出了每层主要的协议。

各层相关协议

2、总结描述TCP三次握手四次挥手

TCP连接的建立(三次握手)

  • 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
  • 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

TCP连接的释放(四次挥手)

  • 1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
  • 2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
  • 3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
  • 4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
  • 5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCP后,才进入CLOSED状态。
  • 6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCP后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

3、描述TCP和UDP区别

UDP,在传送数据前不需要先建立连接,远地的主机在收到UDP报文后也不需要给出任何确认。虽然UDP不提供可靠交付,但是正是因为这样,省去很多的开销,使得它的速度比较快,比如一些对实时性要求较高的服务,就常常使用的是UDP。对应的应用层的协议主要有 DNS,TFTP,DHCP,SNMP,NFS 等。

TCP,提供面向连接的服务,在传送数据之前必须先建立连接,数据传送完成后要释放连接。因此TCP是一种可靠的的运输服务,但是正因为这样,不可避免的增加了许多的开销,比如确认,流量控制等。对应的应用层的协议主要有 SMTP,TELNET,HTTP,FTP 等。

TCP协议:
这是一个面向连接的传输协议.
优点:数据可靠性高.
缺点:相对UDP来说速度较慢,连接和断开较为繁琐.

UDP协议:
这是一个无连接的简单的面向数据报的传输层协议
优点:速度快
缺点:无法保证数据是完整的.

4、网卡绑定bond0的实现

将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡

bond聚合链路模式共7种模式:0-6 Mode

  • mod=0 ,即:(balance-rr) Round-robin policy(轮询)聚合口数据报文按包轮询从物理接口转

    发。

  • mod=1,即: (active-backup) Active-backup policy(主-备份策略)只有Active状态的物理接口

    才转发数据报文。

    容错能力----只有一个slave是激活的(active)。也就是说同一时刻只有一个网卡处于工作状态,其他

    的slave都处于备份状态,只有在当前激活的slave故障后才有可能会变为激活的(active)。

Bonding 配置

centos7实现双网卡主备模式

创建bonding设备的配置文件

/etc/sysconfig/network-scripts/ifcfg-bond0
NAME=bond0
TYPE=bond
DEVICE=bond0
BOOTPROTO=none
IPADDR=192.168.42.200
PREFIX=24
BONDING_OPTS="mode=1 miimon=100 fail_over_mac=1"
BONDING_MASTER=yes

注:#miimon指定链路监测时间间隔。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一条线路不通就转入另一条线路

mode共有七种(0~6),这里解释两个常用的选项。

mode=0:表示load balancing (round-robin)为负载均衡方式,两块网卡都在工作。

mode=1:表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,其中一块网卡在工作(若eth0断掉),则自动切换到另一个块网卡(eth1做备份)。

linux网卡bonging的备份模式实验在真实机器上做完全没问题(前提是linux内核支持),但是在vmware workstation虚拟中做就会出现适配器不具有网络连接的现象。

配置完成后出现适配器不具有网络连接的问题,但是bond0能够正常启动也能够正常使用,只不过没有起到备份模式的效果。当使用ifdown eth0后,网络出现不通现象。

内核文档中有说明:bond0获取mac地址有两种方式:

一种是从第一个活跃网卡中获取mac地址,然后其余的SLAVE网卡的mac地址都使用该mac地址;

另一种是使用fail_over_mac参数,使bond0使用当前活跃网卡的mac地址,mac地址跟随活跃网卡的转换而变。

既然vmware workstation不支持第一种获取mac地址的方式,那么可以使用fail_over_mac=1参数,所以这里我们添加fail_over_mac=1参数真实环境中可以不这样做。

如果是虚拟机,fail_over_mac=1 是必须要带上的,否则vmware会出现告警信息,配置起来能正常用,但是在进行主备切换时,是无法进行的。切记!

vmware 出现这样的提示基本可以确定 fail_over_mac 没有生效,所配置的网卡也无法做到故障切换。

修改网卡配置文件ifcfg-eth0
TYPE=Ethernet
NAME=bond0-eth0
BOOTPROTO=none
DEVICE=eth0
MASTER=bond0
SLAVE=yes
ONBOOT=yes

修改网卡配置文件ifcfg-eth1
TYPE=Ethernet
NAME=bond0-eth1
BOOTPROTO=none
DEVICE=eth1
MASTER=bond0
SLAVE=yes
ONBOOT=yes

加载模块(或重启设备)

[root@localhost ~]# modprobe bonding

重启网络,确认绑定情况

[root@localhost ~]#service network restart

查看bond0的状态

[root@localhost ~]# cat /proc/net/bonding/bond0

centos8使用nmcli实现bond

#添加bonding接口
nmcli con add type bond con-name bond0 ifname bond0 mode active-backup
ipv4.method manual ipv4.addresses 192.168.42.200/24
#添加从属接口
nmcli con add type bond-slave ifname eth0 master bond0
nmcli con add type bond-slave ifname eth1 master bond0
#注:如无为从属接口提供连接名,则该名称是接口名称加类型构成

#要启动绑定,则必须首先启动从属接口
nmcli con up bond-slave-eth0
nmcli con up bond-slave-eth1
#启动绑定
nmcli con up bond0

#删除bond
nmcli con del bond0

网络组 Network Teaming

网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量,网络组不同于旧版中bonding技术,提供更好的性能和扩展性

多种方式 runner

  • broadcast
  • roundrobin
  • activebackup
  • loadbalance
  • lacp (implements the 802.3ad Link Aggregation Control Protocol)

使用网络组实现多网卡绑定: [ 在Centos 7 之后的版本推荐使用这种方式 ]

nmcli con add type team con-name team0 ifname team0 config '{"runner":{"name": "loadbalance"}}' ipv4.addresses 192.168.42.200/24 ipv4.method manual

或者

nmcli con add type team ifname team1 con-name team1 config '{"runner":{"name":"activebackup", "hwaddr_policy":"by_active"}}' \ipv4.method manual ipv4.address 192.168.42.100/24 ipv4.gateway 192.168.42.1 ipv4.dns 114.114.114.114

注:配置完毕,在虚拟机环境中一定要注意:"hwaddr_policy":"by_active" 这个参数意义和 fail_over_mac =1 是一致的,在虚拟机环境中必须添加上,否则网卡高可用可能失败。

nmcli con add con-name team0-eth0 type team-slave ifname eth0 master team0
nmcli con add con-name team0-eth1 type team-slave ifname eth1 master team0
nmcli con up team0
nmcli con up team0-eth0
nmcli con up team0-eth1

查看网络组状态
teamdctl team0 state

网络组配置文件

/etc/sysconfig/network-scripts/ifcfg-con-team0

DEVICE=team0
TEAM_CONFIG="{\"runner\":{\"name\":\"roundrobin\"}}"
或
TEAM_CONFIG="{\"runner\":{\"name\":\"activebackup\", \"hwaddr_policy\":\"by_active\"}}"
BOOTPROTO=none
DEFROUTE=yes
NAME=con-team0
ONBOOT=yes
DEVICETYPE=Team
IPADDR=192.168.42.100
PREFIX=24

/etc/sysconfig/network-scripts/ifcfg-team-slave-eth0

NAME=team-slave-eth0
DEVICE=eth0
ONBOOT=yes
TEAM_MASTER=team0
DEVICETYPE=TeamPort

/etc/sysconfig/network-scripts/ifcfg-team-slave-eth1

NAME=team-slave-eth1
DEVICE=eth1
ONBOOT=yes
TEAM_MASTER=team0
DEVICETYPE=TeamPort


nmcli con reload
nmcli con up con-team0
nmcli con up team-slave-eth0
nmcli con up team-slave-eth1

删除网络组:
nmcli con del  team-slave-eth0
nmcli con del  team-slave-eth1
nmcli con del  con-team0

查看网络组状态

[root@localhost ~]# teamdctl team0 state

可以看到活动网卡为eth0

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器