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