美文网首页
TCP打洞实现

TCP打洞实现

作者: 林鹏_dev | 来源:发表于2021-01-30 20:52 被阅读0次
  1. TCP穿透原理:

我们假设在两个不同的局域网后面分别有2台客户机A和 B,AB所在的局域网都分别通过一个路由器接入互联网。互联网上有一台服务器S。
现在AB是无法直接和对方发送信息的,AB都不知道对方在互联网上真正的IP和端口, AB所在的局域网的路由器只允许内部向外主动发送的信息通过。对于B直接发送给A的路由器的消息,路由会认为其“不被信任”而直接丢弃。

2.简单实现原理

要实现 AB直接的通讯,就必须进行以下3步:A首先连接互联网上的服务器S并发送一条消息(对于UDP这种无连接的协议其实直接初始会话发送消息即可),这样S就获取了A在互联网上的实际终端(发送消息的IP和端口号)。接着 B也进行同样的步骤,S就知道了AB在互联网上的终端(这就是“打洞”)。接着S分别告诉A和B对方客户端在互联网上的实际终端,也即S告诉A客户B的会话终端,S告诉B客户A的会话终端。这样,在AB都知道了对方的实际终端之后,就可以直接通过实际终端发送消息了(因为先前双方都向外发送过消息,路由上已经有允许数据进出的消息通道)。

  1. 程序思路:
    1:启动服务器,监听端口8877
    2:第一次启动客户端(称为client1),连上服务器,服务器将返回字符串first,标识这个是client1,同时,服务器将记录下这个客户端的(经过转换之后的)IP和端口。
    3:第二次启动客户端(称为client2),连上服务器,服务器将向其返回自身的发送端口(称为port2),以及client1的(经过转换之后的)IP和端口。
    4:然后服务器再发client1返回client2(经过转换之后的)IP和端口,然后断开与这两个客户端的连接(此时,服务器的工作已经全部完成了)
    5:client2尝试连接client1,这次肯定会失败,但它会在路由器上留下记录,以帮忙client1成功穿透,连接上自己,然后设置port2端口为可重用端口,并监听端口port2。
    6:client1尝试去连接client2,前几次可能会失败,因为穿透还没成功,如果连接10次都失败,就证明穿透失败了(可能是硬件不支持),如果成功,则每秒向client2发送一次hello, world
    7:如果client1不断出现send message: Hello, world,client2不断出现recv message: Hello, world,则证明实验成功了,否则就是失败了。

相关文章

  • TCP打洞实现

    TCP穿透原理: 我们假设在两个不同的局域网后面分别有2台客户机A和 B,AB所在的局域网都分别通过一个路由器接入...

  • UDP打洞的由来?TCP打洞为什么不常见?

    为什么网上讲到的P2P打洞基本上都是基于UDP协议的打洞?难道TCP不可能打洞?还是TCP打洞难于实现?假设现在有...

  • TCP打洞和UDP打洞的区别

    原文地址: http://f543711700.iteye.com/blog/978887 为什么网上讲到的P2P...

  • 细说TCP的可靠传输、流量控制、拥塞控制

    目录 TCP如何实现可靠传输? TCP如何实现流量控制?(滑动窗口) TCP如何实现拥塞控制?(慢开始、拥塞避免、...

  • socket编程

    python实现socket编程 实现的主要过程是: tcp server: tcp client 函数 的实现原型:

  • TCP协议简介

    TCP协议的特点(需要解决的问题) 1、TCP如何实现可靠传输2、TCP如何实现流量控制3、TCP如何避免网络拥塞...

  • TCP、UDP知识点

    TCP、UDP,以及他们的区别 TCP(Transmission Control Protocol)TCP充分实现...

  • 小老鼠

    1.编程实现如下功能1)老老鼠年龄/品种/毛色/打洞 ,小老鼠年龄/品种/毛色/打洞/上灯台/偷油2):方法的覆盖...

  • Linux下基于C++的TCP连接demo代码分享(C++,Li

    #C++实现TCP连接 @(C++代码)[网络编程, tcp, C++, C++实现] server.cpp: #...

  • Tcp与Udp封装与Listener

    介绍演示 Tcp实现方式 Udp实现方式

网友评论

      本文标题:TCP打洞实现

      本文链接:https://www.haomeiwen.com/subject/jqiktltx.html