一. 网络层协议----IP协议
网络层协议的功能有两个:
- 地址管理: 将发送端,接收端的地址以一定的规范定义出来.
- 路由选择: 任何一个节点都无法感知到网络路径的全貌,只能认识以自己为中心的局部网络.因此也只能规划这一范围内的路径.
关于路由选择,下文谈到路由器的部分会做简略介绍,此处不再讨论.
1.1 IP协议格式
下图是IPv4协议格式.
- 4位版本号: 指定IP协议的版本.我们只需要关心IPv4 和 IPv6 即可.(童鞋们肯定会疑惑为啥没有IPv1,2,3,实际上IP协议是一个比较注重实用性的协议,在版本被发布之前会先进行试验,IPv1,2,3这些版本就是实验版本,因此不被大众熟知)
- 4位首部长度: IP报头的长度有多少个32bit,也就是以4Byte为单位.
- 8位服务类型: 3位优先权字段(已经弃用);4位TOS字段,分别表示:最小延时,最大吞吐量,最高可靠性,最小成本(只能选择一个置1,其余置0);还有一位保留字段(必须置0)(在实际应用场景中,我们并不会用到这些服务类型的切换,读者只需了解即可)
- 16位总长度: IP报文一共占多少字节.(总长度为16位并不代表IP协议可以传输64KB的数据包,还要看数据链路层协议的规定)
- 16位标识: 如果IP报文过长,根据规定会进行分片.每片的标识号是相同的.
- 3位标志: 第一位保留;第二位为0表示可分片,为1表示不可分片;第三位为1表示这是同一组IP报文的最后一片.
- 13位分片偏移: 表示当前分片在原报文中的位置.
- 8位生存时间(Time To Live,TTL):一个数据报被构造出来,会经过一个又一个的主机,称为"一跳一跳地传输",每跳一次,TTL就会-1,如果减到0还未到达目的主机,就会被丢弃.(这个机制用来防止路由循环)
- 8位协议: 表示上层使用的协议类型.
- 16位首部校验和: 用于IP报头校验.(报文部分由上层协议校验)
- 32位源IP地址/目的IP地址: 表示发送端和接收端.
1.2 认识IP地址
在命令台上输入ipconfig -all指令,就可以看到自己的IP地址.
- 概念: IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址.
- 功能: IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异.
- 格式:IP地址是一个32位的二进制数(IPv4),通常被分割为4个“8位二进制数”(也就是4个字节),并且使用"点分十进制"的方式来表示.即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如: 196.201.118.003
- 版本: 因为IPv4协议的IP地址只有32位,也就是大约43亿主机可以分配到IP地址,这对于现在的人类世界是远远不够的! 所以有了IPv6协议,其规定的IP地址长度为128位,可以为地球上的每一粒沙子都分配一个身份标识.
1.2.1 IP地址分类
在这一方案下,IP地址被划分成两部分==网络号+主机号.
- 网络号: 用于标识网段,保证相互连接的任意两个网段具有不同的标识.
- 主机号: 用于标识网段内的主机,同一网段下的任意两台主机拥有不同的标识.
IP地址是具有层次性的.同一网段内的主机往往分布在一片区域内.
然鹅,人们发现,这种分类方式并不现实.见上图,A类网络可以容纳166777214台主机!实际上一个组织往往达不到这种规模.这让本来就资源紧张的IP地址雪上加霜~于是,就产生了子网掩码.
插入一个话题,为啥上面的最大主机数目都要减2? 如果主机地址全为0,表示不知道主机的具体标识;如果主机地址全为1,就变成了广播地址,目的IP为这个的报文将被发送到该局域网下的每台主机上.
1.2.2 子网掩码
格式: 子网掩码格式和IP 地址一样,也是一个 32 位的二进制数。其中左边是网络位,用二进制数字 “1” 表示, 1 的数目等于网络位的长度;右边是主机位,用二进制数字“0” 表示, 0 的数目等于主机位的长度.
二. 数据链路层协议----以太网协议
物理层的功能是将0,1比特流转换为光/电信号进行传输.数据链路层负责将数据转换成有意义的帧格式,然后交给物理层.
如果把数据在网络上的传输比作收发快递的话.物理层只负责快递的运输;数据链路层则需要进行包裹的完整性,大小...的检验.
2.1 以太网帧格式
以太网协议是数据链路层的重点协议,下图为其帧格式
- 目的地址/源地址: 指的是MAC地址(48位),与IP地址不同的一套地址体系.用于同一数据链路下主机的唯一标识.
- 类型: 指上层协议类型.
- CRC: 使用CRC方式进行以太网帧校验的校验码
实际上,以太网每一帧前面还会传送一个前导码(8Byte),用于标识一个帧的开始;每传送完一个帧,发送方都会空出来9.12us,这段时间内不发送任何数据,用于标识一个帧的结束.
细心的同学肯定会疑惑----为啥有前导码,不设置一个"后导码"来表示一个帧的结束呢?
实际上是因为早期的以太网,各个主机通过一根总线相连,不能同时发送数据.通过给发送端设置时间空隙,可以避免其他主机抢不到发送权.
2.2 认识MTU
MTU,指的是数据链路层的数据帧,其载荷的最大长度.一般规定为1500Byte.
如果载荷超过这个长度,意味着上层协议要进行分包;如果载荷小于46Byte,要进行补0处理.
46Byte最小长度的具体原理,博主还未进行研究,等结果出来了再告诉大家吧~
三. 认识网络设备
中继器/集线器: 在物理层上进行信号增强的设备. 同学们可以把它想象成一个信号放大器,只能延长网段的传播范围(有数量限制,并不能无限延长).并且当中继器连接两个网段时,这两个网段的传输速率必须一致(必须是同一介质).
交换机/网桥: 在数据链路层上连接两个网段的设备. 交换机内部有一张存储转发表,记录着连接的两个网段中各台主机的MAC地址,并且这张转发表是通过自学机制维护的,不需要人为改动.同时,因为交换机内部有缓冲区,可以连接两个速率不同的网段.
路由器: 将多个局域网连接到一起的设备. 这里指的局域网是在同一数据链路内的结点组成的网络.
路由器内部有一张路由表,记录了某个IP地址属于哪个网段.这张路由表也是由自学机制实现的.
除了上面这些我们耳熟能详的网络设备外,还有4-7层网络设备(比如大型公司内部使用的负载均衡器,负责将客户端的响应分配给各个应用服务器).感兴趣的读者可自行查阅相关资料.