全世界几十亿台电脑/手机,能够通过网络一起进行通讯,这么神奇的事情是怎么做到的?
先从简单的开始分析,两台电脑要进行通讯,需要怎么做?
我们需要通过“物理媒介”(光缆/电缆/无线电波)把两者连接起来。而物理媒介可以传输“物理信号”(电压/振幅等)。
物理信号传递什么信息呢?
比如电压,高压表示1,低压表示0。那么高/低压代表1/0,这也就是基础物理信号所代表的意义,需要制定协议。
这就是实体层
,它就是把电脑连接起来的物理手段,主要规定了一些物理特性,作用负责传递0和1的电信号。
物理信号—(协议)—>电信号
0/1电信号,没有任何意义,怎么传递信息?
单纯的0/1的确没有意义,我们需要制定规则来赋予它意义。
比如,我们制定电信号的基本数据结构为“帧”(Frame),以帧为单位进行数据传输。
我们规定0/1的某种组合代表,帧的开始和结束、帧的标头Head(包含发送者/接受者/数据类型 信息)、帧的数据Body,这也就形成了一个有基本结构的数据包。
这就是 连接层
,它把电信号的基本数据结构进行了规则制定。发送者和接受者都按照规定来解读固定结构的电信号。
电信号—(以太网协议)—>有基本结构的数据包
数据包基本结构中标头Head内包含的“发送者/接受者”信息是怎么确定的?
每台电脑要上网都需要“网卡”,数据包就是通过网卡接入/传出的。每一块网卡,都有一个独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。网卡就像是我们的门牌号。
我的网卡只知道接收者网卡的MAC地址,怎么知道接收者的位置信息,把数据包传给它呢?
我的网卡会向本网络所有计算机发送数据包(广播),让每台计算机自己判断,是否为接收方,它们读取这个数据包的“标头”,把MAC地址进行对比,来选择接受/丢弃 数据包。
连接层通过“网卡MAC地址”与“广播方式”发送数据包,这样效率太低了。为了效率更高,我们又规定了一个新的地址系统,以网络地址表示门牌号。
IP协议:该地址系统就是IP协议,他所定义的地址就是IP地址。目前广泛应用的是IP协议第四版,简称IPv4,这个版本规定,网络地址由32个二进制位组成。
IP协议功能简单理解:
1、互联网上的每台计算机都会被分配一个IP地址。
2、确定哪些地址在同一网络。通过IP地址和子网掩码可以计算出网络地址和主机号。若两个IP的网络地址相同,主机号不同,则处于同一子网中。
IP数据包:根据IP协议发送的数据包,叫IP数据包。IP数据包是在“以太网数据包”的Body数据部分内进行定义(因此完全不用修改以太网的规格。这就是互联网分层的好处,上层的变动不涉及下层的结构),其标头Head内的发送者/接收者是IP地址了,不是MAC地址了。
这就是 网络层
,他制定了新的地址系统(IP地址系统)。IP地址是由路由网关分配的,我发送数据包,不再是给每一台计算机发送了。而是给网关发送,网关X确定是发送给自己网内计算机的,再分发给该IP计算机,提高了效率。
有了MAC地址和IP地址,我们已经可以让网络上任意两台主机建立通信。接下来的问题是,同一台主机上有许多程序都需要用到网络,比如一边浏览网页,一边qq聊天,当一个数据包,从互联网发来的时候,我们需要一个参数来确定这个数据包到底供哪个程序(进程)使用,这个参数就叫“端口”,他其实是每一个使用网卡的程序的编号,每一个数据包发送到主机特定端口,所以不同的程序就能取到自己所需的数据。
端口:是0~65535之间的一个整数,正好16个二进制位。0~1023的端口被系统占用,用户只能选用大于1023的端口。不管聊天还是浏览网页,应用程序会随机选用一个端口,然后与服务器的响应端口联系。
这就是传输层
,建立“端口”到“端口”的通信。相比之下,“网络层”的功能是建立主机到主机的通信。只要确定“主机”和“端口”,我们就能实现程序之间的交流。因此,Uinx系统就把主机和端口叫做“套接字”(socket)。有了它就可以进行网络应用开发了。
UDP协议:我们现在必须在数据包中加入端口信息,这就需要新的协。UDP协议,标头部分主要定义了“发出端口/接受端口”,数据部分就是具体的内容,让后把整个UDP数据包放入IP数据包的数据Body部分。
TCP协议:UDP协议简单,但可靠性差,数据包发出后,无法知道对方是否接收到。于是TCP协议诞生,它发出的每一个数据包,都要求确认,如果有一个数据包丢失,就收不到确认,发出方就知道有必要重发这个数据包。因此TCP协议能确保数据包不会丢失,缺点是过程复杂,实现困难,消耗资源多。
传输层应用程序收到“传输层的数据”,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。
举例来说,TCP协议可以为各种个样的程序传递数据,比如Email、WWW、FTP等。那么,必须有不同协议规定电子邮件、网页、FTP的数据格式,这些应用程序协议就构成了应用层。
这就是应用层
,最高的一层,直接面对用户。它的数据就放在TCP数据包的数据Body部分。因此,现在的以太网的数据包就变成了下面这样。
小结:
网络上的传递的数据包,基本上就是经过这几个层的包装。
网络通讯就是交换数据包,发送数据包需要知道两个地址:
1、MAC地址。
2、对方IP地址。
若两台电脑在同一个子网中,若接受方确定IP符合,会向对方报告自己的MAC地址。
若两台电脑不在同一个子网中,就无法知道对方的MAC地址,必须把数据包通过网关A(需要知道网关A的MAC地址)转发。路由协议,发现目标IP位于子网络B中,又把数据包发给网关B,网关B再把数据包转发给相应主机。
我们上网需要我们填写4个参数(太专业对用户不友好、如果IP不变其它电脑不能使用这个IP,不够灵活),本机IP地址、子网掩码、网关IP、DNS的IP。大多数用户使用“动态IP地址上网”,计算机开机后自动分配一个IP地址,它使用的协议是DHCP协议。它规定,每一个子网络中,有一台计算机负责管理本网络的所有IP地址,它叫做"DHCP服务器"。新的计算机加入网络,必须向"DHCP服务器"发送一个"DHCP请求"数据包,申请IP地址和相关的网络参数。
我们输入了www.google.com,首先通过DNS协议我们得到域名对应的IP地址,通过子网掩码(计算出该IP的网络地址)判断我们是否在同一子网,如果不在同一子网,我们通过我们子网的网关(得知道网关IP,然后又请求网关IP得到网关MAC,再通过网关转发)。浏览网页用的是HTTP协议。TCP数据包需要设置端口(根据TCP协议),然后TCP数据包嵌入IP数据包(根据IP协议),最后嵌入以太网数据包(根据以太网协议)。经过多个网关转发,谷歌服务器收到以太网数据包。
网友评论