网络协议大观园
我们这个世界为什么存在这么多语言?如果世界上只有一种语言,那么每个人都不需要学英语了,想想都很美.
相传在远古时候,人们想建造一座高可通天的塔,可以彰显自己的名气,这样也可以防止人们走散之后仍然可以找到回家的路。上帝一看,这可不对,于是设法改变了不同人的口音,这样大家就无法交流,通天塔的建造就此搁浅.
人和人之间说话是通过某种语言来沟通的,比如英语或者汉语。计算机和计算机之间通信也不例外,也需要语言,但这个语言和人类说话的语言稍微不一样,计算机和计算机之间会有不同的功能,不同的功能需要不同的语言,这里的语言往往称为协议.
- 背景
- 什么是网络协议?
- 如何设计网络协议
- 有哪些网络协议
背景
试想一下,如今的互联网由哪些因素组成? 我们大概会想到
- 线缆
- 网络设备 - 交换机,路由器,网卡
- 运营商 - 比如中国电信
- 防火墙
- 终端设备 - 可以是PC, 手机或者任何的智能设备
- 终端设备上的操作系统和应用软件
上面有提到计算机和计算机通信需要协议,那么这个协议到底存在什么地方呢? 答案是操作系统.
网络协议的数量有很多,这里聊聊一些常用的的协议.
什么是网络协议
网络协议是计算机和计算机之间为来完成特定功能进行通信的某种约定.
现在我们知道谈到网络协议有两个概念必须要讨论: OSI和TCP/IP
先说说OSI, OSI是ISO组织制定的一个模型,用来指导网络协议设计. 很明显这个模型是分层的,至于为什么要分层?这个问题本质上和软件要分层是一样的,之前有专门讨论“分解”这个话题. OSI模型的大概分为七层
- 应用层 - 用户直接接触到的,比如电子邮件客户端
- 表示层 - 电子邮件有特定的格式,怎么转换成标准的传输格式呢?
- 会话层 - 发送端什么时候建立连接,什么时候释放连接?
- 传输层 - 这一层只关心数据包如何可靠达到目的地,比如这个包是不是完整的
- 网络层 - 这一层负责认路,比如有几条路,如何更快达到目的地
- 数据链路层 - 将数据帧转换为0/1比特流
- 物理层 - 将0/1比特流转为高低电平
这个模型很难说它是基于哪一个维度进行拆分的。我们对人进行分类,可以基于性别分类:男人和女人,也可以基于地域分类:南方人和北方人, 这很符合直觉。 但我也从中隐约看出了两条线索
- 信息是如何变成高低电平?“Hello World” -> 统一的字符编码 -> 二进制 -> 高低电平
- 信息是如何又快又好的达到目的地?
正如我们所知, OSI并没有称为主流协议,为什么?不实用,或者说不接地气.
后来的事情,大家都知道了, TCP/IP成为主流.
TCP/IP这个名字顾名思义是TCP协议和IP协议,但这个是错觉, TCP/IP是一个协议大家族,是互联网协议的统称, 我们知道的Telnet, ICMP,SSH都属于TCP/IP协议.
但我们更想知道为什么TCP/IP协议胜出了?或者说TCP/IP协议做对了哪些事情? 有以下几个因素
- 开放性 - TCP/IP是由IETF讨论决定的,IETF是一个任何人都可以加入讨论的组织,这充分证明了群众的力量是强大的.
- 实用性 - TCP/IP先有实现,然后才有规范。也就是规范发布出来的时候,已经有操作系统实现了这个协议。而不是像OSI整天在天上飘
TCP/IP 也是基于分层的
- 应用层
- 传输层
- 网络层
- 数据链路层
如何设计一个网络协议
网络协议不可能从天而将,所以需要人来制定,既然是一种沟通工具,那么自然这个工具要符合又快又好的标准了.
- 快
- 让网络的传输变快
- 好
- 安全
- 最好一种协议能解决多个问题,如果不能解决多个问题,那么就聚焦于一个问题
- 简单
- 可以扩展
有哪些网络协议
应用层协议
HTTP
DNS
Ping
PING是应用层直接使用网络层ICMP的一个例子,它没有通过运输层的TCP或UDP. 一个系统允许Ping取决于两个因素,任意一个被禁止就不能被Ping- 内核参数
- 防火墙
如果Ping被禁用,我又想知道远程主机是否还可以连接,那怎么办? 可以通过tcping这个工具来测试某个端口是否开放.
nslookup - 用来测试域名是否可以正常解析
Telnet - 用来进行远程登录
SSH - 安全版的Telnet
传输层协议
- TCP - 让数据可以可靠达到目的地
- UDP - 牺牲正确性换取效率的协议
网络层协议
- ICMP
- traceroute
- ARP
数据链路层协议