「幼儿园水平」网络协议入门

370 阅读10分钟

本文正在参与 “网络协议必知必会”征文活动

HTTP、TCP/IP、UDP、DNS、五层模型、七层模型等所有这些常见名词,其实本质都是为了数据传输而规定的协议

一、数据


先说什么是数据?本质上就是计算机所能处理的 0 和 1

计算机中的文本、图片、视频等一切内容,都是以 0 和 1 的形式传播和存储的

二、协议


我们模拟一下在此前提之下的数据信息交流情况:现在有两台电脑小明小红,同时为了便于理解,把二进制扩大到十进制

1. 支出情况协议

设定一个「支出情况协议」协议只有一个规则,传一个数字,表示当天的支出

小明「10」(今天支出 10 元) 小红「15」(今天支出 15 元)

2. 收支情况协议

两人觉得只告知支出还不够,因此希望有一个「收支情况协议」

这个协议需要传两个数字,表示支出和收入。平常有类似的需求,我们在两数之间加空格即可,但是现在我们只有 0~9。所以没法模拟空格

简单的解法是规定好两个数字的位数,例如都占 4 位(为了便于阅读会在不同数字间加空格,实际上不会有)

小明「0010 0001」(今天支出 10 元,收入 1 元) 小红「9999 0007」(今天支出 9999 元,收入 7 元)

坏处是如果位数太多,那么数字很小的时候会浪费空间。如果位数太少,数字的范围也就很小。一般这种情况可以如下优化

前两个数字位数为 1,表示支出和收入分别占多少位,后面对应的位数为收支

小明「4 1 1000 1」(今天支出 1000 元,收入 1 元) 小红「9 3 999999999 111」(今天支出 999999999 元,收入 111 元) ​

这样可以兼顾数字范围和空间

3. 热量摄入协议

两个人不能光聊钱,还想聊点别的,比如今天吃了多少。量化成协议就是「热量摄入协议」

规则同「收支情况协议」,只是数字的含义改为摄入卡路里、消耗卡路里。不过这两个协议好像没法区分了,所以还得加一个 1 位数表示当前是什么协议

规定:1 是当天热量摄入协议,2 是当天收支情况协议

小明「1 3 1 255 1」(今天消耗 15 卡,摄入 1 卡) 小红「2 9 3 999999999 111」(今天支出 999999999 元,收入 111 元) ​

实际上计算机中的数据都是以二进制的形式存储 「01 1000 0001 11111111 1」(今天消耗 255 卡,摄入 1 卡) ​

然后以 16 进制的形式展示 「2 2 1 FF 1」(今天消耗 255 卡,摄入 1 卡)

4. 寻协址议

两人聊得火热朝天,吸引了周围 97 个人的加入。这下总共 99 个人彻底不知道谁和谁在聊天了。为了确定各自的聊天目标,新增了一层「寻址协议」 ​

规定:前 2 位数表示聊天目标。小明 1,小红 99

小明「99 1 3 1 255 1」(小红,告诉你个消息,今天我消耗 15 卡,摄入 1 卡) 小红「01 2 9 3 999999999 111」(小明,告诉你个消息,今天我支出 999999999 元,收入 111 元) ​

5. 握手协议

大伙聊着发现,这 99 个人里有一些聋子和哑巴。跟这些人聊天根本得不到正常回应。所以为了确认自己的聊天对象是否正常,大家又新增了「握手协议」

规定:新增一位数,每次交流之后需要加 1。证明自己能说话、能听到之后才能开始聊天

小明「99 0」

  • 小红
  • 证明我能说话,我说 0

小红「01 1」

  • 小明
  • 证明我能听到,你说 0
  • 证明我能说话,我说 1(0+1)

小明「99 2」

  • 小红
  • 证明我能听到,你说 1
  • 互相证明完毕,开始聊天

小明「99 2 1 3 1 255 1」(小红,告诉你个消息,今天我消耗 15 卡,摄入 1 卡) 小红「01 2 2 9 3 999999999 111」(小明,告诉你个消息,今天我支出 999999999 元,收入 111 元) ​

因为最少需要 3 之后发起方才可以开始聊天,所以也叫 3 次握手

6. 分层

但是位数一多,就难以区分和管理了。所以我们可以把一串信息来分层

地址层会话层应用层
寻址协议握手协议收支情况协议
热量摄入协议
小明9921 3 1 255 1
小红0122 9 3 999999999 111

使用上面的技巧,通过不断增加位数,基本就可以把任何情况的信息交流、存储都囊括进计算机能处理的 01 之中了

三、网络协议


image.png

真实的网络世界其也是类似,按照功能划分为了很多层,每一层又有各自的协议

不同标准会把网络划分为不同层数。以 7 层为例

1. 物理层

image.png

从最底层开始 电脑直接需要相连,需要通过光缆、电缆、双绞线、无线电波等方式。 它主要规定了网络的一些电气特性,作用是负责传送 0 和 1 的电信号

2. 数据链路层

单纯的 0 和 1 没有任何意义,必须规定解读方式:多少个电信号算一组?每个信号位有何意义? 这就是「链路层」的功能,它在「物理层」的上方,确定了 0 和 1 的分组方式。

  • 以太网协议:早期的时候,每家公司都有自己的电信号分组方式。逐渐地,一种叫做以太网(Ethernet)的协议,占据了主导地位。以太网规定,一组电信号构成一个数据包,叫做(Frame) 每一帧分成两个部分:标头(Head)和数据(Data) 标头长度固定为 18 字节,数据长度为 64~1500 字节,如果数据过长,就得分割成多个帧进行发送以太网协议

image.png

  • 广播:以太网把数据包向本网络中所有计算机发送,让每台计算机自己判断,是否为接收方 这种发送方式就叫做广播(broadcasting)

  • **MAC地址:**每一块网卡都有一个独一无二的 MAC 地址,长度是 48 个二进制位,通常用 12 个十六进制数表示

MAC Address
00-B0-D0-86-BB-F7

3. 网络层

互联网是由无数层级子网络共同组成的巨形网络,以太网协议只能解决子网络直接的传输  ​

image.png  网络层的作用就是为了引进一套新地址,让不同子网络之间的计算机也能相互联通

  • IP 协议 规定网络地址的协议,叫做 IP 协议。它所定义的地址,就被称为 IP 地址。 目前,广泛采用的是 IP 协议第四版,简称 IPv4 这个版本规定,网络地址由 32 个二进制位组成
Ip Address
172.16.254.1
10101100.00010000.11111110.00000001

习惯上,我们用分成四段的十进制数表示 IP 地址,从 0.0.0.0 一直到 255.255.255.255 ip 地址分为网络主机两个部分 ​

为了区分两个部分,需要使用子网掩码

  • IP 数据包:根据 IP 协议发送的数据,就叫做 IP 数据包 IP数据包包括标头数据,IP 数据包的总长度最大为 65,535 字节 ,标头长度为 20 到 60 字节,数据部分最长为 65,515 字节 

image.png

  • **ARP协议:**ARP 协议用来从 IP 地址得到 MAC 地址,通过 ARP 协议,可以得到同一个子网络内的主机MAC 地址,可以把数据包发送到任意一台主机之上

4. 传输层

有了 MAC 地址和 IP 地址,已经可以在互联网上任意两台主机上建立通信。 一台主机上肯定不会只运行一个程序,数据传输到了电脑,还需要精确到程序,所以需要参数端口(port),表示这个数据包到底供哪个程序(进程)使用「传输层」的功能,就是建立「端口到端口」的通信

相比之下,「网络层」的功能是建立「主机到主机」的通信。只要确定主机和端口,我们就能实现程序之间的交流

  • **UDP 协议:**现在,我们必须在数据包中加入端口信息,这就需要新的协议。最简单的实现叫做 UDP 协议,它的格式几乎就是在数据前面,加上端口号

image.png

  • **TCP 协议:**UDP 协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到

为了解决这个问题,提高网络可靠性,TCP 协议就诞生了。这个协议非常复杂,但可以近似认为,它就是有确认机制的 UDP 协议,每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了

5. 会话层

OSI 会话层,主要功能是用来管理会话,细分为三大功能:

  • 建立连接 A、B 两台电脑要通讯,首先必须建立一条他们之间的连接,OSI 会话层会完成这个步骤
  • 保持连接 连接建立后,当 A、B 通讯完了,A、B 之间的连接不会立刻断开,OSI 会话层会将建立好了的连接维持一段时间不中断,当 A、B 下次还要通讯时,可以直接使用之前建立好的那条连接
  • 断开连接 一般一条连接有一个维持时间,当这条连接的维持时间到了后,OSI 会话层会将该连接自动断开而且 A 或者 B 重启、关机、手动执行断开连接的操作之后,OSI 会话层也会将 A、B 之间的连接断开

6. 表示层

OSI 表示层功能:数据的编码、翻译、压缩、解压缩、加密、解密,将数据翻译为相对应的编码格式,然后展现到应用程序中 ​

7. 应用层

应用层是为用户提供的接口,定义了用户之间的交流方式。应用程序收到「传输层」的数据,接下来就要进行解读

由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读

「应用层」的作用,就是规定应用程序的数据格式

举例来说,TCP 协议可以为各种各样的程序传递数据,比如 Email、WWW、FTP 等等。那么,必须有不同协议规定电子邮件、网页、FTP 数据的格式,这些应用程序协议就构成了「应用层」

image.png

每一层的协议:

物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器) 数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机) 网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器) 传输层:TCP、UDP、SPX 会话层:NFS、SQL、NETBIOS、RPC 表示层:JPEG、MPEG、ASII 应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS

参考: