互联网分为若干层,上层结构更改影响不了下层结构。
互联网的每一层,都定义了很多协议。这些协议的总称,就叫做 "互联网协议"(Internet Protocol Suite)
clipboard.png

一、实体层
用物理手段(光缆、电缆)将电脑连接起来,负责传递 0 和 1 的电信号。

二、链接层
负责解析电信号,确认 0 和 1 的分组。

2.1 以太网协议
以太网协议来规定电信号的分组方式,一组电信号构成一个数据包,叫做 "帧"(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。

clipboard.png

"标头" 包含数据包的一些说明项,比如发送者、接受者、数据类型等等;"数据" 则是数据包的具体内容。
"标头" 的长度,固定为 18 字节。"数据" 的长度,最短为 46 字节,最长为 1500 字节。因此,整个 "帧" 最短为 64 字节,最长为 1518 字节。如果数据很长,就必须分割成多个帧进行发送。

2.2 MAC 地址(标识发送者和接受者)
以太网规定每块网卡出厂都携带独有的 MAC 地址,长度是 48 个二进制位,通常用 12 个十六进制数表示。

2.3 广播的形式
以太网以广播的形式将数据包在本网络内向所有计算机发送,让目标计算机接受读取数据包「标头」与自身 MAC 地址相匹配,相同则接受作下一步操作。

clipboard.png

三、网络层
互联网是无数子网络共同组成的一个巨型网络。如果两台计算机不在同一子网络下,广播就起不来作用了,只能采用 "路由" 方式发送。
于是出现了由管理员分配的网络地址来确认计算机所处的子网络,MAC 地址则将数据包送到该子网络中的目标网卡,逻辑上可以推断,必定是先处理网络地址,然后再处理 MAC 地址。
它与 MAC 地址之间没有任何联系,只是随机组合在一起。

3.1 IP 协议(规定网络地址【由 32 个二进制位组成】的协议)
IP 协议的作用主要有两个,一个是为每一台计算机分配 IP 地址,另一个是确定哪些地址在同一个子网络。

clipboard.png

习惯上,我们用分成四段的十进制数表示 IP 地址,从 0.0.0.0 一直到 255.255.255.255。
互联网上的每一台计算机,都会分配到一个 IP 地址。这个地址分成两个部分,前一部分代表网络,后一部分代表主机,处于同一子网络的 IP 地址的网络部分必然相同,但单从 IP 地址是无法判断网络部分的。

3.2 子网编码
这是需要另一个参数 "子网掩码"(subnet mask)来判断,它是表示子网络特征的一个参数,形式上等于 IP 地址,也是 32 位二进制数字,,它的网络部分全部为 1,主机部分全部为 0。比如,IP 地址 172.16.254.1,如果已知网络部分是前 24 位,主机部分是后 8 位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是 255.255.255.0。

3.3 IP 数据包(由 IP 协议发送的数据,包含 IP 地址信息)
以太网数据包只包含 MAC 地址,IP 数据包无需更改它数据定义或添加新的栏位,而是可以直接放进它的「数据」部分,这就是互联网分层结构的好处:上层的变动完全不涉及下层的结构。

clipboard.png

IP 数据包的 "标头" 部分的长度为 20 到 60 字节,整个数据包的总长度最大为 65,535 字节。因此,理论上,一个 IP 数据包的 "数据" 部分,最长为 65,515 字节。前面说过,以太网数据包的 "数据" 部分,最长只有 1500 字节。因此,如果 IP 数据包超过了 1500 字节,它就需要分割成几个以太网数据包,分开发送了。

3.4 ARP 协议
IP 数据包是放在以太网数据包里发送的,所以我们必须同时知道两个地址,一个是对方的 MAC 地址,另一个是对方的 IP 地址。通常情况下,对方的 IP 地址是已知的,但是我们不知道它的 MAC 地址,我们需要一种机制,能够从 IP 地址得到 MAC 地址。
有两种情况,一是如果两台主机不在同一子网络下,那么无法得到对方 MAC 地址,只能将数据包传送到两个子网络连接处的 "网关"(gateway),让网关来处理。
二是若是在同一子网络下,可以用 ARP 协议得到 MAC 地址,广播出一个携带所查询的 IP 地址的数据包(以太网数据包里),在对方的 MAC 地址栏填写 FF:FF:FF:FF:FF:FF,表示是个广播地址,同子网络的主机接受后取出其中的 IP 地址与自身的作比较,相同则报告自己的 MAC 地址,否则丢包。

四 传输层
功能是建立 "端口到端口" 的通信。相比之下,"网络层" 的功能是建立 "主机到主机" 的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix 系统就把主机 + 端口,叫做 "套接字"(socket)。有了它,就可以进行网络应用程序开发了。
同台主机下运行多个联网的程序,如何保证数据不走错地方?我们需要「端口」来确认该数据包供哪个程序(进程)使用。

4.1 端口
端口是 0 到 65535 之间的一个整数,正好 16 个二进制位。0 到 1023 的端口被系统占用,用户只能选用大于 1023 的端口,每个应用程序会随机选用一个端口,然后与服务器的相应端口联系。

4.2 UDP 协议(格式是数据前面加端口号)
"标头" 部分(只有 8 个字节,总长度不超过 65,535 字节,正好放进一个 IP 数据包)主要定义了发出端口和接收端口,"数据" 部分就是具体的内容。然后,把整个 UDP 数据包放入 IP 数据包的 "数据" 部分,而前面说过,IP 数据包又是放在以太网数据包之中的,所以整个以太网数据包现在变成了下面这样:

clipboard.png

4.3 TCP 协议(有确认机制的 UDP 协议)
UDP 协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。
而 TCP 协议能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。
TCP 数据包和 UDP 数据包一样,都是内嵌在 IP 数据包的 "数据" 部分。TCP 数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常 TCP 数据包的长度不会超过 IP 数据包的长度,以确保单个 TCP 数据包不必再分割。

五 应用层(规定应用程序的数据格式)
TCP 协议可以为各种各样的程序传递数据,比如 Email、WWW、FTP 等等。那么,必须有不同协议规定电子邮件、网页、FTP 数据的格式,这些应用程序协议就构成了 "应用层"。
直接面对用户,它的数据就放在 TCP 数据包的 "数据" 部分。

clipboard.png


Gnahzi
5 声望0 粉丝