网络原理&HTTP协议(上)

作者: 村里的小四
免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责。

0x01 前言

在我们的日常生活中,每天使用着手机通信,每天使用着电脑浏览网页,大家是否想过互联网是如何实现的?互联网的核心是一系列协议,总称为互联网协议。它们对电脑以及各种网络设备如何连接和组网做出了详尽的规定,理解了这些协议,就理解了互联网的原理。

0x02 互联网

互联网的实现分为好几层。每一层都有自己的功能,就像高楼大厦,每一层都是靠地基,一层一层往上建立,每一层都靠下一层支持。用户接触到的只是最上面的一层,也就是应用层。就比如说一栋大厦,在远处你能看到的就是最高层。

如何分层有不同的模型,OSI分为七层。TCP-/P协议群把互联网分为4层。
在这里插入图片描述
如图所示,最底下的一层叫做物理层,越下面的层越靠近硬件,越上面的层,越靠近用户。

0x03 层与协议

每一层都是为了完成一种功能。为了实现这些功能,就需要大家都遵守共同的规则。大家都遵守的规则就叫做协议。互联网的每一层都定义了很多协议,它们是互联网的核心。

3.1 物理层

物理层是协议的最底层,电脑要组网,第一件事就是要先把电脑连起来,可以用光缆、电缆、双绞线等方式。在这一层中,各种媒介中传输的就是比特流,也就是0和1电信号。

3.2 链路层

3.2.1定义
单纯的0和1没有任何意义,必须规定解读方式:多少个电信号算一组?每个信号位有何意义? 这就是链路层的功能,它在物理层的上方,确定了0和1的分组方式。

3.2.2以太网协议
早期的时候,每家公司都有自己的电信号分组方式。逐渐地,一种叫做以太网的协议,占据了主导地位。以太网规定,一组电信号构成一个 数据包,叫做帧。每一帧分成两个部分:标头(Head)和 数据(Data)。

标头 包含数据包的一些说明项,比如 发送者、接受者、数据类型等等;数据则是数据包的具体内容。如果数据很长,就必须分割成多个帧进行发送。
3.2.3 MAC地址
上面提到,以太网数据包的 标头,包含了 发送者和接受者的信息。那么,发送者和接受者是如何标识呢?以太网规定,连入网络的所有设备,都必须具有 网卡 接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。
在这里插入图片描述
每块网卡出厂的时候,都有一个全世界 独一无二 的 MAC 地址,长度是 48 个比特,通常用 12 个 十六进制数 表示。前 6 个十六进制数是厂商编号,后 6 个是该厂商的网卡流水号。有了 MAC地址,就可以 定位网卡和数据包 的路径了。

3.2.4 广播
定义地址只是第一步,后面还有更多的步骤。首先,一块网卡怎么会知道另一块网卡的MAC地址?我们可以通过APR协议,可以解决这个问题。其次,就算有了MAC地址,系统怎样才能把数据包准确送到接收方?

以太网采用了一种很 原始 的方式,它不是把数据包准确送到接收方,而是向本网络内所有 网络设备 发送,让每台网络设备自己判断,是否为接收方。

举个例子:有a,b,c,d,e五台计算机,a向b发送一个数据包,同一个自网络的c,d和e计算机都会收到这个包,它们读取这个包的标头,找到接收方的MAC地址,然后与自身的MAC地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。这种发送方式叫做广播。
有了数据包的定义、网卡的MAC地址、广播的发送方式,链路层就可以在多台计算机之间发送数据了。

3.3网络层

3.3.1 不同一个子网
没有办法直接得到对方的MAC地址,只能把数据包传送到两个子网络连接处的 网关(gateway),让网关去处理。

3.3.2 同一个子网
那么我们可以用ARP协议,得到对方的MAC地址。ARP协议也是发出一个数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的 MAC 地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个 广播 地址。它所在子网络的 每一台主机 ,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就 丢弃 这个包。

3.3.3 网络层的由来
以太网协议,依靠MAC地址发送数据。理论上,单单依靠MAC地址,深圳的网卡就可以找到北京的网卡了,技术上是可以实现的。但是这样有一个重大缺点,以太网采用广播方式发送数据包,所有成员都接收一个包,不仅效率低,而且局限在发送者所在的子网络。

也就是说,如果两台计算机不在同一个 子网络,广播是传不过去的。这种设计是合理的,否则互联网上每一台计算机都会收到所有包,这样是不行的。互联网是无数子网络共同组成的一个巨型网络,必须找到一种方法能够区分哪些MAC地址属于同一个子网络,如果是同一个子网络,就采用广播方式发送。这就导致了 网络层 的诞生。它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做 网络地址,简称 网址。

网络层 出现以后,每台计算机有了两种地址,一种是MAC地址,另一种是 网络 地址。两种地址之间没有 任何联系 ,MAC地址是绑定在 网卡上 的,网络地址则是系统自动分配的或者管理员指定,它们只是随机组合在一起。

3.3.4 IP协议
规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址。它所定义的地址,就被称为IP地址。目前,广泛采用的是IP协议第四版,简称IPv4。这个版本规定,网络地址由 32 个二进制位组成。用分成 四段 的 十进制 数表示IP地址,从0.0.0.0一直到 255.255.255.255。

互联网上的每一台网络设备,都会分配到一个IP地址。这个地址分成两个部分,前一部分 代表网络,后一部分 代表主机。比如,IP地址 172.16.254.1,这是一个32位的地址,假定它的网络部分是前24位(172.16.254),那么主机部分就是后8位(最后的那个1)。处于同一个子网络的电脑,它们IP地址的网络部分必定是相同的,也就是说172.16.254.2应该与172.16.254.1处在同一个子网络。

但是,问题在于单单从IP地址,我们无法判断网络部分。还是以172.16.254.1为例,它的网络部分,到底是前24位,还是前16位,甚至前28位,从IP地址上是看不出来的。

判断两台计算机是否属于同一个子网络要用到另一个参数 子网掩码子网掩码,就是表示 子网络特征 的一个参数。它在形式上等同于IP址,也是一个32位二进制数字,它的网络部分全部为 1 ,主机部分全部为 0 。

比如,IP地址172.16.254.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。
知道 子网掩码,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与 子网掩码 分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。

比如,已知IP地址172.16.254.1和172.16.254.233的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,结果都是172.16.254.0,因此它们在同一个子网络。

3.3.5 IP数据包
根据IP协议发送的数据,就叫做IP数据包。不难想象,其中必定包括IP地址信息。但是前面说过,以太网数据包只包含MAC地址,并没有IP地址的栏位。我们不需要修改数据定义,我们可以把IP数据包直接放进以太网数据包的 数据部分,因此完全不用修改以太网的规格。这就是互联网分层结构的好处:上层的变动完全不涉及下层的结构,具体来说,IP数据包分为标头和数据两个部分。

Head Data
标头 部分主要包括 版本、长度、IP地址 等信息,数据部分则是 IP数据包 的具体内容。它放进以太网数据包后,以太网数据包就变成了下面这样。

Head Head Data

3.3.6 ARP协议
因为IP数据包是放在以太网数据包里发送的,所以我们必须同时知道两个地址,一个是对方的MAC地址,另一个是对方的IP地址。通常情况下,对方的IP地址是已知的,但是我们不知道它的MAC地址。所以,我们需要一种 机制 ,能够从IP地址得到MAC地址。

3.4 传输层

3.4.1传输层的由来
有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。同一台主机上有许多 程序 都需要用到网络,比如,一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示 网页的内容,还是表示 在线聊天 的内容?

我们还需要一个 参数 ,表示这个数据包到底供哪个程序(进程)使用。这个参数就叫做 端口(port),它其实是每一个 使用网卡的程序的编号。每个 数据包 都发到主机的 特定端口 ,所以不同的程序就能取到自己所需要的数据。端口是0到65535之间的一个整数,正好16个二进制位。

传输层 的功能,就是建立 端口到端口 的通信。相比之下,网络层 的功能是建立 主机到主机 的通信。只要确定 主机 和 端口,我们就能实现程序之间的交流。 主机+端口,叫做 套接字(socket)。有了它,就可以进行网络应用程序开发了。

3.4.2 UDP协议
现在,我们必须在数据包中加入端口信息,这就需要新的协议。最简单的实现叫做UDP 协议,它的格式几乎就是在 数据前面,加上端口号。UDP 数据包,也是由 标头 和 数据两部分组成。

Head Data

标头 部分主要定义了 发出端口 和 接收端口,数据 部分就是具体的内容。然后,把整个UDP数据包放入IP数据包的 数据 部分,而前面说过,IP数据包 又是放在 以太网数据包之中的,所以整个以太网数据包现在变成了下面这样:
Head Head Head Data

UDP 数据包非常简单,标头 部分一共只有 8 个字节,总长度不超过 65,535 字节,正好放进一个IP数据包。

3.4.3 TCP协议
UDP 协议的优点是比较 简单,容易实现,但是 缺点 是 可靠性较差,一旦数据包发出,无法知道对方是否收到。为了解决这个问题,提高网络可靠性,TCP协议就诞生了但可以近似认为,它就是有 确认机制 的UDP协议,每发出一个数据包都要求 确认。如果有一个数据包 遗失,就收不到 确认,发出方就知道有必要 重发 这个数据包了。
因此,TCP协议能够确保数据 不会遗失。它的 缺点 是过程 复杂、实现困难、消耗较多的资源。TCP 数据包和 UDP 数据包一样,都是内嵌在IP数据包的 数据 部分。

3.5 应用层

应用程序 收到 传输层 的数据,由于互联网是开放架构,数据来源五花八门,必须事先规定好 格式,否则无法解读。应用层 的作用,就是规定应用程序的数据格式。这是 最高 的一层,直接面对用户。它的数据就放在TCP数据包的 数据 部分。

0x04 总结

0x05 了解更多安全知识

欢迎关注我们的安全公众号,学习更多安全知识!!!
欢迎关注我们的安全公众号,学习更多安全知识!!!
欢迎关注我们的安全公众号,学习更多安全知识!!!
在这里插入图片描述

Guess you like

Origin blog.csdn.net/weixin_42282189/article/details/120327765