zoukankan      html  css  js  c++  java
  • 打洞机制

    首先要注意,路由器有一个保护机制,就是不会无缘无故的接受陌生的IP发送过来的SYN包
    NAT打洞机制:

    1. 当前客户端A想和客户端B建立连接,服务器开了两个端口,一个是主连接端口,一个是辅助连接端口
    2. 首先,A,B与主连接端口建立连接。这个时候A要和B建立连接,首先A要和协助端口建立连接,然后在这个端口启动监听
    3. 然后服务器主连接将A经过NAT-A转换的公网IP和端口号发送给B,B收到之后首先和协助端口建立连接,发送一些数据之后断开,目的是让服务器知道B经过NAT-B转换后的公网IP
    4. 然后B这个时候B已经知道了A的公网IP,然后尝试和A建立连接(如果不是第一次的话,就说明B向A打洞之前已经成功了),但是A这个时候是第一次接收到B发送的SYN包,由于路由器的保护机制,会丢掉这个包,但是会记录B的IP地址和端口号
    5. 做完这些之后,B向服务器主连接端口发送信息“我已经准备好了”,B开启监听服务,然后服务器端将NAT-B的IP和端口号发送给A,因为之前A已经接受过B的一个SYN包了,所以这次是允许建立的,然后B到A的洞就已经打好了
    6. 关于A到B的洞,这个时候A直接向B发送数据即可,因为第三步的时候,B就已经收到过A的IP和端口号了,所以再收到A发送过来的连接请求的时候,会认为是合法的

    TCP打洞机制和NAT类似,但是UDP稍微有些不同,TCP规定一个端口号只能绑定一个套接字,而UDP允许一个端口号可以绑定多个套接字,所以UDP不需要启动额外的端口号

  • 相关阅读:
    创建可按比例调整的布局的 Windows 窗体
    Visual C# 2010 实现资源管理器
    Visual C# 2010 实现菜单项和状态栏
    使用异步事件在后台进行计算并报告进度
    A Byte of Python(简明Python教程) for Python 3.0 下载
    面向对象思想
    封装变化(二)
    好玩,看你的博客价值几何?
    基于消息与.Net Remoting的分布式处理架构
    设计之道
  • 原文地址:https://www.cnblogs.com/frankltf/p/13815893.html
Copyright © 2011-2022 走看看