TCP网络穿透

文章目录

预备知识

tcp协议 https://blog.csdn.net/wzj_whut/article/details/86693870
upd穿透原理 https://blog.csdn.net/wzj_whut/article/details/86838344

难点

主要在于系统接口的限制. socket相关的接口有
connect, sendto, recvfrom, send, recv
使用UDP编程时, 创建socket之后, 就可以使用这个socket向任意地址发送数据.
但是TCP编程不一样, 一旦处理连接状态之后, 这个socket就不能再向其它地址发送数据.

流程

本图不包含局域网场景. 只描述公网之间的TCP穿透过程

端口预测流程
设双方分别为A, B

A 主机端口 p+0
A 主机端口 p+1
A 主机端口 p+2
TCP穿透服务器
NAT端口 n1
NAT端口 n2
NAT端口 n3
NAT端口 n3+x
根据p, n1, n2, n3, 判断NAT的端口映射规则, 假设每次递增 +x
B: NAT

同样的方式, 可以预测出B的NAT端口

完整流程

A
B
执行端口预测流程,
获取预测的
NAT地址 Na
主机地址 La
执行端口预测流程,
获取预测的
NAT地址 Nb
主机地址 Lb
通过sip等即通信协议, 交换地址
创建tcp socket, bind La
创建tcp socket, bind Lb
connect -> Nb
connect -> Na

端口预测的结果也可能不正确, 特别是当用户的网络非常繁忙时, 预测的端口有可能被其它人使用.
因此, 穿透失败之后, 需要再尝试几次.

猜你喜欢

转载自blog.csdn.net/wzj_whut/article/details/86918874