發表文章

目前顯示的是 二月 17, 2016的文章

MPTCP 源碼分析(一) MPTCP的三次握手

圖片
From http://www.cnblogs.com/lxgeek/p/4329922.html簡述:      MPTCP依然按照正常的TCP進行三次握手,只是在握手過程中增加了MPTCP特有的信息。 建立過程      三次握手過程如下圖所示:   左邊客戶端發送的第一個SYN包攜帶有客戶端自身的KEY,右邊發送SYN/ACK的時候攜帶了自身的KEY, 而最後左邊的客戶端發送最後一個ACK的時候攜帶著雙方的KEY。MPTCP中關於MP_CAPABLE的定義如下: Subtype的定義如下: MPTCP的內核實現       MPTCP在客戶端上發送SYN包的調用情況如下: 關鍵函數為mptcp_syn_options對MPTCP選項的填充,源碼如下: "net/mptcp/mptcp_output.c" line 843 of 1667 843 void mptcp_syn_options(struct sock *sk, struct tcp_out_options *opts, 
844 unsigned *remaining) 
845 { 
846 struct tcp_sock *tp = tcp_sk(sk); 
847 
848 opts->options |= OPTION_MPTCP; 
849 if (is_master_tp(tp)) { 
850 opts->mptcp_options |= OPTION_MP_CAPABLE | OPTION_TYPE_SYN; 
851 *remaining -= MPTCP_SUB_LEN_CAPABLE_SYN_ALIGN; 
852 opts->mp_capable.sender_key = tp->mptcp_loc_key; 
853 opts->dss_csum = !!sysctl_mptcp_checksum; 
854 } else { 
855 struct mptcp_cb * mpcb = tp->mpcb; 
856 
857 opts->mptcp_options |= OPTION_MP_JOIN | OPTION_TYPE_SYN; 
858 *remaining -= MPTCP_SUB_LEN_JOIN_SYN_ALIGN; 
859 opts->…