简述互联网的层次模型(此处分为五层)
- 应用层(Application Layer)
- 传输层(Transport Layer)
- 网络层(NetWork Layer)
- 链接层(Link Layer)
- 实体层(Physical Layer)
实体层
硬件层,连接电脑的物理手段,规定网络的电气特性,传送 0 和 1 的电信号
链接层
- 以太网协议(Ethernet):确定 0 和 1 数据的分组,一组电信号构成一帧(Frame),每一帧有两部分:标头(Head)和数据(Data)
- 标头:发送者、接收者、数据类型。长度 固定为 18
-
数据:长度为 46~1500
- 标头:发送者、接收者、数据类型。长度 固定为 18
- MAC地址:由 48 个二进制数, 即 12 个十六进制数表示(前 6 个为厂商编号,后 6 个为流水号)
-
广播:在同一个子网络中(我认为这就是局域网(Local Area Network, LAN)),将接收方的 MAC地址 放入标头中,向同一网络中所有计算机发送数据包。每台计算机读取标头的 MAC地址 与自身的 MAC地址 比较,相同则接受,不同则丢弃。
网络层
-
背景:链路层下的以太网协议依靠MAC地址发送数据,只限于同一子网络内传输数据。因此引入一套新的地址,用以区分两台计算机是否处于同一个子网络。这套地址为“网络地址”,简称“网址”。先处理网络地址,再处理MAC地址。
-
IP 协议:规定网络地址的协议叫做 IP 协议,它定义的地址就叫 IP 地址。以下针对 IPv4 协议,即 IP 协议的第四版。
- 表示:IP 地址分成四段表示,每段为一个 0~255 的十进制数,即 8 位二进制数,因此 IP 地址 一共 32 位。
-
分段:IP 地址分成两部分,前一部分代表网络,后一部分代表主机。如果两台处于互联网的主机的 IP 地址 网络部分 相同,则说明这两台主机位于同一个子网络下。
-
假设:如果用前 24 位代表网络,后 8 位代表主机。则前 24 个二进制位:39.105.208 表示网络,后 8 个二进制位:19 表示主机。若在以上假设下有两台互联网主机的 IP 为 39.105.208.19 和 39.105.208.32 ,则说明这两台主机处于同一个子网络。
- 表示:IP 地址分成四段表示,每段为一个 0~255 的十进制数,即 8 位二进制数,因此 IP 地址 一共 32 位。
那么问题来了,只有一个 IP 地址,我们是没法知道它如何分段的。这时需要引入 子网掩码(Subnet Mask)
- 子网掩码
- 表示:子网掩码形式上和 IP 地址相同,用 32 个二进制位表示。
-
区别:子网掩码将 网络部分 的二进制位全部取 1,主机部分的二进制位全部取 0。
-
假设:如果还是用前 24 位代表网络,后 8 位代表主机。则子网掩码为:11111111.11111111.11111111.00000000,十进制表示为:255.255.255.0。若目前已知两个 IP 地址为 39.105.208.19 和 39.105.208.32 ,同时它们的子网掩码为 255.255.255.0 和 255.255.255.0,则说明它们处于同一个子网络。
- 表示:子网掩码形式上和 IP 地址相同,用 32 个二进制位表示。
-
IP 数据包:根据 IP 协议发送的数据叫 IP 数据包,其中自然需要包含 IP 地址信息。IP 数据包会放入 以太网数据包 的数据部分,它不会改变 以太网数据包 的规格。
- IP 数据包标头:包含版本、长度、IP地址等信息。长度为 20~60字节
-
IP 数据包数据:长度最大为 65515。故 IP 数据包 总长度不超过 65535。
-
由于以太网数据包的数据部分最长为 1500,所以如果整个 IP数据包 长度超过了 1500,则要分割成几个以太网数据包分开发送。
- IP 数据包标头:包含版本、长度、IP地址等信息。长度为 20~60字节
- ARP 协议:要完成两台主机间的数据传输,就需要知道接收方的 IP地址 和 MAC地址。一般是已知对方的 IP 地址,但不知道对方的 MAC 地址。所以需要一种由 IP地址得到MAC 地址的机制。而对于两台主机而言,存在两种情况,一种是不在同一个子网络中,另一种是在同一个子网络内。
- 不在同一个子网络:无法得到对方的 MAC地址,只能将数据包传送到对方子网络的网关处,交由 网关(Gateway) 处理。(目标地址:网关 MAC 地址+对方 IP 地址)
-
在同一个子网络:使用 ARP 协议得到对方 MAC地址。(目标地址:对方 MAC 地址+对方 IP 地址)
-
ARP 协议:发出一个数据包,包含在以太网数据包中,其中对方的 MAC 地址填写 FF:FF:FF:FF:FF:FF 表明这是一个 广播地址。在同一子网络的主机都将收到这一数据包,取出其中的 IP地址 信息,和自身 IP地址 进行比较,如果相同,则做出回复,向对方报告自己的 MAC 地址,否则将数据包丢弃。
- 不在同一个子网络:无法得到对方的 MAC地址,只能将数据包传送到对方子网络的网关处,交由 网关(Gateway) 处理。(目标地址:网关 MAC 地址+对方 IP 地址)
传输层
-
背景:在同一台主机上可能同时有多个应用程序在传输数据,此时,当一个数据包发来的时候如何区分它是哪个应用程序的?因此就需要增加一个参数用来区分数据包的目标应用程序(进程),这个参数就是 端口(Port)。
-
端口:一个 0\~65535 的整数,正好 16 个二进制位。0~1023 的端口号被系统占用,传输数据时,应用程序会随机选择一个端口和服务器的对应端口进行通信。系统占用的如:22 号端口用于 SSH 通信,80 号端口用于传输网页。大于 1023 的端口如: 1080 常用于 SOCKS 代理。
-
UDP 协议:在数据包中加入端口信息。
-
数据包:标头主要定义发出端口和接受端口,长度为 8 个字节。整个数据包长度不超过 65535 字节。
- TCP 协议:UDP 协议实现简单但可靠性差,一旦数据发出,无法知道对方是否收到。为提高网络可靠性,从而诞生了 TCP 协议。TCP 协议的数据包格式复杂,通过三次握手建立连接,通过四次握手终止连接。TCP 数据包没有长度限制,但通常不会超过 IP 数据包的长度,以保证效率。
应用层
规定数据部分的数据格式。不同应用程序(电子邮件、浏览器等)传输的数据格式互不相同,每一类应用都有自己的数据格式,规定这些数据格式的协议(IMAP/POP3, IMTP, HTTP, HTTPS等)就组成了应用层。
主要参考来源:https://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html