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不需要启动额外的端口号

  • 相关阅读:
    mysql主从只同步部分库或表
    springboot~aspect通过@annotation进行拦截
    ELK~fluentd将日志文件增量读到es里
    怎么自学 Java ?和盘托出
    一个后端开发的 Vue 笔记【入门级】
    企业级数据大屏设计如何实现
    Vue.js官方中文教程
    vue学习笔记 ---- 系列文章
    基于Asp.net core Kestrel的超迷你http服务器 ---- AServer
    Docker学习—概念及基本应用
  • 原文地址:https://www.cnblogs.com/frankltf/p/13815893.html
Copyright © 2011-2022 走看看