调整打洞频率
This commit is contained in:
@@ -199,7 +199,7 @@ impl ContextInner {
|
|||||||
if let Err(e) = udp.send_to(buf, addr) {
|
if let Err(e) = udp.send_to(buf, addr) {
|
||||||
log::warn!("{:?},add={:?}", e, addr);
|
log::warn!("{:?},add={:?}", e, addr);
|
||||||
}
|
}
|
||||||
thread::sleep(Duration::from_millis(1));
|
thread::sleep(Duration::from_millis(3));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn try_send_all_main(&self, buf: &[u8], addr: SocketAddr) {
|
pub fn try_send_all_main(&self, buf: &[u8], addr: SocketAddr) {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6};
|
use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6};
|
||||||
|
use std::ops::{Div, Mul};
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use std::{io, thread};
|
use std::{io, thread};
|
||||||
@@ -249,6 +250,7 @@ impl Punch {
|
|||||||
id: Ipv4Addr,
|
id: Ipv4Addr,
|
||||||
mut nat_info: NatInfo,
|
mut nat_info: NatInfo,
|
||||||
punch_tcp: bool,
|
punch_tcp: bool,
|
||||||
|
count: usize,
|
||||||
) -> io::Result<()> {
|
) -> io::Result<()> {
|
||||||
if self.context.route_table.no_need_punch(&id) {
|
if self.context.route_table.no_need_punch(&id) {
|
||||||
log::info!("已打洞成功,无需打洞:{:?}", id);
|
log::info!("已打洞成功,无需打洞:{:?}", id);
|
||||||
@@ -320,7 +322,11 @@ impl Punch {
|
|||||||
//预测范围内最多发送max_k1个包
|
//预测范围内最多发送max_k1个包
|
||||||
let max_k1 = 60;
|
let max_k1 = 60;
|
||||||
//全局最多发送max_k2个包
|
//全局最多发送max_k2个包
|
||||||
let max_k2 = rand::thread_rng().gen_range(600..800);
|
let mut max_k2: usize = rand::thread_rng().gen_range(600..800);
|
||||||
|
if count > 1 {
|
||||||
|
//递减探测规模
|
||||||
|
max_k2 = max_k2.mul(4).div(3).div(count).max(max_k1 as usize);
|
||||||
|
}
|
||||||
let port = nat_info.public_ports.get(0).map(|e| *e).unwrap_or(0);
|
let port = nat_info.public_ports.get(0).map(|e| *e).unwrap_or(0);
|
||||||
if nat_info.public_port_range < max_k1 * 3 {
|
if nat_info.public_port_range < max_k1 * 3 {
|
||||||
//端口变化不大时,在预测的范围内随机发送
|
//端口变化不大时,在预测的范围内随机发送
|
||||||
@@ -336,8 +342,7 @@ impl Punch {
|
|||||||
} else {
|
} else {
|
||||||
(max_port - min_port + 1) as usize
|
(max_port - min_port + 1) as usize
|
||||||
};
|
};
|
||||||
let mut nums: Vec<u16> = (min_port..max_port).collect();
|
let mut nums: Vec<u16> = (min_port..=max_port).collect();
|
||||||
nums.push(max_port);
|
|
||||||
nums.shuffle(&mut rand::thread_rng());
|
nums.shuffle(&mut rand::thread_rng());
|
||||||
self.punch_symmetric(&nums[..k], buf, &nat_info.public_ips, max_k1 as usize)?;
|
self.punch_symmetric(&nums[..k], buf, &nat_info.public_ips, max_k1 as usize)?;
|
||||||
}
|
}
|
||||||
@@ -401,7 +406,7 @@ impl Punch {
|
|||||||
}
|
}
|
||||||
let addr = SocketAddr::V4(SocketAddrV4::new(*pub_ip, *port));
|
let addr = SocketAddr::V4(SocketAddrV4::new(*pub_ip, *port));
|
||||||
self.context.send_main_udp(0, buf, addr)?;
|
self.context.send_main_udp(0, buf, addr)?;
|
||||||
thread::sleep(Duration::from_millis(2));
|
thread::sleep(Duration::from_millis(3));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(ports.len())
|
Ok(ports.len())
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ fn punch_start(
|
|||||||
log::error!("{:?}", e);
|
log::error!("{:?}", e);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if let Err(e) = punch.punch(packet.buffer(), peer_ip, nat_info, count < 2) {
|
if let Err(e) = punch.punch(packet.buffer(), peer_ip, nat_info, count < 2, count) {
|
||||||
log::warn!("{:?}", e)
|
log::warn!("{:?}", e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -190,7 +190,7 @@ fn punch_request(
|
|||||||
) {
|
) {
|
||||||
log::warn!("{:?}", e)
|
log::warn!("{:?}", e)
|
||||||
}
|
}
|
||||||
let sleep_time = [5, 6, 7];
|
let sleep_time = [6, 7];
|
||||||
Duration::from_secs(sleep_time[count % sleep_time.len()])
|
Duration::from_secs(sleep_time[count % sleep_time.len()])
|
||||||
} else {
|
} else {
|
||||||
Duration::from_secs(5)
|
Duration::from_secs(5)
|
||||||
|
|||||||
Reference in New Issue
Block a user