20174年7月5日
参考资料:
《Linux高性能服务器编程》
linux-2.6.32源代码
《TCP/IP详解》(卷一)
网络编程最重要的一个环节就是要理清TCP/IP传输协议栈。而协议栈的学习自然的少不了最关键的一个环节就是协议的分析。
首先是IPv4的首部信息:
如果涉及到编程在linux下/usr/include/netinet/ip.h中对首部字段有相关的定义。
4位版本号(IPv4则值为4)
4位首部长度(注意4位表示的最大值为15,而该字段用4字节表示一个字所有首部长度最大值为60这也说明了扩展部分【也就是选项部分】最大值为40个字节)
8位服务类型
16位总长度:整个IP数据报长度,以字节为单位。所以最大长度应该是65535字节。由于MTU的限制,超过MTU的部分将会涉及到分片。针对分片后面也会有相关的介绍。
16位标识:唯一的标识一个主机发送的数据报,需要注明的是这个数值由系统开始随机分配,后面每发送一个数据报其值都会加1.
3位标志:第一位保留,第二位DF表示禁止分片。如果该位设置则不能对数据包分片,如果数据包长度超过MTU则会直接丢弃