我们一定都听过互联网协议,可以互联网协议是什么呢?
互联网的核心是一系列的协议,该协议称为互联网协议(Internet Protocal Suite)。互联网协议大体上可以分为五层。
1.应用层(Application Layer)
2.传输层(Transport Layer)
3.网络层(Network Layer)
4.链接层(Link Layer)
5.实体层(Physical Layer)
首先,大家先接受以下几点:
- 越靠近上面的层,越接近用户;越靠近下面的层,越接近硬件。
- 每一层都是为了完成某种特定的功能,为了实现这些功能,需要大家共同遵守相同的协议。
- 互联网每一层都有很多协议,这些协议的总称,称为互联网协议。
第一部分:实体层
刚刚我们说过,越靠下的层越接近硬件,这里就是这样的。实体层即把电脑连接起来的物理手段。我们知道,电脑如果要联网,我们需要将各电脑用光缆、电缆、双绞线、无线电波等方式链接起来。这便是实体层。它的主要作用是负责传输0和1的电信号。
第二部分:链接层
A.显然,单单由实体层完成的任务(负责传输0和1的电信号)是没有意义的。链接层的作用即将电信号0和1进行分组,这样传来的电信号才有意义。确定分组方式有很多中协议,其中以太网协议便是一种十分流行的协议。它规定:将电信号0和1分得的每一组构成一个数据包,又叫做帧,每一个数据包(帧)由两部分组成,标头(Head)和数据(Data)。
关于数据包,有以下几点需要注意:
- “标头”包含数据包的一些说明项,比如发送者,接收者,数据类型等等。
- “数据”即为数据包的具体内容。
- 标头长度固定为18字节,数据长度最短46字节,最长1500字节。
B. MAC地址。A中我们提到了由以太网协议规定的数据包(帧),有标头和数据,标头中有接收者和发送者,那么接收者和发送者是如何标识的呢?以太网规定:连入网络的所有设备,都必须具有网卡接口,数据包(帧)必须从一块网卡传送到另外一块网卡。而设备中网卡都是具有地址的,网卡地址即为数据包的发送地址和接收地址,我们成为MAC地址。
关于MAC地址,有以下几点需要注意:
- 每块网卡地址出厂时,都有全世界独一无二的MAC地址,就像全中国每个人的身份证号各不相同一样。
- 一个MAC地址的长度是48个二进制数,其中用12个十六进制数来表示(为方便)。
- MAC地址中前6位是厂商号,后6位是网卡流水号。
c. 广播。注意:以太网数据包必须知道接收方的MAC地址才能发送,可是,即使有了接收方的MAC地址又该怎么发送呢?以太网协议规定:使用广播方式--即不是将数据包准确的发送给接收方,而是通过广播的形式将数据包向本地网上所有的电脑都发送一个,让每台计算机自己做出判断,看是否为接收方。
判断方式为:发送者将数据包发送给本网络中的所有计算机之后,每台计算机会读取“标头”中接收方的MAC地址与自身的MAC地址作比较,如果相同,则接收,如果不同,则丢弃。
第三部分:网络层
A.为什么会出现网络层呢?
以太网协议缺点有二。其一:通过广播方式发送以太网数据包,这样会导致本地网的计算机每台都会接收,使得效率低,耗费资源。其二:广播方式局限在发送者所在的子网络,对于相聚遥远的两个城市,它们一定不是在同一个子网络中的,因此,这时,以太网数据包就不会发送出去并被接收。当时呢,局限在一个子网络中也是有好处的,因为如果把数据包发送到了世界上每一台计算机上,那么,这将是毁灭性的灾难!
基于这个现实,我们需要一种方法来确定哪些MAC地址属于同一网络,哪些MAC地址不属于同一网络,并解决不能将数据包发送到发送者所在子网络之外的网络的问题。
这时,网络层便应运而生了,它引进了一种有别于MAC地址的新地址,这套地址称作“网络地址”(简称网址)。网址出现了之后,每台计算机上就包含MAC地址和网络地址这两种地址了。应当注意:两种地址没有任何关系,MAC地址是绑定在网卡上的,网络地址是管理员分配的。他们只是随即的组合在了一起而已。两者之间的工作协调:网络地址可确定计算机所在子网络,MAC地址将数据包送到该子网络的目标网卡。也就是说,必定是先处理网络地址,然后处理MAC地址。
B.IP协议。IP协议即规定网络地址的协议。它所定义的网络地址也就是IP地址。IP地址有第四版和第六版,目前广泛使用的是第四版,即IPv4。IP协议规定:IP地址由32个二进制数组成,由分成四段的十进制数表示。比如:二进制为10101100.00010000.11111110.00000000的IP地址用十进制可以表示为172.16.254.1。显然,后者的方式更为简洁。
关于IP地址,由以下一点需要注意:
- 连入互联网的每一个台计算机都会被管理员分配一个IP地址,因此这个地址不像MAC地址一样始终跟随于一台电脑,它是可变的。
- IP地址可以分为两个部分,前一部分是网络,后一部分是主机。但这并不是说刚好前一半和后一半,而是不一定的,可能前24位是网络部分,也有可能前26是网络部分。
- 若两台电脑的IP地址的网络部分完全相同,那么这两台电脑属于同一个子网络。
但是我们都没有办法确定两台电脑的IP地址的网络部分,又该怎么做比较呢?这时候,子网掩码就派上用场了。所谓子网掩码,即表示子网络特征的一个参数,形式上与IP地址相同。子网掩码我们应该注意:
- 一个IP地址的子网掩码和IP地址是有关系的,比如对于IP地址:172.16.254.1,如果他的网络部分是前24位,那么他的主机部分便是后8位。我们认为其子网掩码为255.255.255.0,如果用二进制表示即为:11111111.11111111.11111111.00000000.也就是说:二进位表示时,IP地址的网络部分在子网掩码相应的位置为1,IP地址的主机部分在子网掩码相应的位置为0.
- 将两个IP地址与两个子网掩码分别使用&运算,比较得到的结果是否相同,若相同,则为同一子网络;若不同,则为不同的子网络。
C.IP数据包:根据IP协议发送的数据成为IP数据包。同样,IP数据包和以太网数据包相似都是由标头(Head)部分和数据(Data)部分组成的。注意以下几点:
- IP数据包的标头中包含了版本、长度和IP地址等信息。
- IP数据包的数据部分包含了数据包的具体内容。
- IP数据包是包含于以太网数据包的数据部分的。如图所示(可以对比上一张图片来看)
- 整个IP数据包的最大总长度为65535字节,而我们知道以太网数据包的数据部分最大为1500字节,因此若IP数据包的总长度超出了1500字节,该数据包就要被分割为几个以太网数据包分开发送。
D.ARP协议。我们已经知道IP数据包是在以太网数据包里发送的,因此我们需要确定两个地址,一个是对方的MAC地址,另外一个是对方的IP地址。显然,对方的IP地址是容易获取的,可是,对方的MAC地址呢?下面,我们分成两种情况讨论。
第一:如果两台主机在在同一个子网络,那么我们可用ARP协议发出一个数据包(包含在以太网数据包中),其中包含它所查询的主机的IP地址,在对方的MAC地址中填写FF.FF.FF.FF.FF.FF,表示这是一个广播的地址,所在网络的每个主机都会收到这个数据包,从中取IP地址与自身IP做比较,若同,则回复自身的MAC地址,若不同,则丢弃这个包。(补充:也许大家觉得这里不太好理解的是,之前不是说用MAC地址来确定接收方与放松方吗?这里为什么又说不知道MAC地址又要确认呢?或者有了IP地址为什么还需要MAC地址呢?这是因为我们之前说过:连入网络的所有设备,都必须具有网卡接口,数据包(帧)必须从一块网卡传送到另外一块网卡。所以IP地址只是为了能够确认是否是同一子网络,最终的数据传输还是要依靠MAC地址传输到网卡。又因为我们有了IP地址,所以对方每次只能获得我们的IP地址,而不能直接获得我们的IP地址。)
第二:如果两台主机在不同的子网络里(当然也是一看IP地址做出判断),这是就无法像第一种方法一样获取对方的MAC地址了,只能把IP数据包传送给两个子网络的连接初“网关”(gateway)去处理。这里不做具体介绍。
第四部分:传输层
A 既然已经有了MAC地址和IP地址,那么我们就已经可以在互联网的任意两台主机上进行通信了,可是如果在一边在电脑上冲浪,一边聊qq,那么当数据发送到你的网卡上时,是你的网页接收数据还是你的qq接收数据呢?这时候,我们就需要用“端口”(port)来解决问题了。端口实际上是每一个使用网卡的程序的编号,每个数据包都会发送到主机的特定端口,这样不同的程序就可以接受到自己所需要的数据了。
关于端口你需要注意:
- 端口是一个0-65535之间的整数,其中0-1023的端口被系统占用,用户只能选择大于1023的端口。
- 不管是冲浪还是qq都会选择一个端口与服务器的对应端口进行联系。
- 由此可知,传输层是建立在端口到端口的通信,而网络层是建立在主机道主机的通信,只要确定了主机和端口,就能实现程序之间的交流了。
B.CDP协议。那么规范端口的协议是什么呢,其中一个较为流行的就是CDP协议。CDP协议定义了一个CDP数据包,该数据包同样由标头和数据两部分组成。标头部分定义了发出端口和接收端口的信息。数据部分就是具体内容。最后将CDP数据包放入IP数据包的数据部分(注意:之前我们已经把IP数据包放到了以太网数据包中了)。效果图如下。
第五部分:应用层
应用层收到传输层的数据,接下来就要进行解读。由于互联网是开方架构,数据来源五花八门,故必须事先规定好格式。如TCP协议可以为各种各样的程序传递数据,如Email、www、FTP等,那么必须有协议来规范电子邮件、网页、FTP数据的格式,这些应用程序即构成了应用层。
最后,我想说明的是,这篇博客我参考了阮一峰老师的博客内容,在这里表示感谢,希望大家能通过这篇文章有些许收获。