OSI参考模型
OSI模型的设计目的是成为一个所有销售商都能实现的开放网路模型,来克服使用众多私有网络模型所带来的困难和低效性。OSI是在一个备受尊敬的国际标准团体的参与下完成的,这个组织就是ISO(国际标准化组织)。什么是OSI,OSI是Open System Interconnection 的缩写,意为开放式系统互联参考模型。
OSI采用了分层的结构化技术,共分七层: 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
-
应用层
访问网络服务的接口
例如:为操作系统和网络应用程序提供分行问网络服务的接口
常见: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层为系统内核。
应用层
浏览器,是我们经常用到的上层应用。我们只需要在地址栏输入网址,回车,就会看到相应的页面。
可是,这是怎么实现的呢?下面我们用命令的方式,模拟一下浏览器的工作过程,来研究一下它的工作原理。
命令行模拟浏览器的执行过程
- 进入目录
命令: 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<& -
- 完整演示
浏览器工作原理总结:
1、建立连接
客户端和服务器握手,建立连接。
2、传输数据
使用HTTP协议,客户端按照HTTP协议标准,发送请求字符串;服务器收到请求后,按照HTTP协议标准,响应字符串给客户端。
3、关闭连接
最后,客户端和服务器关闭连接。
应用层,只是准备了协议参数,建立连接、传输数据、关闭连接等,都要依赖下层来实现。
传输控制层
TCP协议是面向连接的,可靠传输。客户端和服务器,经过三次握手建立连接,然后传输数据,传输完成后,通过四次分手,断开连接。
-
建立连接
客户端和服务器想要建立连接,需要通过三次握手,成功后开辟资源,建立连接。下面分别用生活版、程序版来说明一下。
生活版:
街上有一个靓女,靓仔看了一眼,有点心动。靓女注意到了有人看她,于是回看了靓仔一眼。靓仔又看了一眼靓女,两个人目光对上了。确认过眼神,于是靓仔上前和女孩聊天了。
程序版:
客户端向服务器发送连接请求,服务器收到后,也向客户端发送一个同意连接的请求,客户端再次向服务器发送确认收到的请求,连接可靠。客户端、服务器各自开辟资源,建立连接完成。
-
断开连接
客户端和服务器想要连接,需要四次分手后才能断开连接,释放资源。下面分别用生活版、程序版来说明一下。
生活版:
靓仔和靓女聊的很投机,不知不觉间已经天黑了。靓女看到天都黑了,就准备回去了。
靓女:“太晚了,我要回去了”。
靓仔:“好的”。
靓仔:“那我也回去吧”。
靓女:“好的”。
程序版:
TCP协议是可靠连接,所以每次请求后都会确认。如果客户端想要断开与服务器的连接,需要四次分手后才能断开连接,释放资源。
客户端:“我要和你断开连接”。
服务器:“我同意”。
服务器:“那我也和你断开连接吧”。
客户端:“我同意”。
-
最小粒度
三次握手 > 数据传输 > 四次分手,成为一个最小粒度,不可被分割。
-
查看连接
命令:netstat -natp
参数 | 描述 |
---|---|
-n | ip地址 |
-a | 所有 |
-t | tcp |
-p | PID |
表格属性描述
属性 | 描述 |
---|---|
Proto | 协议 |
Recv-Q | 接收数量 |
Send-Q | 发送数量 |
Local Address | 本地地址 |
Foreign Address | 远程地址 |
State | 状态LISTEN监听、ESTABLISHED已连接 |
PID/Program name | 进程号、程序名称 |
传输控制层,只是准备了握手包,三次握手、传输数据、四次分手等,都要依赖下层来实现。
网络层
网络端点之间通信,用的是下一跳机制。从一个端点(路由器)跳到下一个端点。
- 查看网卡信息文件
命令:vim /etc/sysconfig/network-scripts/ifcfg-ens33
参数 | 值 | 描述 | 四个维度 |
---|---|---|---|
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
命令 | 描述 |
---|---|
Destination | 目标网络 |
Gateway | 网关 |
Genmask | 掩码 |
本机ip(192.168.174.53) & 掩码(255.255.255.0) = 目标地址(192.168.174.0)
- 下一跳
链路层
节点(电脑、手机等终端)间通信,用的是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地址找到网关了。
-
不同网络怎样通信
-
查看节点
命令:arp -a
总结
TCP/IP协议,进行网络传输,在端点间使用下一跳机制,在节点间用mac地址。每次下一跳,目标ip地址不变,但是mac地址会改变。
我们再梳理一下,以虚拟机访问百度为例:
-
arp
虚拟机1第一次联网,会自动向交换机发送arp包,来获取网关的mac地址。
-
直连
目标ip与掩码运算,如果与目标ip一致,则直接连接。
-
下一跳
-
连接百度示意图
主要是网络层、链路层,其中路由器是网络层的,交换机是链路层的。
节点间通过链路层通信,端点间通过网络层通信。