博客
关于我
P2P原理及UDP穿透简单说明
阅读量:198 次
发布时间:2019-02-28

本文共 1273 字,大约阅读时间需要 4 分钟。

UDP实现NAT穿透(打洞)技术

1. P2P网络的基本概念

P2P(对等联网)是一种网络通信模式,在此模式下,各个设备直接相互连接,不需要通过中转服务器。常见的应用包括QQ、MSN等即时通讯工具,以及文件传输和分布式数据计算等。

2. NAT穿透的必要性

在P2P网络中,直接的设备通信面临一个挑战:内网设备通常使用非全球唯一的局域网地址(如192.168.x.x)。这些地址在互联网上传输时会被路由器进行NAT转换。为了实现设备间的直接通信,必须通过某种方式“打洞”绕过NAT限制。

3. NAT的基本原理

NAT(网络地址转换)最初由路由器实现,用于将内部网络(内网)的非全球唯一IP地址转换为外网可用的地址。NAT有两种主要类型:

  • Cone NAT:固定映射端口,适用于单个外网设备。
  • Symmetric NAT:动态映射端口,适用于多个内网设备。

4. P2P通信中的NAT穿透

在P2P网络中,内网设备需要通过外网服务器(如C端)作为中转,实现双向通信。以下是实现过程:

A. 通信流程图示

A<----------------------->NatA<------------------->C<----------------->NatB<--------->B
  • A和B位于同一局域网,IP地址为192.168.1.100,端口默认为4000。
  • NatA和NatB是外网路由器,分别拥有全球唯一IP地址(如222.182.100.1和222.182.100.2)。
  • C是外网服务器,IP地址为222.182.100.3,端口固定为4001。

B. 内网设备与外网服务器的连接

  • A向NatA发送消息,NatA将消息转发给C。
  • C接收消息后,向NatA询问A的Session信息,NatA返回A的IP地址和端口(192.168.1.100:4000)。
  • C记录此Session信息,并将消息转发给B。
  • NatB接收消息后,将消息转发给B。
  • C. 双向通信实现

  • A和B需要互相了解彼此的Session信息。
  • C向A发送B的Session信息,A利用这个信息向B发送消息。
  • 同时,C向B发送A的Session信息,B利用这个信息向A发送消息。
  • 通过这种方式,A和B实现了双向通信,打破了NAT的限制。
  • 5. Session的时效性

    需要注意的是,Session在路由器上有时效性(通常为1分钟到几小时不定)。为了保持Session有效,必须定期发送保活包。

    6. 常见问题与解决方案

    • 多个内网设备:每台内网设备都需要通过外网服务器进行Session映射,才能实现与其他内网设备的通信。
    • Cone NAT与Symmetric NAT的区别:Cone NAT固定映射端口,适用于单个设备;Symmetric NAT动态映射端口,适用于多个设备。

    7. 实现总结

    通过外网服务器作为中转,内网设备可以绕过NAT限制,实现P2P通信。这种方法简单易行,但需要定期维护Session的有效性。对于多个内网设备,外网服务器需支持多Session映射。

    转载地址:http://fsvj.baihongyu.com/

    你可能感兴趣的文章
    php学习之基础语法
    查看>>
    RabbitMQ集群 - 仲裁队列、Raft协议(最详细的选举流程)
    查看>>
    PHP学习总结(11)——PHP入门篇之WAMPServer多站点配置
    查看>>
    PHP学习总结(12)——PHP入门篇之变量
    查看>>
    PHP学习总结(13)——PHP入门篇之常量
    查看>>
    PHP学习总结(14)——PHP入门篇之常用运算符
    查看>>
    PHP学习总结(1)——PHP入门篇之PHP可以做什么?
    查看>>
    PHP学习总结(2)——PHP入门篇之PHP代码标识
    查看>>
    PHP学习总结(3)——PHP入门篇之PHP的echo语句
    查看>>
    PHP学习总结(4)——PHP入门篇之PHP计算表达式
    查看>>
    PHP学习总结(5)——PHP入门篇之PHP字符串
    查看>>
    PHP学习总结(6)——PHP入门篇之PHP语句结束符
    查看>>
    PHP学习总结(7)——PHP入门篇之PHP注释
    查看>>
    rabbitmq重启失败
    查看>>
    PHP学习总结(9)——PHP入门篇之WAMPServer服务控制面板介绍
    查看>>
    php学习笔记---php调试和开发工具整理
    查看>>
    PHP学习笔记一:谁动了你的mail(),PHP?
    查看>>
    PHP安全实战
    查看>>
    php安装扩展
    查看>>
    php实战第二十二天
    查看>>