互联网的本质就是计算机与计算机之间进行通信,但是计算机自己是不知道怎么进行通信的,所以就需要人来教计算机怎么通信,也就是让计算机明白通信的规范。这个规范就是互联网协议,也可以说互联网的核心就是互联网协议。
一.五层模型
通常来说,互联网分成了五个层次,每个层次完成自己所需要完成的功能,但是高层的功能又需要底层的功能来支撑。这五个层次由低到高分别为:实体层(physical layer)、连接层(link layer) 、网络层(network layer)、传输层(transport layer)、应用层(application layer);从字面意思就可以看出,层级越低,越靠近硬件,层级越高,越靠近用户
二.实体层
实体层是距离硬件最近的一层,或许也可以说成实体层就是由硬件组成,因为实体层就表示的是我们平常见到的网线,无线电波这类载体,在这一层主要是规定了数据是如何在载体中进行传输。实体层的作用就只是用来传输0和1。
三.连接层
-
定义
如果一台计算机收到了另外一台计算机发过来的一串0和1,在没有协议的情况下计算机肯定是不知道这串0和1代表什么意思,所以连接层要做的就是规定这串0和1是如何分组的
-
以太网协议
以太网协议就是一种规定电信号分组的方式。
以太网规定一组电信号构成的数据包,叫做帧(frame),每一个帧又分为两个部分:标头(head)和数据(data)
标头包含这个数据包的说明信息,比如接收者是谁,发送者是谁,而数据部分则就是要传输的信息本体。
标头的长度是固定的,为18字节,数据的长度是不固定的,最短为46字节,最长为1500字节;所以一帧的长度为64字节~1518字节,如果长度超过了最大字节数,就要将多出来的数据再打包成一帧进行发送。
可以表示为:
[[head] [ data ]]
-
MAC地址
数据的接收和发送都是由网卡来进行操作的,所以网卡也就是数据的接受者和发送者,而表明接受者和发送者的就是MAC地址,MAC地址是存在于网卡固件里边的。只要一块网卡被生产出来,那么他就有一个在这世界上独一无二的MAC地址。MAC地址的长度固定为48个二进制位,通常用12个十六进制数表示,比如: E4-02-9B-8D-26-D3。前六个是网卡厂商编号,后六个则是流水号。有了MAC地址就可以定位发送的地址了。
-
广播
在计算机里是不会存在其他计算机的MAC地址的,既然没有其他计算机的MAC地址,那么数据又该如何发送呢,就算有了MAC地址,数据又该如何精确的到达对方手里呢?关于如何获得MAC地址,是有一种叫做ARP的协议可以解决这个问题,ARP涉及到了网络层,所以留到后边。这里暂且设定知道接受者的MAC地址,那么网络里那么多计算机,到底该怎么确定接收者具体在哪里呢 ,这时候就只需要像广播一样将消息发送到网络上的每台计算机上,然后由他们自己判断自己是否应该接受这些消息。
四.网络层
理论上只要有了MAC地址,任意两台计算机就可以进行通信,但是想要北京的一台计算机和日本的一台计算机处于同一网络很明显是不可行的。如果两台计算机不处于同一网络,那么两台计算机就无法通信。而事实是互联网是无数小型的网络组成的巨型网络。
所以为了解决不同子网络之间无法通信的问题,网络层就出现了,网络层就引进了一套新的地址,这套新的地址就是IP地址。IP地址就是判断计算机属于哪一个子网络。
有了IP地址后两台位于不同子网络的计算机就可以通信了。
-
IP协议
规定IP地址的协议就是IP协议,目前广泛使用的是IP协议第四版,简称IPv4,IPv4规定的IP地址由32个二进制位组成,但还是我们习惯上是将IPv4地址写成分成四段的十进制数,从
000.000.000.000
到255.255.255.255
,比如:192.168.101.1
。互联网上的每一台计算机都会分到一个IP地址,这个地址分为两部分,前一部分确定处于哪一个网络,后一部分确定是哪一个主机,比如192.168.101.1和192.168.101.2,这两个IP地址表明这两台计算机都处于192.168.101这个网络之中。
但是单单从IP地址是无法判断网络部分,这个时候就需要子网掩码,子网掩码的形式和IP地址的形式相同,网络部分为1,主机部分为0,所以如果网络部分为前24位,则子网掩码为11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0,如果网络部分是前16位,则子网掩码就是255.255.0.0。
所以IP协议的作用就是为每台计算机分配IP地址和判断那些地址处于同一网络
IPv4分配的IP地址是有限的,随着网络的发展,IPv4可以分配的294 967 295个IP地址已经快不够用而,所以IP协议又推出了第6版协议,也就是IPv6,IPv6的长度是IPv4的四倍,也就是128个二进制,用十六进制表示为:fe80:e869:a9df:f5f3:8c5a,而IPv6可以分配的地址的数量是2^128-1个,也就是340282366920938463463374607431768211455,所以说IPv6被广泛应用之后,世界上的每粒沙子都会有自己的IP地址。
-
IP数据包
根据IP协议发送的数据包就叫做IP数据包,IP数据包也有自己的格式,这个格式和以太网协议规定的格式差不多。所以IP数据包的头部存放的就是IP地址等一系列说明信息。IP协议规定的格式为:
[[head] [ data ]]
那么IP数据包放在哪呢?答案是放在以太网数据包的数据部分,所以总的格式就是:
{[eth-head] [(ip-head) ( data )]}
-
ARP协议
一台计算机想要向另一台计算机发送数据包的话,就需要目标设备的IP地址和MAC地址。
这里分为两种情况,第一种是两台计算机处于不同的子网络,这个时候是无法直接获取目标设备的MAC地址,只能将数据包送至两个子网络的连接处“网关”处,让网关决定将数据包发送至哪一个计算机;第二种情况是两台计算机处于同一子网络,这个时候就需要ARP协议发出一个数据包,这个数据包处于以太网数据包中,它包含了目标IP地址和MAC地址,但是在MAC地址处填的不是MAC地址,而是FF.FF.FF.FF.FF.FF,这个表示这是一个广播地址,在这个子网络内的所有计算机都会收到这个数据包,收到这个包之后会去除其中的IP地址和自己的IP地址进行比较,如果相同,就返回自己的MAC地址,如果不同就丢弃这个数据包。
五.传输层
有了MAC地址和IP地址,网络上的任意两台计算机就可以互相通信了。但是,当一个数据包到达目标计算机后,怎么判断这个数据包应该由哪一个应用程序接收呢。所以我们还需要一个标识,用来标记这个数据包一个发往哪一个应用程序。所以就有了端口,端口其实就是每一个应用程序使用网卡的编号。有了端口后就可以将数据包发往特定的端口,然后应用程序会取走属于自己的数据包。
端口是位于065535之间的一个整数,其中01023的端口是被系统占用,其余的才可以由应用程序使用,使用时会随机的获取一个端口,然后和服务器确立端口联系。
传输层的功能就是建立 端口到端口 之间的通信,而网络层则是建立 主机到主机 之间的通信,只要确立了主机和端口,就可以实现程序之间的交流。
-
UDP协议
UDP协议可以在数据包中加入端口信息,这是最简单的实现方法,几乎就是在数据前边加上端口号。UDP数据包的格式也是标头和数据组成,然后放入IP数据包:
[[标头] [ 数据 ]]
标头部分主要存放了发出的端口和接受的端口,数据部分则是用户具体要传输的数据。所以整个数据包最后变成这样:
{[eth-head][(ip-head)(^udp-head^ ^ data ^)]}
-
TCP协议
UDP协议的可靠性比较差,一旦数据包发出,就无从得知对方是否收到数据包。为了解决这个问题,TCP协议就应运而生。TCP协议非常复杂,但是可以近似认为就是有确认机制的UDP协议。
使用TCP协议的数据包被发送后,就会确认数据包是否收到,如果未收到,就要重新发送这个数据包了,
TCP协议和UDP协议相同,都是嵌入于IP数据包中。TCP数据包没有长度限制,但是为了节省网络资源,提高传输效率,TCP数据包的长度一般不会超过IP数据包的长度,以确保单个TCP数据包不会被分割。
六.应用层
TCP协议传输的数据五花八门,比如WWW、email、FTP等等,所以就需要一些协议来规定各种数据格式,这些协议就构成了应用层。应用层的协议也就是用来教电脑如何解析不同格式的网络数据。
如有不足,烦请指出。
参考---------阮一峰-《互联网协议入门(1)》