allow peer rpc split packet, so tunnel mtu can be small (#116)

This commit is contained in:
Sijie.Sun
2024-05-16 08:18:35 +08:00
committed by GitHub
parent 58d2ec475c
commit f665de9b18
6 changed files with 223 additions and 65 deletions

View File

@@ -146,7 +146,7 @@ where
reserve_buf(
&mut self_mut.buf,
*self_mut.max_packet_size,
*self_mut.max_packet_size * 64,
*self_mut.max_packet_size * 32,
);
let cap = self_mut.buf.capacity() - self_mut.buf.len();

View File

@@ -118,7 +118,7 @@ impl TunnelListener for QUICTunnelListener {
};
Ok(Box::new(TunnelWrapper::new(
FramedReader::new_with_associate_data(r, 4500, Some(Box::new(arc_conn.clone()))),
FramedReader::new_with_associate_data(r, 2000, Some(Box::new(arc_conn.clone()))),
FramedWriter::new_with_associate_data(w, Some(Box::new(arc_conn))),
Some(info),
)))

View File

@@ -12,7 +12,7 @@ use super::{
IpVersion, Tunnel, TunnelError, TunnelListener,
};
const TCP_MTU_BYTES: usize = 64 * 1024;
const TCP_MTU_BYTES: usize = 2000;
#[derive(Debug)]
pub struct TcpTunnelListener {

View File

@@ -33,7 +33,7 @@ use super::{
IpVersion, Tunnel, TunnelConnCounter, TunnelError, TunnelListener, TunnelUrl,
};
pub const UDP_DATA_MTU: usize = 65000;
pub const UDP_DATA_MTU: usize = 2000;
type UdpCloseEventSender = UnboundedSender<Option<TunnelError>>;
type UdpCloseEventReceiver = UnboundedReceiver<Option<TunnelError>>;
@@ -318,7 +318,7 @@ impl UdpTunnelListenerData {
let socket = self.socket.as_ref().unwrap().clone();
let mut buf = BytesMut::new();
loop {
reserve_buf(&mut buf, UDP_DATA_MTU, UDP_DATA_MTU * 128);
reserve_buf(&mut buf, UDP_DATA_MTU, UDP_DATA_MTU * 16);
let (dg_size, addr) = socket.recv_buf_from(&mut buf).await.unwrap();
tracing::trace!(
"udp recv packet: {:?}, buf: {:?}, size: {}",
@@ -555,7 +555,7 @@ impl UdpTunnelConnector {
tokio::spawn(async move {
let mut buf = BytesMut::new();
loop {
reserve_buf(&mut buf, UDP_DATA_MTU, UDP_DATA_MTU * 128);
reserve_buf(&mut buf, UDP_DATA_MTU, UDP_DATA_MTU * 16);
let ret;
tokio::select! {
_ = close_event_recv.recv() => {