01 高并发负载均衡:网络协议原理

OSI参考模型

OSI模型的设计目的是成为一个所有销售商都能实现的开放网路模型,来克服使用众多私有网络模型所带来的困难和低效性。OSI是在一个备受尊敬的国际标准团体的参与下完成的,这个组织就是ISO(国际标准化组织)。什么是OSI,OSI是Open System Interconnection 的缩写,意为开放式系统互联参考模型。

OSI采用了分层的结构化技术,共分七层: 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
01 高并发负载均衡:网络协议原理_第1张图片

  • 应用层
    访问网络服务的接口
    例如:为操作系统和网络应用程序提供分行问网络服务的接口
    常见:Telnet、FTP、HTTP、SNMP、DNS等

  • 表示层
    提供数据格式转换服务
    例如:解密与加密、图片解码和编码、数据的压缩和解压缩
    常见:URL加密、口令加密、图片编解码

  • 会话层
    建立端连接并提供访问验证和会话管理(SESSION)
    例如:使用校验点可使会话在通信失效时从校验点恢复通信
    常见:服务器验证用户登录、断点续传

  • 传输层
    提供应用进程之间的逻辑通信
    例如:建立连接、处理数据包错误、数据包次序
    常见:TCP、UDP、SPX、进程、端口(socket)
    数据段(Segment)

  • 网络层
    为数据在节点之间传输创建逻辑链路,并分组转发数据
    例如:对子网间的数据包进行路由选择
    常见:路由器、多层交换机、防火墙、IP、IPX、RIP、OSPF
    分组(数据包)(Packet)

  • 链路层
    在通信的实体间建立数据链路连接
    例如:讲数据分帧,并处理流控制、物理地址寻址、重发等
    常见:网卡、网桥、二层交换机等
    帧(Frame)

  • 物理层
    为数据端设备提供原始比特流的传输的通路
    例如:网络通信的数据传输介质,由电缆与设备共同构成
    常见:中继器、集线器、网线、HUB、RJ-45标准等
    比特(bit)


TCP/IP协议模型

TCP/IP协议模型把OSI参考模型的七层精简为5层:应用层、传输控制层、网络层、链路层、物理层。其中,应用层为上层应用,后4层为系统内核。
01 高并发负载均衡:网络协议原理_第2张图片

应用层

浏览器,是我们经常用到的上层应用。我们只需要在地址栏输入网址,回车,就会看到相应的页面。
01 高并发负载均衡:网络协议原理_第3张图片
01 高并发负载均衡:网络协议原理_第4张图片
01 高并发负载均衡:网络协议原理_第5张图片
可是,这是怎么实现的呢?下面我们用命令的方式,模拟一下浏览器的工作过程,来研究一下它的工作原理。

命令行模拟浏览器的执行过程
  • 进入目录
命令: cd /proc/$$/fd
命令 描述
cd 去哪
prcd 系统目录
$$ 当前程序的进程号
fd 文件描述符
命令: ll
文件描述符 描述
0 输入
1 输出
2 报错
  • 创建连接
    和百度建立握手,创建一个连接通信。
命令:exec 8<> /dev/tcp/www.baidu.com/80
命令 描述
/dev/tcp/www.baidu.com/80 文件路径
8 创建一个文件描述符8
<> 输入输出两个方向都指向8
exec exec 是 bash 的内置命令。exec是用被执行的命令行替换掉当前的shell进程,且exec命令后的其他命令将不再执行。系统调用exec是以新的进程去代替原来的进程,但进程的PID保持不变。因此,可以这样认为,exec系统调用并没有创建新的进程,只是替换了原来进程上下文的内容。原进程的代码段,数据段,堆栈段被新的进程所代替。
  • 传输数据
    客户端向百度发送请求,百度收到请求后把首页响应给客户端,使用http协议(规范标准)。
命令:echo -e 'GET / HTTP/1.0\n' >& 8
命令 描述
> 输出方向
& 后面不是文件,而是文件描述符
8 文件描述符
echo 打印
-e 使后面的\n变成换行符
GET / HTTP/1.0\n http协议规定的request请求最小的写法。其中,GET:请求方法;HTTP:协议;1.0:http协议版本;\n:换行符,必须要带换行符。

打印字符串,请求百度,百度响应的字符串,通过socket,流回到8这个文件描述符中。

  • 查看响应内容
    从8这个文件描述符输入字符串,打印到控制台,查看。
命令:cat 0<& 8
命令 描述
8 文件描述符,自定义
& 后面不是文件,而是文件描述符
< 输入方向
0 文件描述符,输入
cat 查看
  • 关闭连接
命令:exec 8<& -
  • 完整演示
    01 高并发负载均衡:网络协议原理_第6张图片
    01 高并发负载均衡:网络协议原理_第7张图片
    01 高并发负载均衡:网络协议原理_第8张图片
    浏览器工作原理总结:
    1、建立连接
    客户端和服务器握手,建立连接。
    2、传输数据
    使用HTTP协议,客户端按照HTTP协议标准,发送请求字符串;服务器收到请求后,按照HTTP协议标准,响应字符串给客户端。
    3、关闭连接
    最后,客户端和服务器关闭连接。
    应用层,只是准备了协议参数,建立连接、传输数据、关闭连接等,都要依赖下层来实现。

传输控制层

TCP协议是面向连接的,可靠传输。客户端和服务器,经过三次握手建立连接,然后传输数据,传输完成后,通过四次分手,断开连接。

  • 建立连接
    客户端和服务器想要建立连接,需要通过三次握手,成功后开辟资源,建立连接。下面分别用生活版、程序版来说明一下。
    生活版:
    街上有一个靓女,靓仔看了一眼,有点心动。靓女注意到了有人看她,于是回看了靓仔一眼。靓仔又看了一眼靓女,两个人目光对上了。确认过眼神,于是靓仔上前和女孩聊天了。
    01 高并发负载均衡:网络协议原理_第9张图片
    程序版:
    客户端向服务器发送连接请求,服务器收到后,也向客户端发送一个同意连接的请求,客户端再次向服务器发送确认收到的请求,连接可靠。客户端、服务器各自开辟资源,建立连接完成。
    01 高并发负载均衡:网络协议原理_第10张图片

  • 断开连接
    客户端和服务器想要连接,需要四次分手后才能断开连接,释放资源。下面分别用生活版、程序版来说明一下。
    生活版:
    靓仔和靓女聊的很投机,不知不觉间已经天黑了。靓女看到天都黑了,就准备回去了。
    靓女:“太晚了,我要回去了”。
    靓仔:“好的”。
    靓仔:“那我也回去吧”。
    靓女:“好的”。
    01 高并发负载均衡:网络协议原理_第11张图片
    程序版:
    TCP协议是可靠连接,所以每次请求后都会确认。如果客户端想要断开与服务器的连接,需要四次分手后才能断开连接,释放资源。
    客户端:“我要和你断开连接”。
    服务器:“我同意”。
    服务器:“那我也和你断开连接吧”。
    客户端:“我同意”。
    01 高并发负载均衡:网络协议原理_第12张图片

  • 最小粒度
    三次握手 > 数据传输 > 四次分手,成为一个最小粒度,不可被分割。
    01 高并发负载均衡:网络协议原理_第13张图片

  • 查看连接

命令:netstat -natp
参数 描述
-n ip地址
-a 所有
-t tcp
-p PID

01 高并发负载均衡:网络协议原理_第14张图片
表格属性描述

属性 描述
Proto 协议
Recv-Q 接收数量
Send-Q 发送数量
Local Address 本地地址
Foreign Address 远程地址
State 状态LISTEN监听、ESTABLISHED已连接
PID/Program name 进程号、程序名称

传输控制层,只是准备了握手包,三次握手、传输数据、四次分手等,都要依赖下层来实现。

网络层

网络端点之间通信,用的是下一跳机制。从一个端点(路由器)跳到下一个端点。

  • 查看网卡信息文件
命令:vim /etc/sysconfig/network-scripts/ifcfg-ens33

01 高并发负载均衡:网络协议原理_第15张图片

参数 描述 四个维度
DEVICE ens33 策略 -
HWADDR 00:50:56:2F:C0:10 MAC地址 -
TYPE Ethernet 类型 -
ONBOOT yes 开机是否启动 -
NM_CONTROLLED - - -
BOOTPROTO static 静态IP -
IPADDR 192.168.174.53 IP地址 Y
NETMASK 255.255.255.0 掩码 Y
GATEWAY 192.168.174.2 网关 Y
DNS1 192.168.174.2 DNS1 Y
DNS2 - DNS2 -
  • 网络号
    ip地址与掩码按位做与运算,得到网络号。下面的例子,255是转换成2进制是全1的,所以ip地址的前三位和掩码的前三位做与运算,结果同ip的前三位;ip的第四位和掩码的第四位0做与运算,结果是0。
    IP & 掩码
    192.168.174.53 & 255.255.255.0=192.168.174.0

  • 查看路由

命令:route -n

01 高并发负载均衡:网络协议原理_第16张图片

命令 描述
Destination 目标网络
Gateway 网关
Genmask 掩码

本机ip(192.168.174.53) & 掩码(255.255.255.0) = 目标地址(192.168.174.0)

  • 下一跳
    01 高并发负载均衡:网络协议原理_第17张图片

链路层

节点(电脑、手机等终端)间通信,用的是Mac地址。

  • 节点是怎么知道网关mac地址的
    电脑开机后,会发送arp包给交换机,内容是自己的ip、mac地址、目标地址是网关ip、目标mac地址是全F的地址。
    交换机接到包会判断,如果是全F的目标mac地址,则会把arp包广播给其它所有交换机端口连接的主机。
    并且,学习这个arp包发送过来的交换机端口、主机ip、mac地址。
    如果ip不是网关的主机接到了广播过来的arp包,会直接丢弃;
    如果ip是网关,也就是路由器的其中一块网卡接收到了,则会做出应答:重新封装一个arp包,内容是自己的ip、mac地址、目标ip是收到的arp包的源ip地址、目标mac地址是收到的arp包的源mac地址,发给交换机。
    交换机收到路由器发来的arp包,发现目标mac地址自己学习过了,就不会在广播了,而是直接发给对应的主机。
    主机接到arp包后,学习网关的mac地址,之后就能通过mac地址找到网关了。
    01 高并发负载均衡:网络协议原理_第18张图片

  • 不同网络怎样通信
    01 高并发负载均衡:网络协议原理_第19张图片

  • 查看节点

命令:arp -a

01 高并发负载均衡:网络协议原理_第20张图片

总结

TCP/IP协议,进行网络传输,在端点间使用下一跳机制,在节点间用mac地址。每次下一跳,目标ip地址不变,但是mac地址会改变。

我们再梳理一下,以虚拟机访问百度为例:

  • arp
    虚拟机1第一次联网,会自动向交换机发送arp包,来获取网关的mac地址。
    01 高并发负载均衡:网络协议原理_第21张图片

  • 直连
    目标ip与掩码运算,如果与目标ip一致,则直接连接。
    01 高并发负载均衡:网络协议原理_第22张图片

  • 下一跳
    01 高并发负载均衡:网络协议原理_第23张图片

  • 连接百度示意图
    主要是网络层、链路层,其中路由器是网络层的,交换机是链路层的。
    节点间通过链路层通信,端点间通过网络层通信。
    01 高并发负载均衡:网络协议原理_第24张图片


下一篇《02 高并发负载均衡:LVS的DR,TUN,NAT模型推导》

你可能感兴趣的:(02,从网络到分布式,网络,网络协议,http,linux)