在传输层中有两个重要的协议,分别为UDP和TCP。UDP追求高效的效率,TCP追求更可靠的传输。但是这两个协议都太极端了,有没有一个协议可以在保证可靠性的同时又不失较高的效率。
针对上面的问题,网络层的IP协议是更好的解决方案。
IP协议的报文格式如下图:
1、版本
IP协议分为IPv4和IPv6两个版本,现在基本上使用的都是IPv4协议,但有些软件也支持IPv6协议。
2、首部长度
与TCP协议一样,由于有选项的存在,导致首部长度是变化的,该属性即表示了IP协议报头的长度。单位为4字节。
3、服务类型
该属性决定了IP协议的工作方式。8位服务类型分为3位优先权字段(已经弃用)、4位TOS字段和1位保留字段(必须设置为0)。4位TOS字段分为最小延时、最大吞吐量、最高可靠性、最小成本。
4、总长度
即IP协议的报头与载荷的长度和。由于是16位,并且单位是字节,那么IP报文最大的长度为64KB。与UDP一样,若载荷过长,就有可能出现一个报文装不下的情况。但是对于IP协议,内置了拆包组包的操作,即当载荷过长时,会将载荷拆分成多个部分,并将这每一个部分封装为一个IP数据报。接收方在接收到这些IP数据报后,就会自动触发组包操作,将这些IP数据报的载荷拼接到一起。
5、16位标识、3位标志位、13位片偏移
由于IP协议内置了拆包组包的操作,那么在组包时是如何分清哪几个数据报是被拆分出来的?
标识即将同一个载荷拆分出来的IP数据报设置为同一个标识,在组包时就会将相同标识的包组合在一起。
标志位一共有三位。其中一位表示了该包是否被拆分过,另一位表示该包是否为拆分出来的最后一个包。
在组包过程中也需要考虑包与包之间的顺序。13位片偏移表示了包与包之间的顺序。偏移量小的包在前,偏移量大的包在后。
6、生存时间
IP数据报在网络中的最大传输时间,单位为次数。IP数据报每经过一个路由器转发,TTL就会减1,当TTL减为0时,就说明该数据报无法到达接收方,就会被丢弃。TTL的值是有可能变化的。
下图是访问搜狗服务器的TTL大小:
7、8位协议
表示传输层使用的是哪种协议。在对数据报进行分用时,网络层就会拿到传输层使用的协议类型,在将载荷发送到传输层后,传输层就知道应该使用哪种协议来解析这个数据报。
8、首部校验和
在UDP/TCP协议中,也存在校验和属性。由于传输层的校验和是针对TCP/UDP数据报的报头与载荷,在IP数据报中的载荷就是TCP/UDP数据报,此时就不需要将载荷带入计算,而只需要将IP数据报的报头进行计算从而得出一个校验和即可。
9、源IP地址,目的IP地址(重要)
标识了IP数据报从哪来,要到哪去。
由于IP地址是32位,即用32位数字表示,但32位数字过于长,于是使用点分十进制来表示。将32位数字分为4组,组与组之间使用点分开,每组数字在0-255之间,如192.0168.0.1 。