zoukankan      html  css  js  c++  java
  • MPTCP 源码分析(一) MPTCP的三次握手

    简述:
         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->mp_join_syns.token = mpcb->mptcp_rem_token;
    860         opts->mp_join_syns.low_prio  = tp->mptcp->low_prio;
    861         opts->addr_id = tp->mptcp->loc_id;
    862         opts->mp_join_syns.sender_nonce = tp->mptcp->mptcp_loc_nonce;
    863     }
    864 }
    由于三次握手的肯定是master sock,在850行到853行对MPTCP选项进行了赋值。相应的
    服务端发送SYN/ACK包时使用mptcp_synack_options函数对选项进行了赋值。而最后一个ACK包
    则是调用函数mptcp_established_options操作。
     
    结论:
    1. MPTCP利用TCP的三次握手进行了KEY信息的交换。
     
    参考文献:
     
  • 相关阅读:
    从零开始入门 K8s | 应用编排与管理
    209. Minimum Size Subarray Sum
    208. Implement Trie (Prefix Tree)
    207. Course Schedule
    203. Remove Linked List Elements
    183. Customers Who Never Order
    182. Duplicate Emails
    181. Employees Earning More Than Their Managers
    1261. Find Elements in a Contaminated Binary Tree
    1260. Shift 2D Grid
  • 原文地址:https://www.cnblogs.com/lxgeek/p/4329922.html
Copyright © 2011-2022 走看看