预备知识
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
同样的方式, 可以预测出B的NAT端口
完整流程
端口预测的结果也可能不正确, 特别是当用户的网络非常繁忙时, 预测的端口有可能被其它人使用.
因此, 穿透失败之后, 需要再尝试几次.