Skip to content
互联网协议基础

嗯写这一篇的时候我还没学习计网


1. 分层模型

协议

每一层都是为了完成一种功能。为了实现这些功能,就需要大家都遵守共同的规则。

大家都遵守的规则,就叫做"协议"(protocol)。

或者更严谨的说,协议是对等层实体在通讯过程中应该遵循的规则的集合

互联网的每一层,都定义了很多协议。这些协议的总称,就叫做"互联网协议"(Internet Protocol Suite)。它们是互联网的核心,下面介绍每一层的功能,主要就是介绍每一层的主要协议。

互联网的实现是分层的,每一层有不同的功能 根据不同的模型可以分为5层7层等

一种分法如下:

md
stateDiagram
用户 --> 网络
state 网络 {
    应用层 --> 传输层
    传输层 --> 网络层
    网络层 --> 链接层
    链接层 --> 实体层
    实体层 
}
网络 --> 硬件

现在让我们自底向上看

2. 实体层

实体层是最接近硬件的一层,目的是把电脑连接起来的物理手段,它主要规定了网络的一些电气特性,从而规定0和1的电信号的传输

3. 链接层

在实体层之上,规定01如何解读与分组

3.1 以太网协议

一组电信号构成一个数据包,叫做"帧"(Frame),每一帧分成两个部分:标头(Head)和数据(Data) 标头包含数据的一些说明项,包括发送者、接受者、数据类型等

3.2 MAC地址

以太网协议通过MAC地址标识(寻找)发送者和接受者 以太网规定,连入网络的所有设备,都必须具有"网卡"接口。数据包必须是从一块网卡,传送到另一块网卡。 网卡的地址,就是MAC地址,它类似于身份证,在网卡出厂时,就被制作成了"身份证",永远不能改变。 每块网卡的MAC地址都是独一无二的,一般用12个十六进制数表示。 有了MAC地址,就可以定位网卡和数据包的路径了

3.3 广播

尽管知道MAC地址,但如何把信息发给对应的接收方? 以太网的做法并不是把数据包送到对应的接收方,而是向本网络内所有计算机发送,让每台计算机自己判断,是否为接收方 这就是广播(broadcast)

4. 网络层

4.1 诞生

以太网仅限的广播仅限于一个子网络之间 而想要在互联网之间,我们难以合理的区分每个MAC地址属于哪个子网络

网络层由此诞生。 它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。 这套地址就叫做"网络地址",简称"网址"。

4.2 IP协议

规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址

现在主要较多使用的是IP协议第4版(简称IPv4)和IPv6(同样)

习惯上,我们用分成四段的十进制数表示IP地址,从0.0.0.0一直到255.255.255.255

一个IP地址分为两部分,左部分表示网络,右部分表示主机

子网掩码(subnet mask)用于规定哪些是网络部分,它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0

检测

现在我们只需要让两个ip地址分别于子网掩码进行与运算,如果结果相同,则说明在同一个子网中

4.3 IP数据包

IP数据包在以太网的data中,也分为"标头"和"数据"两个部分

现在回到最开始的问题,两个设备传输的时候如何知道MAC地址呢? 如果两个设备不太同一个的子网络的话,一般只能通过网关来处理 否则的话我们可以通过ARP协议,得到对方的MAC地址 ARP协议便利用的是广播

5. 传输层

有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。

接下来的问题是,同一台主机上有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?

我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用,这便是端口

端口是0到216之间的一个整数,其中0到1023的端口被系统占用

"传输层"的功能,就是建立"端口到端口"的通信

5.1 UDP协议

现在我们需要再数据前加入端口信息,最简单的实现叫做UDP协议,它的格式几乎就是在数据前面,加上端口号

UDP数据包,依然是由"标头"和"数据"两部分组成

5.2 TCP协议

UDP协议无法知道数据是否运输成功,TCP协议因此出现

TCP通过三次握手四次挥手以确保数据不会遗失

长度

TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割

6.应用层

应用程序收到"传输层"的数据,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。

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

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

现在整个以太网数据包现在变成了下面这样:

数据包
数据包