欢迎回到《Gin Web 后端开发》系列文章,在上一篇 Gin -- 从打开 .txt 文件说起 文章中留下了两个问题,我们继续。通过之前讲到的记事本读取文件的原理,我们知道在浏览器地址栏输入 URL 来访问某个页面其实就是读取某个 HTML 文件,只不过这个 HTML 文件存储在某台远程服务器上。如下图所示:
文件在本地电脑上有操作系统提供的文件读写接口,现在文件在远程的服务器上,我要读取它,怎么办?
别担心,学校开了一门《计算机网络》课程。
之前也讲过,计算机底层都是二进制的世界,任何数据最后都将变成由 0、1 组成的二进制数据串。两台主机如果要进行网络通讯,必须安装网卡硬件设备、网卡驱动程序,由操作系统给驱动程序发出指令,控制网卡硬件设备实现收发 0、1 组成的二进制数据串。网卡驱动程序若收到 0 则驱动网卡硬件设备发送一个低电平信号;若收到 1 则发送一个高电平信号,从而形成高低起伏的波通过网线发送给另一个网卡设备。另一个网卡硬件设备用相反的方式进行接收解析。如下图所示:
网络硬件设备在出厂前就有一个全球唯一的 MAC 地址,类似于我们的身份证号码一样,网络中存在着数不清的网络设备,设备之间要进行通讯必须依赖 MAC 地址进行。 如图,网卡设备 A 向全网发出一个广播消息,消息中带有源 MAC 地址,目标 MAC 地址,以及要传输的数据。其他网卡设备收到广播消息后取出目标 MAC 地址进行判断,若是发给自己的则回复源 MAC 地址,若不是直接丢弃。然而,这种方式有个非常大的问题,那就是每一个网卡必须知道全网所有网卡设备的 MAC 地址才能进行广播,否则肯定会有遗漏。而世界上有 2 的 48 次方个 MAC 地址,假设一个 MAC 地址留 1 字节存储空间,那也需要 256TB 的存储空间,这是不现实的。为了解决这个问题,人们想了一个办法,就是把网络划分成很多个子网。例如发一个包裹给某个人,可以将包裹发给省集散中心,由省集散中心发给市集散中心,逐步分解到快递员派送。每个集散中心的辖区的数量是可接受范围的,而这一套机制就是我们的IP地址。至于怎么实现,就不详细描述,就是将IP地址划分成 A、B、C 三类地址,子网掩码的计算,以及 ARP 协议,大家可以翻翻教科书。
现在我们知道通过 IP 可以找到想要访问的服务器,但不管是个人电脑还是服务器,都运行着各种各样的程序,数据的传输是通过同一个网卡进行,谁知道传输的信息是给哪个程序的呢?例如,我一边玩 LOL 一边聊微信,突然游戏中的聊天内容出现在微信聊天窗口里面了,那不是全乱套了。 端口就是用来实现“端到端”的数据通信。回到浏览器打开网页操作,我们采用 Nginx 服务来接收浏览器发出的请求,该服务默认监听 80 端口,浏览器发起的 HTTP 请求交由 Nginx 进行处理,Nginx 将 index.html 文件内容发送给浏览器,浏览器收到后将文件内容展示出来。通过 IP 找到主机已经能够理解,不过 IP 非常难记忆,为了方便记忆,就将 IP 与域名做一个映射关系,之后就可以直接通过输入域名来访问网站了。
所以别没事瞎提问题,搞不好就给学生加了一门课程。
01 怎么通过网线传输数据
之前也讲过,计算机底层都是二进制的世界,任何数据最后都将变成由 0、1 组成的二进制数据串。两台主机如果要进行网络通讯,必须安装网卡硬件设备、网卡驱动程序,由操作系统给驱动程序发出指令,控制网卡硬件设备实现收发 0、1 组成的二进制数据串。网卡驱动程序若收到 0 则驱动网卡硬件设备发送一个低电平信号;若收到 1 则发送一个高电平信号,从而形成高低起伏的波通过网线发送给另一个网卡设备。另一个网卡硬件设备用相反的方式进行接收解析。如下图所示:
02 有了 MAC 地址,为啥还要 IP 地址
网络硬件设备在出厂前就有一个全球唯一的 MAC 地址,类似于我们的身份证号码一样,网络中存在着数不清的网络设备,设备之间要进行通讯必须依赖 MAC 地址进行。 如图,网卡设备 A 向全网发出一个广播消息,消息中带有源 MAC 地址,目标 MAC 地址,以及要传输的数据。其他网卡设备收到广播消息后取出目标 MAC 地址进行判断,若是发给自己的则回复源 MAC 地址,若不是直接丢弃。然而,这种方式有个非常大的问题,那就是每一个网卡必须知道全网所有网卡设备的 MAC 地址才能进行广播,否则肯定会有遗漏。而世界上有 2 的 48 次方个 MAC 地址,假设一个 MAC 地址留 1 字节存储空间,那也需要 256TB 的存储空间,这是不现实的。为了解决这个问题,人们想了一个办法,就是把网络划分成很多个子网。例如发一个包裹给某个人,可以将包裹发给省集散中心,由省集散中心发给市集散中心,逐步分解到快递员派送。每个集散中心的辖区的数量是可接受范围的,而这一套机制就是我们的IP地址。至于怎么实现,就不详细描述,就是将IP地址划分成 A、B、C 三类地址,子网掩码的计算,以及 ARP 协议,大家可以翻翻教科书。
03 那为啥又要端口
现在我们知道通过 IP 可以找到想要访问的服务器,但不管是个人电脑还是服务器,都运行着各种各样的程序,数据的传输是通过同一个网卡进行,谁知道传输的信息是给哪个程序的呢?例如,我一边玩 LOL 一边聊微信,突然游戏中的聊天内容出现在微信聊天窗口里面了,那不是全乱套了。 端口就是用来实现“端到端”的数据通信。回到浏览器打开网页操作,我们采用 Nginx 服务来接收浏览器发出的请求,该服务默认监听 80 端口,浏览器发起的 HTTP 请求交由 Nginx 进行处理,Nginx 将 index.html 文件内容发送给浏览器,浏览器收到后将文件内容展示出来。通过 IP 找到主机已经能够理解,不过 IP 非常难记忆,为了方便记忆,就将 IP 与域名做一个映射关系,之后就可以直接通过输入域名来访问网站了。
欢迎在评论区进行交流,喜欢的话点个赞哦!
其实现在也就20几个粉丝,一大部分还不是搞技术的,好忧伤,再接再厉!