博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MPTCP 源码分析(一) MPTCP的三次握手
阅读量:6004 次
发布时间:2019-06-20

本文共 1368 字,大约阅读时间需要 4 分钟。

简述:
     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信息的交换。
 
参考文献:
1.RFC6824 
 

转载于:https://www.cnblogs.com/lxgeek/p/4329922.html

你可能感兴趣的文章
2018/01/31
查看>>
流媒体压力测试工具—推拉流
查看>>
微服务高可用--降级限流
查看>>
python爬虫整理——爬虫简介
查看>>
SAP云平台里Global Account和Sub Account的关系
查看>>
apache shiro
查看>>
Python语音识别终极指南-帮你完成那个最难的从0到1
查看>>
7月5日任务LVS DR模式搭建、keepalived + LVS
查看>>
一名3年工作经验的java程序员应该具备的职业技能
查看>>
谈一谈我所了解的HTTPS
查看>>
java B2B2C 源码 Springcloud多租户电子商城系统-eureka 原理分析
查看>>
金三银四,2019大厂Android高级工程师面试题整理
查看>>
“不是不需要运维工程师,是人人皆是运维”|对话阿里云MVP蒋烁淼(上)
查看>>
微服务架构下的服务调用与鉴权——某保险公司微服务平台实施案例分享
查看>>
民宿行业如何全速吸引流量,激活增长势能
查看>>
CentOS下开启SSH Server服务
查看>>
C++ 重载 new 和 delete
查看>>
【Nvivo教程】在Nvivo中实现编码和检索
查看>>
记一个Jenkins任务无法结束的问题
查看>>
Python猫荐书系列之五:Python高性能编程
查看>>