转自:http://hi.baidu.com/xwgates/blog/item/4cbdbf31d88f7da95fdf0eed.html
UDP打洞原理
UDP打洞原理
2007-04-12 15:12
呵呵,“打洞”原理:
只有NAT确信内部想与外部通信,NAT才会让外部的数据包进入内部。那么NAT是靠什么“确信内部想与外部通信”,就是内部发送一个数据包到这个“外部地址”
比如下面的网络环境:
Client A ->Nat A->....internet <-Nat B<-Client B
比如Client A想发送给Client B一个信息“Hello”。那么直接给Client B的公网地址发送信息,会被NAT B丢掉,那么怎么让NAT B不丢掉这个信息呢?就是告诉NAT B“Client B确实想与Client A通信”,如果告诉NAT B?简单,让Client B发送一个“信息”到Client A的公网地址就好(这个信息就是“打洞”包)
过程:
1 Client A告诉Server : 我想与Client B通信
2 Server通知Client B :Client A想与你通信
3 Client B发送一个“打洞包”到Client A的公网地址(这个打洞包不需要携带任何有效信息)
4 Client A发送“Hello”到Client B,由于第三步的原因,NAT不会拒绝这个请求,通信成功。
呵呵,我就不给你回信了。
---------------------------------------------------------------
简单的就是A通知服务器,让服务器告诉 B要通信,然后让B打洞,这样,A 就可以同B通信了
这中间,首先要服务器作一个沟通的作用
只有NAT确信内部想与外部通信,NAT才会让外部的数据包进入内部。那么NAT是靠什么“确信内部想与外部通信”,就是内部发送一个数据包到这个“外部地址”
比如下面的网络环境:
Client A ->Nat A->....internet <-Nat B<-Client B
比如Client A想发送给Client B一个信息“Hello”。那么直接给Client B的公网地址发送信息,会被NAT B丢掉,那么怎么让NAT B不丢掉这个信息呢?就是告诉NAT B“Client B确实想与Client A通信”,如果告诉NAT B?简单,让Client B发送一个“信息”到Client A的公网地址就好(这个信息就是“打洞”包)
过程:
1 Client A告诉Server : 我想与Client B通信
2 Server通知Client B :Client A想与你通信
3 Client B发送一个“打洞包”到Client A的公网地址(这个打洞包不需要携带任何有效信息)
4 Client A发送“Hello”到Client B,由于第三步的原因,NAT不会拒绝这个请求,通信成功。
呵呵,我就不给你回信了。
---------------------------------------------------------------
简单的就是A通知服务器,让服务器告诉 B要通信,然后让B打洞,这样,A 就可以同B通信了
这中间,首先要服务器作一个沟通的作用