目录
1 网络层
1.1 IP协议报头
1.1.1 4位版本
1.1.2 4位首度长度
1.1.3 8位服务类型
1.1.4 16位总长度
1.1.5 16位标识
1.1.6 3位标志位
1.1.7 13位片偏移
1.1.8 8位生存时间
1.1.9 8位协议
1.1.10 16位首部校验和
1.1.11 32位源/目的IP地址
1.2 IP协议
1.2.1 地址管理
1.2.2 路由选择
2 数据链路层
2.1 以太网数据帧格式
2.1.1 目的地址
2.1.2 类型
2.1.3 CRC(校验和)
我们在前面了解了应用层和传输层的具体工作:网络原理(UDP协议)_咸鱼没有不粘锅的博客-CSDN博客
网络原理(TCP协议)_咸鱼没有不粘锅的博客-CSDN博客
网络原理(TCP协议2)_咸鱼没有不粘锅的博客-CSDN博客
接下来我们了解一下网络层的具体实现。
前面我们也了解过网络层的工作就是规划两点间的合理路径,同时对主机所处的位置进行定义,
其实就是路由选择、地址管理。
在网络层的重点协议就是IP协议。
取值只有两个,IPv4和IPv6,此报头IP是IPv4
和TCP类似,首部都是变长,也是包头中带有的选项
其实只有4位有效,这4位表达了IP协议不同的工作模式,这四位里面只有1位可以是1,不能同时出现多个1,分别表示最小延时、最大吞吐量、最高可靠性和最小成本
描述了IP数据包的报文长度是多少,IP总长度-IP报头长度=TCP报文长度,16位是64k,但是一个IP数据报最大不止64k,可以通过IP协议来传输很长的TCP数据报,就是多分几个包来传输,IP协议自带了分包组包机制
同组的包就会有相同的标识
主要是两位在起作用,一位用来表示当前是否分包,另一位用来表示当前这个包是否是最后一个。
用来区分前后顺序,数据包的16位标识符相同,按照顺序片偏移逐渐增大,最后一个包有特殊的标识符。
网络上可能有很多数据包在传输,有的可能顺利发送,有的包可能永远也无法发送成功,在多次重传后失败就会放弃,这就是包的生存时间。TTL的单位是次数,是一个整数,一般都是32/64/128这样的整数,预期正常情况下,数据包会在很短的次数内就能发送成功,数据传输每经过一个路由器转发,TTL就-1,如果减到0就会把包丢弃掉
IP载荷中数据报使用的传输层协议,接收方收到IP数据报进行分用,分用到网络层的时候,接下来就要把数据交给传输层,把数据给传输层的8位协议来进行分区
校验和我们前面说过,只是这个校验和只针对首部校验,载荷部分TCP/UDP自身进行校验
发件人地址;收件人地址
IP本质上是32位整数,4个字节,类似于一个int,为了方便看,就会转成“点分十进制”表示方式。使用三个点把IP地址分成4个部分,每个部分都是1个字节,每部分的范围是0-255。前面我们了解到IP地址用来区分网络上的唯一一台主机的,但是一个IP地址是四个字节,32个bit位,能表示的范围是0-42亿9千万。
按照上述设定,IP地址最多只能表示不到43亿个不同的主机,然而当前世界上的上网设备已经超出这个数值,然而如何解决这个问题呢?有以下办法:
约定 10.* , 172.16-172.31.* , 192.168.* 这三种都是局域网IP,在同一个局域网内部IP不允许重复,在不同的局域网中,IP之间不允许重复,如果在局域网内部想想访问耨个外网的服务器,就会使用一个外网IP来代替一大波局域网中的设备,大大节省了外网IP的个数。
IPv6使用了16个字节,128位表示IP地址,相较于IPv4扩大了很多,42亿*42亿*42亿*42亿,IPv6的IP地址彻底解决IPv4IP地址不够用的问题,但是为什么IPv6没有IPv4普及呢,由于IPv6和IPv4不兼容,这种更新换代除非万不得已,否则就不会全部大换血。
① IP地址具体规则
组成:IP地址分为两个部分,网络号和主机号
用一个局域网中,主机之间的网络号是相同的,主机号必须不同。在两个相邻的局域网中(同一个路由器连接的局域网)要求网络号是不同的。
②子网掩码
子网掩码划分出网络号的范围,子网掩码有32位,左半边都1,右半边都是0,左半边有多少个1就表示IP地址左侧有多少位是网络号(把子网掩码和IP地址进行按位与运算,得到的结果就是网络号)。
③ 特殊的IP地址
路由选择就像地图导航一样,在两点之间规划出合理路线,但是区别在于路由选择是启发式的过程,一个点一个点导航,而不是直接从起点导到终点。
IP数据报中就包含目的IP,网络数据报到达路由器的时候,路由器本身就有一个路由表的数据结构(路由表就是这个路由器认识的路),一个路由器无法认识网络全貌,但是认识附近的一部分。如果当前目的IP路由器认识,就会给出一个明确路线,如果当前目的IP路由器不认识就会把数据报转发给一个更厉害的路由器(在路由表中有个默认选项),如果始终找不到目的地,比如IP地址不存在或者不可到达,就会TTL,数据报被丢弃。
但是路由器不但要找一条路,也需要筛选一条更合适的路。
数据链路层最主要的协议是以太网
这个地址是mac地址,是用6个字节表示的地址,主要是在数据链路层实现相邻节点之间的转发,mac地址和IP地址原理相同,用来标识主机位置,由于是两拨人各自同时研发的,因此效果相同都在使用。mac地址有6个字节,当下的mac地址还是够用的,42亿*65535,可以让每个主机都有独立的mac地址,这个地址是网卡出厂的时候就写好了的。理论上来说mac地址是唯一的,但也不妨碍盗版网卡的不合理mac地址。mac地址也是主机身份标识的一种方式。mac地址通常使用16进制的方式来表示。
mac地址的作用就是标识两个相邻节点之间的传输。例如我从西安去西藏旅游中途经过很多站。这里源IP就是西安,目的IP就是西藏,这是始终不变的,但是中间的每一站的起点和终点分别是源mac和目的mac,例如先从西安到咸阳机场,这里源mac就是西安,目的mac就是咸阳,再从咸阳到西藏机场,这里源mac就是咸阳,目的mac就是西藏……
类型有不同的取值是用来描述后面承载什么样的数据,0800就是IP数据包,0806就是ARP请求/应答,8035就是RARP请求/应答,后面两种数据帧是特殊的以太网数据帧,不是用来传输数据的,而是让相邻节点之间相互认识的。
IP数据报中的1500是一个以太网数据帧的最大值,以太网就是传输过程中的基础设施,数据链路层中不同协议就相当于快递运输过程中派件的工具,以太网属于载重量较小的工具,如果想要运输更多的数据就需要用更多的工具来运输,IP协议分包就是保证都在以太网承受范围内。
校验和我们并不陌生,UDP校验和是通过软件(操作系统内部)来计算的,而这里的校验和通常是硬件(网卡)来计算的。