转自:http://www.cnblogs.com/zhuting/p/5969617.html
TCP/IP数据包
MPTCP是常规TCP协议的扩展,想要了解MPTCP数据包,首先得了解常规的TCP包。
如上图所示,为TCP/IP的数据包格式,TCP/IP数据包分为四大块:黄色的数据链路层头部,蓝色的IP头部,紫色TCP头部,还有最后的数据报内容。
详细内容参考http://blog.csdn.net/alexander_xfl/article/details/17412223。
TCP头部选项
头部选项在TCP头部和数据包内容之间,一个TCP包可能没有头部选项,也可能同时有好几个头部选项。TCP头部选项的格式如下,通过kind字段区分不同的头部选项。
2013年,RFC6824将kind=30分配给了MPTCP。
红色标注的部分为RFC组织在2013年新标准化的选项字段,在做包解析的时候,根据TCP头部选项的kind值就可以判断该包是否为MPTCP包了。
MPTCP包结构
MPTCP选项的典型结构为
其中,kind字段表示该头部选项为MPTCP头部选项,kind=30。Length字段表示该头部选项的长度,subtype选项表示该MPTCP选项的子类型,剩下的字节则为该子类选项的具体数据。根据subtype值的不同,MPTCP选项的子类型有以下几种
每个MPTCP选项子类对应的结构为:
0x0:MP_CAPABLE
0x1:MP_JOIN
0x2:DSS
0x3:ADD_ADDR
0x4:REMOVE_ADDR
0x5:MP_PRIO
0x6:MP_FAIR
0x7:MP_FASTCLOSE