互联网的每一层,都定义了很多协议。这些协议的总称,就叫做"互联网协议"(Internet Protocol Suite)。它们是互联网的核心,下面介绍每一层的功能,主要就是介绍每一层的主要协议。
三、链接层
3.2 以太网协议
以太网规定,一组电信号构成一个数据包,叫做"帧"(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。
"标头"包含数据包的一些说明项,比如发送者、接受者、数据类型等等;"数据"则是数据包的具体内容。
"标头"的长度,固定为18字节。"数据"的长度,最短为46字节,最长为1500字节。因此,整个"帧"最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。
3.3 MAC地址
上面提到,以太网数据包的"标头",包含了发送者和接受者的信息。那么,发送者和接受者是如何标识呢?
以太网规定,连入网络的所有设备,都必须具有"网卡"接口。数据包必须是从一块网卡,传送到另一块网卡。
网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。
3.4 广播
一块网卡怎么会知道另一块网卡的MAC地址?(ARP协议,留到后面介绍)
以太网数据包必须知道接收方的MAC地址,然后才能发送,以太网向本网络内所有计算机发送,让每台计算机自己判断,是否为接收方。
四、网络层
4.1 网络层的由来
计算机的网络地址:
1:两台计算机不在同一个子网络,广播是传不过去的;
2:区分哪些MAC地址属于同一个子网络,如果是同一个子网络,就采用广播方式发送,否则就采用"路由"方式发送。
3:MAC地址本身无法做到这一点。它只与厂商有关,与所处网络无关。
4:导致了"网络层"的诞生。作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络,叫做"网络地址",简称"网址"。
5:计算机有了两种地址,一种是MAC地址,另一种是网络地址,两种地址之间没有任何联系;
6:网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡
4.2 IP协议
1:规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址。目前,广泛采用的是IP协议第四版,简称IPv4
2:这个版本规定,网络地址由32个二进制位组成,每一台计算机,都会分配到一个IP地址。分成两个部分,前一部分代表网络,后一部分代表主机。
例子:
比如,IP地址172.16.254.1,这是一个32位的地址,假定它的网络部分是前24位(172.16.254),
那么主机部分就是后8位(最后的那个1)。处于同一个子网络的电脑,它们IP地址的网络部分必定是相同的,
也就是说172.16.254.2应该与172.16.254.1处在同一个子网络。
3:单单从IP地址,我们无法判断网络部分,以172.16.254.1为例,它的网络部分,到底是前24位,还是前16位,从IP地址上是看不出来的
4:“子网掩码”:一个32位二进制数字,它的网络部分全部为1,主机部分全部为0;
知道"子网掩码",我们就能判断,任意两个IP地址是否处在同一个子网络。
方法:是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),
然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。
4.3 IP数据包
1:根据IP协议发送的数据,就叫做IP数据包。不难想象,其中必定包括IP地址信息。
2:把IP数据包直接放进以太网数据包的"数据"部分,IP数据包也分为"标头"和"数据"两个部分。
3:它放进以太网数据包后,以太网数据包就变成了下面这样。
4:太网数据包的"数据"部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了;
4.4 ARP协议 (获取mac地址)
1:IP数据包是放在以太网数据包里发送的,必须同时知道两个地址,一个是对方的MAC地址,另一个是对方的IP地址。
2:对方的IP地址是已知的(后文会解释),但是我们不知道它的MAC地址。获取方法以下:
情况1:两台主机不在同一个子网络,把数据包传送到两个子网络连接处的"网关"(gateway),让网关去处理。
情况2:用ARP协议,得到对方的MAC地址,ARP协议也是发出一个数据包,包含它所要查询主机的IP地址,它所在子网络的每一台主机,
都会收到这个数据包,取出IP地址,与自身的IP比较。相同,向对方报告自己的MAC地址,否则就丢弃这个包。
五、传输层
有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。
1:问题:一台主机上有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,
你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?
2:“端口”解决这个问题,每一个进程都有自己的端口,每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。
3:"传输层"的功能,就是建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。
只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做"套接字"(socket)。
5.2 UDP协议
数据包中加入端口信息,这就需要新的协议。最简单的实现叫做UDP协议,它的格式几乎就是在数据前面,加上端口号。
UDP数据包,也是由"标头"和"数据"两部分组成。
整个UDP数据包放入IP数据包的"数据"部分,而前面说过,IP数据包又是放在以太网数据包之中的,所以整个以太网数据包现在变成了下面这样:
5.3 TCP协议
1:UDP协议:的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。
2:TCP协议:它就是有确认机制的UDP协议,每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。
因此,TCP协议能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。