我们每天都使用的互联网,空间相距遥远的两台计算机是如何实现通信的呢?以下是我的学习笔记。
一、概述
网络的五层模型,由下至上越接近用户,相反越接近硬件 |
---|
应用层(Application Layer) |
传输层(Transport Layer) |
网络层(Network Layer) |
链接层(Physical Layer) |
实体层(Physical Layer) |
每一层都有自己的职责与功能以及且必须遵守各自规则,这就叫做"协议”(protocal)。 |
二、实体层
实体层最容易理解,就是指物理硬件电脑。要相互通信就得把他们连起来咯,手段就是物理手段”光缆、电缆、无线电波“等方式。
实体层主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。
三、链接层
3.1 定义 单纯的0和1没有任何意义,必须规定解读方式:多少个电信号算一组?每个信号位有何意义?
这就是"链接层"的功能,它在"实体层"的上方,确定了0和1的分组方式。
3.2 以太网协议 分组方式这就引出了以太网协议,它规定一组电信号构成一个数据包,叫做“帧”(Frame)。每一帧分为两个部分:
- 标头(Head) 包含数据包的说明项,比如发送者、接收者、数据类型等等
- 数据(Data) 数据包的具体内容
3.2 Mac地址 数据包有了,那么发送者接收者如何标志呢?以太网规定,连入网络的所有设备必须具有“网卡”接口,通过网卡来确定消息的发送和接收者。这就是Mac地址。且每块网卡出厂时都有全世界独一无二的Mac地址,通常用12个十六进制数表示,如“00-B0-D0-86-BB-F7”。
3.2 广播 地址有了,那发送者的网卡如何知道接受者的网卡地址呢?ARP协议可以解决这个问题,以太网数据包必须知道接收方的Mac地址然后才能发送。其次怎样将数据包准确的发送给接收者呢?以太网采用了很“原始的方式”,就是向本网络所有计算机发送,让每台计算机自己通过数据包标头内的接受者Mac地址是否是自己的Mac地址。是则接收处理,否则丢弃这个包。这种发送方式就叫做“广播”。 有了数据包的定义、网卡的MAC地址、广播的发送方式,"链接层"就可以在多台计算机之间传送数据了。
四、网络层
4.1 网络层的由来 以太网协议,依靠MAC地址发送数据,是在两台计算机处于同一个子网络来发送的,互联网是无数个子网络组成的巨型网络。因此必须有个方法来区分哪些Mac地址是处于同一个子网络,如何是同一个子网络则采用广播方式,否则采用“路由”方式。但是Mac地址无法做到这一点,它只与厂商有关,与网络无关。
这就导致了"网络层"的诞生。它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做"网络地址",简称"网址"。于是"网络层"出现以后,每台计算机有了两种地址
- MAC地址 (将数据包送到该子网络中的目标网卡)
- 网络地址 (帮助我们确定计算机所在的子网络)
4.2 IP协议 规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址。习惯上,我们用分成四段的十进制数表示IP地址,从0.0.0.0一直到255.255.255.255。所以IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。
4.2 IP数据包 根据IP协议发送的数据,就叫做IP数据包。不难想象,其中必定包括IP地址信息。但是前面说过,以太网数据包只包含MAC地址,并没有IP地址的栏位。那么是否需要修改数据定义,再添加一个栏位呢?回答是不需要,我们可以把IP数据包直接放进以太网数据包的"数据"部分,因此完全不用修改以太网的规格。这就是互联网分层结构的好处:上层的变动完全不涉及下层的结构。
五、传输层
5.1 传输层的由来 有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。 接下来的问题是,同一台主机上有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容? 也就是说,我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用。这个参数就叫做"端口"(port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。
"传输层"的功能,就是建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。
5.2 TCP协议 现在,我们必须在数据包中加入端口信息,这就需要新的协议。最简单的实现叫做UDP协议,优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。为了解决这个问题,提高网络可靠性,TCP协议就诞生了。这个协议非常复杂,但可以近似认为,它就是有确认机制的UDP协议。TCP数据包和UDP数据包一样,都是内嵌在IP数据包的"数据"部分。
六、应用层
应用程序收到"传输层"的数据,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。
"应用层"的作用,就是规定应用程序的数据格式。
举例来说,TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了"应用层"。应用层是最接近用户的层,如我们浏览网页用的是HTTP协议,http请求数据包首先嵌入TCP数据包,TCP数据包再嵌入IP数据包,最后IP数据包嵌入以太网数据包。服务器一层层拼接数据包读出里面的"HTTP请求",接着做出"HTTP响应",再用TCP协议发回来。再用TCP协议发回来。本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信。