协议是事先达成的约定。
对母语不同的人来说,手语就是一种天然的协议。
1 电路交换、报文交换和分组交换
电路交换的代表是传统电话。拨号接通后,电路独占,仅供通话双方使用,发送数据不再需要地址,即使没有通话,闲置电路也不能挪作他用。
报文交换比电路交换多了发送接收的地址,双方不必直连,借助节点中转不致迷失方向。倘若节点中断,还能迂回传输。
分组交换是报文交换的升级版。它将一份报文分成若干组,每组数据都有地址和组号,于是多份报文可以分时租赁一条线路,你来一发,我来一发,和谐共生。
2 ARPANET & NSFNET
1969 年,为了试验分组交换技术,军方机构 ARPA (Advanced Research Projects Agency) 联合四所大学搭建了 ARPANET ,它是全球互联网的鼻祖。 1975 年, ARPANET 正式运行。网络互联技术的不断发展孕育了 TCP/IP 。 TCP/IP 不是一个协议,而是 TCP 、 IP 、 HTTP 等一大堆协议的集合,因此常称“ TCP/IP 协议簇”。 1983 年, TCP/IP 已经覆盖 ARPANET 内所有主机。原本各自为政的大厂商们不得不顺应形势向 TCP/IP 靠拢,而军方专用网络则从 ARPANET 中剥离。 1986 年,国家科学基金会 (NSF, National Science Foundation) 利用 ARPANET 的技术建立了 NSFNET ,海纳百川,仅用 4 年时间便取代 ARPANET 成为全球互联网的主干。
3 OSI
TCP/IP 一统江湖之后, ISO 钦定的标准,开放系统互联参考模型 (OSI, Open System Internetwork Reference Model) 才于 1985 年姗姗来迟。 这里 OSI 指的是 OSI 模型。 OSI 模型只有粗略界定,没有详细设计。基于 OSI 模型做了详细设计的才算 OSI 协议。遵循 OSI 协议的产品称为 OSI 产品。遵循 OSI 协议的通信称为 OSI 通信。概念不能混淆。 尽管 OSI 协议至今没能普及,但 OSI 模型仍不失为一块学习网络的好材料。
OSI 模型共有 7 层。
什么是层?为什么要分层?我们不妨把 OSI 模型看作一个类,那么层就是它的成员函数。层函数是一个处理过程,有输入有输出,还有共轭反函数。处理时,发送端的降层函数 desc_xxx 会附加本层的 head ,接收端的升层函数 asc_xxx 会剥离本层的 head 。信息先层层附加,再层层剥离,最终还原。
S-USER
v -- hello
S-LYR7
v -- head_7|hello
S-LYR6
v -- head_6|head_7|hello
S-LYR5
v -- head_5|head_6|head_7|hello
S-LYR4
v -- head_4|head_5|head_6|head_7|hello
S-LYR3
v -- head_3|head_4|head_5|head_6|head_7|hello
S-LYR2
v -- head_2|head_3|head_4|head_5|head_6|head_7|hello
S-LYR1
v -- head_1|head_2|head_3|head_4|head_5|head_6|head_7|hello
R-LYR1
v -- head_2|head_3|head_4|head_5|head_6|head_7|hello
R-LYR2
v -- head_3|head_4|head_5|head_6|head_7|hello
R-LYR3
v -- head_4|head_5|head_6|head_7|hello
R-LYR4
v -- head_5|head_6|head_7|hello
R-LYR5
v -- head_6|head_7|hello
R-LYR6
v -- head_7|hello
R-LYR7
v -- hello
R-USER
层越低越接近硬件,层越高越接近软件。
4 TCP/IP
高层函数所做的事情本就难以分割,合并它们不仅不会影响最终效果,还会更加简洁。
OSI 更强调理论,即应然; TCP/IP 更强调实践,即实然。
TCP/IP 由 IETF 讨论制定,每篇讨论稿都有 RFC 编号,相同命题的讨论稿由相同的 STD 编号收录。 这里 罗列了全部历史讨论稿。
本文只讲 TCP/IP 各层的主干协议。
4.1 数据链路层
数据链路层实现的是同一数据链路内的直连节点之间的通信,信息传输的基本单位是帧 frame 。
帧的源地址和目标地址是 MAC 地址。 MAC 地址主要由厂商外码和厂商内码两部分构成,直接烧录在网卡上,全球唯一(也有例外,但在同一数据链路内 MAC 地址必定唯一)。
不同数据链路的帧的最大容量 (MTU, Max Transimssion Unit) 不同。最著名的数据链路以太网,它的帧的最大容量是 1500 字节。
以太网类型的标识形如
???BASE-??
。 BASE 前的数值表示传输速率,单位 bps(bit per second),如 10(M) 、 100(M) 、 1000(M) 、 1G 、 10G 等, 注意传输速率不是二进制, 1G 就是 1000M 。 BASE 后的字母表示传输介质,如 T 表示双绞线。 IEEE802.3 负责标准化各种类型的以太网。电子电气工程师协会 IEEE802 因成立于 1980 年 2 月而得名。旗下有二十多个分会,其中 IEEE802.3 是局域网标准委员会。
4.2 网络层
网络层实现的是不同数据链路间的非直连节点之间的通信,网络层的信息传输的基本单位是包 packet 。
包的目标地址和源地址是 IP 地址。 IP 地址由网络地址和主机地址两部分构成,现在一般用子关掩码标识分隔。
IPv4: 11000000 10101000 10000000 00001010 (192.168.128._10)
MASK: 11111111 11111111 11111111 00000000 (255.255.255.__0)
|-------- network -------| |-host-|
192.168.128.10/24
是另一种写法,/24
表示前 24 位是网络地址。以 0 结尾的 IP 地址172.20.0.0/16
可以简写成172.20/16
。
为彻底解决 IPv4(32bit) 地址枯竭的问题, IPv6(128bit) 每 16bit 一组用 16 进制表示,以 :
隔开。连续 0 允许省略。
What happened to IPv5?
Version 5 of the IP family was an experimental protocol developed in the 1980s. IPv5 (also called the Internet Stream Protocol) was never widely deployed, and since the number 5 was already allocated, this number was not considered for the successor to IPv4. Several proposals were suggested as the IPv4 successor, and each was assigned a number. In the end, the one with version number 6 was selected.
网络管理员依据动态主机分配协议 (DHCP, Dynamic Host Configuration Protocol) 为每台主机分配 IP 地址,该地址可以是永久的(下次上线不更换地址),也可以是临时的(下次上线更换地址)。互联网名称与数字地址分配机构 (ICANN, The Internet Corporation for Assigned Names and Numbers) 是最大的网络管理员,域名也归它管理。
主机依据地址解析协议 (ARP, Address Resolution Protocol) 向数据链路广播自身的 MAC 与 IP 地址,并缓存其它主机的 MAC 与 IP 地址。
ARP 只适用于 IPv4 , IPv6 用 ICMPv6 代替。
从发送到接收,包往往要经历多个传输区间。一个传输区间称为一跳 (1 Hop) 。 IP 路由就是元素为跳的有向链表。每跳仅在起跳时指定本跳的方向,不必列出此后全部通路。包在发送之前并不会建立连接,即使目标主机不在线或不存在,也一样会被发送出去。由于每一跳的最大容量可能不同,数据包从大容量链路进入小容量链路只能分片,因此首个数据包负责探路,返回 全部链路的最大容量的最小值 ,以它为准,发送剩余数据包。
有了路由的概念,我们就能更准确地分辨节点、主机、网关。
- 节点:有 IP 地址。
- 主机:有 IP 地址,无路由控制。
- 网关:有 IP 地址,有路由控制。又称路由器、三层交换机。
网络层只服务不验证,验证是传输层的事。为什么不合二为一?因为太难了。
4.3 传输层
传输层的信息传输的基本单位是段 segment 。
与数据链路层、网络层一样,传输层也有专用地址,端口 port 。
4.4 应用层
略