linux网络进阶
mptcp解读。
手搓tcp代理、udp(游戏)代理。
Intel 82599网卡linux内核pps探索,接近dpdk、netmap的性能
abcdxyzk2
这个作者很懒,什么都没留下…
展开
-
MPTCP skb路径
meta_sk->reinject_queue 跟 meta_sk->sk_write_queue 差不多,目前的pm中reinject_queue的发送优先级高于sk_write_queue。相同的[seq, endseq]会同时存在meta_sk->sk_write_queue, meta_sk->reinject_queue, subsk->sk_write_queue。原创 2023-07-28 19:22:22 · 43 阅读 · 1 评论 -
MPTCP 64bit seq
接收端只有在 MPTCPHDR_SEQ64_SET 启用时 MPTCPHDR_SEQ64_INDEX, MPTCPHDR_SEQ64_OFO 才有用, 见 mptcp_get_64_bit。在 mptcp_check_sndseq_wrap 中 snd_hiseq_index ^= 1, 然后 snd_high_order[i] += 2;所以 rcv_high_order 使用 rcv_high_order[i] 和 rcv_high_order[i+1]。原创 2023-07-24 21:37:01 · 50 阅读 · 0 评论 -
MPTCP DSS && MPTCPHDR_INF
处理完一个或多个接收包(=一个发送包)后调mptcp_reset_mapping,重置 map_data_len,map_data_seq,map_subseq,map_data_fin,mapping_present。三次握手后 maskter_sk = meta_sk, 然后 meta_sk 会重新分配seq, snd_nxt, rcv_nxt, write_seq, copied_seq 等。= 0 并且没有established连接,见 mptcp_verif_dss_csum()原创 2023-07-23 17:08:21 · 52 阅读 · 0 评论 -
MPTCP pre_established fully_established
如果多个包全不是mptcp包,则mapping_present=0,那么mptcp_queue_skb() 会直接return,然后 tp->rcv_nxt - tp->copied_seq > 65536, 然后被reset。如果前一部分是mptcp的包,后一部分不是mptcp包,则mapping_present=1,然后会被mptcp_verif_dss_csum() reset。所以客户端需要 mptcp_ack_timer,不停的发送第三个ack,直到收到第四个ack。原创 2023-07-22 14:42:46 · 47 阅读 · 0 评论 -
MPTCP_OPTION
解析见 mptcp_parse_options()原创 2023-07-20 20:08:32 · 35 阅读 · 0 评论 -
mptcp_version
v1: 在option=MPTCP_SUB_ADD_ADDR 时需要加密,收包时在 mptcp_handle_add_addr 验证。mptcp_version 只有两个版本 v0、v1。原创 2023-07-19 19:07:10 · 53 阅读 · 0 评论 -
mptcp建连过程
mptcp建连过程原创 2023-07-18 19:46:47 · 80 阅读 · 0 评论