• NAT路由打洞机制


      首先要注意,路由器有一个保护机制,就是不会无缘无故的接受陌生的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不需要启动额外的端口号

     

  • 相关阅读:
    Excel:大小写转换
    Qt Quick开发环境搭建
    如何集成QML与C++?
    第十八章:QML扩展
    如何编写整洁的Qml代码
    Linux环境,4个版本的微信对比
    Oracle 按照 IN的顺序排序结果集
    __VA_ARGS__的用法
    手写Web图片懒加载~
    Selenuim+Python之元素定位总结及实例说明
  • 原文地址:https://www.cnblogs.com/letlifestop/p/11702782.html
Copyright © 2020-2023  润新知