ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ TCP ืœืฉื™ืคื•ืจ ื‘ื™ืฆื•ืขื™ ื”ืจืฉืช

ื”ืจืฉืช ื”ื’ืœื•ื‘ืœื™ืช ื‘- Google Cloud ืžืกืคืงืช ืืžื™ื ื•ืช ื’ื‘ื•ื”ื” ื•ื–ืžืŸ ืื—ื–ื•ืจ ื ืžื•ืš ืขืœ ื™ื“ื™ ื—ื™ื‘ื•ืจ ืืคืœื™ืงืฆื™ื•ืช ื‘ื™ืŸ ืื–ื•ืจื™ื ื•ืื–ื•ืจื™ ื–ืžื™ื ื•ืช ื‘ืœื™ ืœืฆืืช ืžื”ืจืฉืช ืฉืœ Google. ืขื ื–ืืช, ื”ื’ื“ืจื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ Linux TCP/IP ืžื•ืชืืžื•ืช ืœืจื•ื‘ ืœืกื‘ื™ื‘ื•ืช ืžืงื•ืžื™ื•ืช, ื•ื™ื›ื•ืœื•ืช ืœื’ืจื•ื ืœืฆื•ื•ืืจื™ ื‘ืงื‘ื•ืง ื‘ื‘ื™ืฆื•ืขื™ื ื‘ืขื ืŸ.

ื›ื“ื™ ืœื”ืฉื™ื’ ืืช ื”ื‘ื™ืฆื•ืขื™ื ื”ื›ื™ ื˜ื•ื‘ื™ื ื‘- Google Cloud, ืžื•ืžืœืฅ ืœื”ืฉืชืžืฉ ื‘ื”ื’ื“ืจื•ืช TCP/IP ืฉืžื•ืคื™ืขื•ืช ื‘ืžืกืžืš ื”ื–ื”, ืฉืขื‘ืจื• ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ืžื™ื•ื—ื“ ืœืกื‘ื™ื‘ืช ื”ืขื ืŸ.

ื”ื”ื’ื“ืจื•ืช ืฉืžื•ื–ื›ืจื•ืช ื‘ืžืกืžืš ื”ื–ื” ื ื‘ื“ืงื• ืœืฉื™ืžื•ืฉ ื‘ืกื‘ื™ื‘ืชGoogle Cloud . ื”ื”ื’ื“ืจื•ืช ื”ืืœื” ืžื™ื•ืขื“ื•ืช ื‘ืขื™ืงืจ ืœืชืงืฉื•ืจืช ืคื ื™ืžื™ืช ื‘ื™ืŸ ืžื•ืคืขื™ื, ื•ืœื ื‘ื”ื›ืจื— ืœืชืงืฉื•ืจืช ื‘ื™ืŸ ืžื•ืคืขื™ื ืฉืœ Compute Engine ืœื‘ื™ืŸ ื›ืชื•ื‘ื•ืช ื—ื™ืฆื•ื ื™ื•ืช.

ื”ืกื‘ืจ ืขืœ ืžื’ื‘ืœืช ื”ืชืคื•ืงื”

ืคืจื•ื˜ื•ืงื•ืœ TCP ืžืฉืชืžืฉ ื‘ืžื ื’ื ื•ืŸ ืฉืœ 'ื—ืœื•ื ื•ืช' ื›ื“ื™ ืœื ื”ืœ ืืช ื–ืจื™ืžืช ื”ื ืชื•ื ื™ื ื‘ื™ืŸ ื”ืฉื•ืœื— ืœื‘ื™ืŸ ื”ืžืงื‘ืœ. ื”ืชืคื•ืงื” ื”ืžืงืกื™ืžืœื™ืช ืฉืืคืฉืจ ืœื”ืฉื™ื’ ื ืงื‘ืขืช ืœืคื™ ื”ืงืฉืจ ื”ื‘ื:

Throughput <= window size / round-trip time (RTT) latency

ื‘ืขื™ืฆื•ื‘ ื”ืžืงื•ืจื™ ืฉืœ TCP, ื’ื•ื“ืœ ื”ื—ืœื•ืŸ ื”ืžืงืกื™ืžืœื™ ืžื•ื’ื‘ืœ ืœ-65,535 ื‘ื™ื™ื˜ (64KiB โ€“ 1), ื•ืœื›ืŸ ืœืขื™ืชื™ื ืงืจื•ื‘ื•ืช ืจืฉืชื•ืช ืžื•ื“ืจื ื™ื•ืช ืžื”ื™ืจื•ืช ืœื ืžื ื•ืฆืœื•ืช ืžืกืคื™ืง, ื›ื™ ื”ืฉื•ืœื— ืžื—ื›ื” ืœืขื“ื›ื•ื ื™ ื—ืœื•ืŸ.

ืกืงืจื™ืคื˜ Shell ืœืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ื‘ื™ืฆื•ืขื™ TCP

ืžื•ืžืœืฅ ืœื”ืฉืชืžืฉ ื‘ื”ื’ื“ืจื•ืช ื”-TCP ื”ื‘ืื•ืช ื›ื“ื™ ืœืฉืคืจ ืืช ื”ื‘ื™ืฆื•ืขื™ื:

ืืคืฉืจ ืœื”ืคืขื™ืœ ืืช ื”ื”ื’ื“ืจื•ืช ื”ืžื•ืฆืขื•ืช ื”ืืœื” ื‘ืืžืฆืขื•ืช ืกืงืจื™ืคื˜ ืžืขื˜ืคืช ื”ื‘ื. ืœืคื ื™ ืฉืžืจื™ืฆื™ื ืืช ื”ืกืงืจื™ืคื˜, ื—ืฉื•ื‘ ืœื”ื—ืœื™ืฃ ืืช eth0 ื‘ืžืžืฉืง ื”ืจืฉืช ื”ืจืืฉื™ ืฉืœ ืžื•ืคืข ื”ืžื—ืฉื•ื‘.

# Set DEV to your primary network interface
DEV=eth0

# 1. Reduce MinRTO
sysctl -w net.ipv4.tcp_rto_min_us=5000

# 2. Enable Fair Queueing
tc qdisc replace dev $DEV root fq

# 3. Disable slow start after idle
sysctl -w net.ipv4.tcp_slow_start_after_idle=0

# 4. Disable TCP Cubic HyStart ACK train
echo 2 > /sys/module/tcp_cubic/parameters/hystart_detect

# 5. Increase socket memory budgets
echo 4194304 > /proc/sys/net/core/rmem_max
echo 4194304 > /proc/sys/net/core/wmem_max
echo 4194304 > /proc/sys/net/ipv4/tcp_notsent_lowat
echo "4096 262144 16777216" > /proc/sys/net/ipv4/tcp_rmem
echo "4096 262144 33554432" > /proc/sys/net/ipv4/tcp_wmem

# 6. Enable hardware GRO
ethtool -K $DEV rx-gro-hw on

ื‘ืงื˜ืขื™ื ื”ื‘ืื™ื ืžืคื•ืจื˜ื•ืช ื›ืœ ืื—ืช ืžื”ื”ื’ื“ืจื•ืช ื”ืžื•ืžืœืฆื•ืช.

ื”ืคื—ืชืช MinRTO

ื”ืคื—ืชืช ื”ืขื™ื›ื•ื‘ื™ื ื‘ื”ืขื‘ืจื” ืžื—ื“ืฉ ืžืืคืฉืจืช ื”ืชืื•ืฉืฉื•ืช ืžื”ื™ืจื” ื™ื•ืชืจ ืžืื•ื‘ื“ืŸ ื—ื‘ื™ืœื•ืช ื ืชื•ื ื™ื.

ื”ื–ืžืŸ ื”ืงืฆื•ื‘ ืœืชืคื•ื’ื” (RTO) ืฉืœ ืฉื™ื“ื•ืจ ื—ื•ื–ืจ ืฉืœ TCP ืงื•ื‘ืข ื›ืžื” ื–ืžืŸ ืฉื•ืœื— TCP ืžืžืชื™ืŸ ืœืื•ืช ACK ืœืคื ื™ ืฉื™ื“ื•ืจ ื—ื•ื–ืจ. ืžืขืจื›ืช Linux ืžืืชื—ืœืช ืืช ื”-RTO ืœืฉื ื™ื™ื” ืื—ืช (ื‘ื”ืชืื ืœืกืขื™ืฃ 2.1 ื‘-RFC 6298), ื•ืื– ืžืฉื ื” ืื•ืชื• ืœืื•ืจืš ื–ืžืŸ ื‘ื”ืชืื ืœื–ืžืŸ ื”ืœื•ืš ื•ืฉื•ื‘ (RTT) ื‘ืชื•ืกืคืช ืžืจื•ื•ื— ื‘ื™ื˜ื—ื•ืŸ.

ื”ื”ื’ื“ืจื” 'ื–ืžืŸ ื”ืชืื•ืฉืฉื•ืช ืžื™ื ื™ืžืœื™' (MinRTO) ืžื˜ืžื™ืขื” ื’ื‘ื•ืœ ืชื—ืชื•ืŸ ืœื”ืชืืžื” ื”ื–ื•. ืื ื”ื”ืขืจื›ื” ืฉืœ RTO ื ืžื•ื›ื” ืžื“ื™, ื”ื™ื ืขืœื•ืœื” ืœื’ืจื•ื ืœืฉื™ื“ื•ืจ ื—ื•ื–ืจ ืฉื’ื•ื™, ืฉื‘ื• ื”ืฉื•ืœื— ืžืฉื“ืจ ืžื—ื“ืฉ ืžื ื•ืช ื‘ื–ืžืŸ ืฉื”ืชื’ื•ื‘ื” ืขื“ื™ื™ืŸ ื‘ืชื”ืœื™ืš.

ืขืจืš ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ MinRTO ื”ื•ื 200ย ms, ืฉื”ื•ื ืขืจืš ืฉืžืจื ื™ ืžื“ื™ ืขื‘ื•ืจ ืจืฉืชื•ืช ืขื ืŸ ืžื•ื“ืจื ื™ื•ืช. ื”ืขืจืš 5ย ms ื ื‘ื“ืง ื‘ืื•ืคืŸ ื ืจื—ื‘ ื‘-Google Cloud ื•ื”ื•ื ืขืจืš ื‘ืจื™ืจืช ืžื—ื“ืœ ื‘ื˜ื•ื— ืœื—ื™ื‘ื•ืจื™ื ื‘ื™ืŸ ืฉืจืชื™ Linux ืžื•ื“ืจื ื™ื™ื ื‘- Google Cloud.

ื’ื•ืจื ื ื•ืกืฃ ื”ื•ื ืื™ืฉื•ืจื™ ืงื‘ืœื” (ACK) ืžื•ืฉื”ื™ื, ืฉื‘ื”ื ื”ืขืžื™ืช ืžืขื›ื‘ ACK ืชื’ื•ื‘ื•ืช. ื”ืขื™ื›ื•ื‘ ื”ื–ื” ืžืืคืฉืจ ืœืฉืœื•ื— ืื™ืฉื•ืจื™ ืงื‘ืœื” (ACK) ื‘ืงื‘ื•ืฆื•ืช ืขืœ ืคื ื™ ื›ืžื” ืžื ื•ืช ื ืชื•ื ื™ื, ืื• ืœืฉืœื‘ ืื™ืฉื•ืจ ืงื‘ืœื” ืขื ืžื ืช ื ืชื•ื ื™ื ื‘ื›ื™ื•ื•ืŸ ื”ื”ืคื•ืš.ACK ื˜ื™ื™ืžืจื™ื ืฉืœ ืื™ืฉื•ืจ (ACK) ืžื•ืฉื”ื” ืžื‘ื•ืกืกื™ื ืขืœ ื–ืžืŸ ื”ืœื•ืš ื•ืฉื•ื‘ (RTT), ื‘ื“ื•ืžื” ืœื˜ื™ื™ืžืจ ืฉืœ ืคืกืง ื–ืžืŸ (RTO).

ื”ื•ืจื“ืช ื”ืขืจืš ืฉืœ MinRTO ืžื–ืจื–ืช ืืช ืชื™ืงื•ืŸ ื”ืื•ื‘ื“ืŸ ื‘ื—ื™ื‘ื•ืจื™ื ืขื RTT ื ืžื•ืš, ื›ืžื• ื—ื™ื‘ื•ืจื™ื ื‘ืชื•ืš ืื–ื•ืจ ืื• ืื–ื•ืจ. ื”ื”ืชืืžื” ื”ื–ื• ืœื ืžืฉืคื™ืขื” ืขืœ ื”ืชื ื”ื’ื•ืช ื”ื—ื™ื‘ื•ืจื™ื ืฉื‘ื”ื ื–ืžืŸ ื”-RTT ื’ื‘ื•ื”, ื›ื™ ื”ื™ื ืœื ืžืฉื ื” ืืช ื–ืžืŸ ื”-RTT ื”ืžืฉื•ืขืจ ืฉืœื”ื.

ื”ื’ื“ืจืช MinRTO

ืืคืฉืจ ืœื”ื’ื“ื™ืจ ืืช MinRTO ื‘ืื—ืช ืžืฉืชื™ ื“ืจื›ื™ื:

  1. ื‘ืืžืฆืขื•ืช sysctl (Linux 6.11 ื•ืื™ืœืš):

    ืืคืฉืจ ืœื”ื’ื“ื™ืจ ืืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ MinRTO ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” sysctl:

    sysctl -w net.ipv4.tcp_rto_min_us=5000
    
  2. ืฉื™ืžื•ืฉ ื‘-ip route (ืฉืœื™ื˜ื” ื‘ื›ืœ ืžืกืœื•ืœ, ืื• ื’ืจืกืื•ืช Linux ืžื•ืงื“ืžื•ืช ื™ื•ืชืจ ืž-6.11):

    ืœื—ืœื•ืคื™ืŸ, ื‘ื’ืจืกืื•ืช ื™ืฉื ื•ืช ื™ื•ืชืจ ืฉืœ Linux ืื• ื›ื“ื™ ืœืฉืœื•ื˜ ื‘ื›ืœ ืžืกืœื•ืœ ื‘ื ืคืจื“, ืืคืฉืจ ืœื”ื’ื“ื™ืจ ืืช MinRTO ืœื›ืœ ืžืกืœื•ืœ ื‘ื ืคืจื“:

    ip route change default rto_min 5ms
    

ื”ื’ื™ืฉื” ืฉืœ ื”ื’ื“ืจืช ืžืกืœื•ืœ ืœื›ืœ ื—ื™ื‘ื•ืจ ืขื“ื™ืคื” ื‘ืกื‘ื™ื‘ื•ืช ืฉื‘ื”ืŸ ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื—ื™ื‘ื•ืจื™ื ื™ืฆืื• Google Cloud ืื• ื™ืชืงืฉืจื• ืขื ืžื—ืกื ื™ื•ืช TCP/IP ืฉืื™ื ืŸ Linux. ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื‘ืžืขืจื›ื•ืช ื”ืืœื” ื™ืฉ ื˜ื™ื™ืžืจื™ื ืฉื•ื ื™ื ืฉืœ ืื™ืฉื•ืจ (ACK) ืžื•ืฉื”ื”. ืœืคืจื™ืกื” ืจื—ื‘ื” ื‘ืื™ื ื˜ืจื ื˜ ื”ืฆื™ื‘ื•ืจื™, ืžื•ืžืœืฅ ืœื”ืฉืชืžืฉ ื‘ื”ื’ื“ืจืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ืฉืžืจื ื™ืช ืฉืœ minRTO ื•ืœื”ื—ื™ืœ ืืช ื”ื”ื’ื“ืจื” ืฉืœ 5ย ms ืจืง ืขืœ ืžืกืœื•ืœื™ื ื‘ืชื•ืš Google Cloud ื”ืขื ืŸ ื”ื•ื•ื™ืจื˜ื•ืืœื™ ื”ืคืจื˜ื™ (VPC).

ื”ืคืขืœืช ืชื•ืจ ื”ื•ื’ืŸ

ืœืฆืžืฆื ืืช ื”ืขื•ืžืก ื•ืืช ืื•ื‘ื“ืŸ ื”ืžื ื•ืช ืฉื ื’ืจืžื™ื ื›ืชื•ืฆืื” ืžืคืจืฆื™ ืคืขื™ืœื•ืช ืฉืœ ื”ืืคืœื™ืงืฆื™ื”.

ื‘ื ื™ื’ื•ื“ ืœืชื•ืจื™ื ืจื’ื™ืœื™ื ืžืกื•ื’ FIFO (ืจืืฉื•ืŸ ืฉื ื›ื ืก, ืจืืฉื•ืŸ ืฉื™ื•ืฆื), ืชื•ืจื™ FQ (Fair Queueing) ืžื—ืœืงื™ื ืืช ืจื•ื—ื‘ ื”ืคืก ื‘ืื•ืคืŸ ื”ื•ื’ืŸ ื‘ื™ืŸ ื–ืจื™ืžื•ืช ืฉื•ื ื•ืช. ื”ื™ื ื’ื ืžืืคืฉืจืช ืœื”ื’ื‘ื™ืœ ืืช ื ืคื— ื”ืชื ื•ืขื” ืขืœ ื™ื“ื™ ื—ื™ืฉื•ื‘ ืงืฆื‘ ื”ืžืกื™ืจื” ื”ืื•ืคื˜ื™ืžืœื™ ื•ื–ืžืŸ ื”ืžืกื™ืจื” ื”ืื•ืคื˜ื™ืžืœื™ ืฉืœ ื›ืœ ืžื ื” (packet) ื‘ื›ืœ ื—ื™ื‘ื•ืจ TCP. ืื FQ ืงื™ื™ื, ืžื—ืกื ื™ืช ื”-TCP ืžืกืชืžื›ืช ืขืœ FQ ื›ื“ื™ ืœื”ืฉื”ื•ืช ื—ื‘ื™ืœื•ืช ืขื“ ืœื–ืžืŸ ื”ืžืกื™ืจื” ื”ืื•ืคื˜ื™ืžืœื™ ืฉืœื”ืŸ. ื”ืงืฆื‘ ื”ื–ื” ืžืคื—ื™ืช ืืช ืคืจืฆื™ ื”ืชื ื•ืขื” ื‘ื–ืจื™ืžื”, ื•ื›ืš ืžืฆืžืฆื ืืช ื ืคื™ืœืช ื”ืžื ื•ืช ื•ืืช ื”ืฉื™ื“ื•ืจ ื”ื—ื•ื–ืจ ืฉืœื”ืŸ.

ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืืช FQ traffic shaper ื›ื›ืœื™ ืœืขื™ืฆื•ื‘ ืชืขื‘ื•ืจื” ืฉืœ ืžื›ืฉื™ืจ ื”ืจืฉืช, ืžืฉืชืžืฉื™ื ื‘ืคืงื•ื“ื” ื”ื‘ืื” ืฉืœ tc (traffic control):

tc qdisc replace dev $DEV root fq

ื‘ืžื•ืคืขื™ื ื’ื“ื•ืœื™ื ืขื ืจื•ื—ื‘ ืคืก ื’ื‘ื•ื” ืฉืœ ื™ืฆื™ืื”, ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉืœืžื›ืฉื™ืจ ื”ืจืฉืช ื™ืฉ ื›ืžื” ืชื•ืจื™ื ืœื”ืขื‘ืจื”. ื‘ืžืงืจื™ื ื›ืืœื”, ืขื“ื™ืฃ ืœืคืฆืœ ืืช ื ื™ื”ื•ืœ ื”ืชื ื•ืขื” ื‘ื™ืŸ ืชื•ืจื™ ืฉื™ื“ื•ืจ ืขืœ ื™ื“ื™ ื”ืชืงื ืช ื”ื›ืœื™ Multi Queue (MQ) traffic shaper. ื–ื”ื• ืžืจื‘ื‘ ืฉืžืฆืจืฃ ืžืขืฆื‘ ืชื ื•ืขื” ืขืฆืžืื™ ืœื›ืœ ืชื•ืจ ืฉื™ื“ื•ืจ. ื”ื’ื“ืจืช ืžื’ื‘ื™ืœื™ ืชื ื•ืขื” ืœื›ืœ ืชื•ืจ ืžืคื—ื™ืชื” ืืช ื”ืชื—ืจื•ืช ืขืœ ื ืขื™ืœื•ืช ื•ืขืœ ืฉื•ืจื•ืช ืžื˜ืžื•ืŸ ื‘ื™ืŸ ื”ืžืขื‘ื“ื™ื.

ื”ืฉื‘ืชืช ื”ื”ืชื—ืœื” ื”ืื™ื˜ื™ืช ืื—ืจื™ ืžืฆื‘ ื”ืžืชื ื”

ืฉืžื™ืจื” ืขืœ ืงืฆื‘ ื”ืขื‘ืจื” ื’ื‘ื•ื” ืื—ืจื™ ืฉื”ื—ื™ื‘ื•ืจ ื”ื™ื” ื‘ืžืฆื‘ ืœื ืคืขื™ืœ.

ื›ื“ื™ ืœืžื ื•ืข ืขื•ืžืก, ื—ื™ื‘ื•ืจื™ TCP ืžืชื—ื™ืœื™ื ื‘ืฉืœื™ื—ืช ื ืชื•ื ื™ื ื‘ืงืฆื‘ ื ืžื•ืš ื•ืื– ืžื’ื“ื™ืœื™ื ืืช ื”ืงืฆื‘ ื‘ืื•ืคืŸ ืืงืกืคื•ื ื ืฆื™ืืœื™ ืขื“ ืœื–ื™ื”ื•ื™ ืื•ื‘ื“ืŸ ืžื ื•ืช. ื”ืฉืœื‘ ื”ืจืืฉื•ื ื™ ื”ื–ื” ื ืงืจื ื”ืชื—ืœื” ืื™ื˜ื™ืช.

ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืคืจื•ื˜ื•ืงื•ืœ TCP ื—ื•ื–ืจ ืœื”ื’ื“ืจื•ืช ื”ืฉืžืจื ื™ื•ืช ืฉืœ 'ื”ืชื—ืœื” ืื™ื˜ื™ืช' ืื—ืจื™ ืชืงื•ืคื” ืฉืœ ื—ื•ืกืจ ืคืขื™ืœื•ืช. ืชืงื•ืคืช ื—ื•ืกืจ ืคืขื™ืœื•ืช ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืงืฆืจื” ื›ืžื• ืคืกืง ื–ืžืŸ ืื—ื“ ืฉืœ ืฉื™ื“ื•ืจ ื—ื•ื–ืจ (RTO), ื›ืคื™ ืฉืžื•ื’ื“ืจ ื‘-RFC 2581. ื”ืฉื‘ืชื” ืฉืœ ื”ืชื›ื•ื ื” ื”ื–ื• ืžืืคืฉืจืช ืœื—ื“ืฉ ืืช ื”ื—ื™ื‘ื•ืจ ื‘ืื•ืคืŸ ืžื™ื™ื“ื™ ื‘ืงืฆื‘ ื”ื™ื“ื•ืข ื”ืื—ืจื•ืŸ.

ื›ืืฉืจ ืืคืฉืจ, ื”ืืคืœื™ืงืฆื™ื•ืช ืฆืจื™ื›ื•ืช ืœื”ืฉืชืžืฉ ื‘ื—ื™ื‘ื•ืจื™ื ืœื˜ื•ื•ื— ืืจื•ืš ื‘ืžืงื•ื ืœื™ืฆื•ืจ ื—ื™ื‘ื•ืจื™ื ื—ื•ื–ืจื™ื ืœืื•ืชื• ืขืžื™ืช. ื›ืš ื ืžื ืขืช ื”ืขืœื•ืช ืฉืœ ื™ืฆื™ืจืช ื”ื—ื™ื‘ื•ืจ, ื•ืžื™ื“ืข ืขืœ ืขื•ืžืก ื ืฉืžืจ. ืื‘ืœ ื’ื ื‘ื—ื™ื‘ื•ืจื™ื ืืจื•ื›ื™ ื˜ื•ื•ื—, ืื—ืจื™ ืชืงื•ืคื” ืฉืœ ื—ื•ืกืจ ืคืขื™ืœื•ืช, ืคืจื•ื˜ื•ืงื•ืœ TCP ืฉื•ื›ื— ืืช ืคืจื˜ื™ ื”ืขื•ืžืก ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื•ื—ื•ื–ืจ ืœื”ื’ื“ืจื” ื”ืฉืžืจื ื™ืช ื”ืจืืฉื•ื ื™ืช ื•ืœืฉืœื‘ 'ื”ืชื—ืœื” ืื™ื˜ื™ืช'.

ื›ื“ื™ ืœื”ืฉื‘ื™ืช ืืช ื”ืชื›ื•ื ื” 'ื”ืชื—ืœื” ืื™ื˜ื™ืช ืื—ืจื™ ื—ื•ืกืจ ืคืขื™ืœื•ืช', ืžืฉืชืžืฉื™ื ื‘ืคืงื•ื“ื” ื”ื‘ืื”:

sysctl -w net.ipv4.tcp_slow_start_after_idle=0

ื”ืฉื‘ืชื” ืฉืœ ืจืฆืฃ ืื™ืฉื•ืจื™ื ืฉืœ TCP Cubic HyStart

ืœื”ื’ื“ื™ืœ ื‘ืžื”ื™ืจื•ืช ืืช ืงืฆื‘ ื”ื”ืขื‘ืจื” ืขืœ ื™ื“ื™ ื”ืชืขืœืžื•ืช ืžืื•ืชื•ืช ืฉื•ื•ื ืฉืœ ืขื•ืžืก.

ืงืฆื‘ ื”ื’ื™ื“ื•ืœ ื”ืืงืกืคื•ื ื ืฆื™ืืœื™ ื‘ืฉืœื‘ 'ื”ืชื—ืœื” ืื™ื˜ื™ืช' ื™ื›ื•ืœ ืœื”ื™ื•ืช ืื’ืจืกื™ื‘ื™, ื•ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื”ื•ื ื™ืขื‘ื•ืจ ืืช ืงืฆื‘ ื”ื™ืขื“ ื”ืื•ืคื˜ื™ืžืœื™. ื”ืชื—ืœื” ื”ื™ื‘ืจื™ื“ื™ืช (HyStart) ื”ื™ื ืžื ื’ื ื•ืŸ ื ื•ืกืฃ ืฉื ื•ืขื“ ืœืฆืืช ืžืฉืœื‘ ื”ื”ืชื—ืœื” ื”ืื™ื˜ื™ืช ืžื•ืงื“ื ื™ื•ืชืจ ื‘ืืžืฆืขื•ืช ืฉื ื™ ืื•ืชื•ืช ืžืจื›ื–ื™ื™ื ืฉืœ ืขื•ืžืก:

  • ืขื™ื›ื•ื‘ ืฉืœ ื–ืžืŸ ื”ืœื•ืš ื•ืฉื•ื‘ (RTT): ืžื“ื“ ืœืขื™ื›ื•ื‘ ื”ื”ืชืคืฉื˜ื•ืช ืฉืœ ื—ื‘ื™ืœื•ืช ื ืชื•ื ื™ื ื‘ืจืฉืช. ื‘ืžื”ืœืš ืชืงื•ืคื•ืช ืฉืœ ืขื•ืžืก ื‘ืจืฉืช, ืชื•ืจื™ ื—ื‘ื™ืœื•ืช ื ืชื•ื ื™ื ืžืฆื˜ื‘ืจื™ื ื‘ืงื™ืฉื•ืจื™ื ืฉื™ื•ืฆืจื™ื ืฆื•ื•ืืจ ื‘ืงื‘ื•ืง. ื›ืชื•ืฆืื” ืžื›ืš, ื–ืžืŸ ื”-RTT ืขื•ืœื”, ื•ื–ื” ื™ื›ื•ืœ ืœื”ืฆื‘ื™ืข ืขืœ ืขื•ืžืก.
  • ืžืจื•ื•ื— ื‘ื™ืŸ ืื™ืฉื•ืจื™ ืงื‘ืœื” (ACK): ืžืกืชืžืš ืขืœ ืื•ืชื•ืช ืฉืœืคื™ื”ื ื™ืฉ ืขื™ื›ื•ื‘ ื‘ื—ื‘ื™ืœื•ืช ื‘ืฆื•ื•ืืจ ื‘ืงื‘ื•ืง, ืื‘ืœ ืžืชืžืงื“ ื‘ืื™ืฉื•ืจ ื”ืงื‘ืœื” ืฉืœ ื”ืชื’ื•ื‘ื”. ื”ืžื ื’ื ื•ืŸ ื”ื–ื” ืžื ื™ื— ืฉืื ืื™ืŸ ืขื•ืžืก, ืื™ืฉื•ืจื™ ื”-ACK ื™ื’ื™ืขื• ืขื ืื•ืชื• ืžืจื•ื•ื— ื›ืžื• ืžื ื•ืช ื”ื ืชื•ื ื™ื ื”ืžืงื•ืจื™ื•ืช. ื”ื“ืคื•ืก ื”ื–ื” ื ืงืจื ืœืขื™ืชื™ื ืงืจื•ื‘ื•ืช ACK train (ืจื›ื‘ืช ืื™ืฉื•ืจื™ ืงื‘ืœื”). ืื ืื™ืฉื•ืจื™ ื”-ACK ืžืชืขื›ื‘ื™ื ืžืขื‘ืจ ืœืชื‘ื ื™ืช ื”ืฆืคื•ื™ื” ื”ื–ื•, ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื™ืฉ ืขื•ืžืก ื‘ืจืฉืช.

ื›ื“ื™ ืœื‘ืฆืข ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ื”ื‘ื™ืฆื•ืขื™ื, ืžืฉื‘ื™ืชื™ื ืืช ื”ื–ื™ื”ื•ื™ ืฉืœ ืจืฆืฃ ืžื ื•ืช ACK, ืื‘ืœ ืžืฉืื™ืจื™ื ืืช ืžื ื’ื ื•ืŸ ื”ืขื™ื›ื•ื‘ ืฉืœ RTT ืžื•ืคืขืœ.

echo 2 > /sys/module/tcp_cubic/parameters/hystart_detect

ื”ื’ื“ืœืช ืชืงืฆื™ื‘ื™ ื”ื–ื™ื›ืจื•ืŸ ืฉืœ ืฉืงืข

ื›ื“ื™ ืœื”ื’ื“ื™ืœ ืืช ื”ืชืคื•ืงื” ื”ืžืงืกื™ืžืœื™ืช ื‘ืงื™ืฉื•ืจื™ื ืขื RTT ื’ื‘ื•ื”, ืฆืจื™ืš ืœืืคืฉืจ ื™ื•ืชืจ ื ืชื•ื ื™ื ื‘ื”ืขื‘ืจื”.

ื›ืžื•ืช ื”ื ืชื•ื ื™ื ืฉืžื•ืขื‘ืจื™ื ื”ื™ื ืคื•ื ืงืฆื™ื” ืฉืœ ืจื•ื—ื‘ ื”ืคืก ื•ื–ืžืŸ ื”ื”ืฉื”ื™ื” ืฉืœ ื”ื”ืชืคืฉื˜ื•ืช, ืฉื ืงืจืืช ืžื›ืคืœืช ืจื•ื—ื‘ ื”ืคืก ื•ื”ื”ืฉื”ื™ื” (BDP). ื”ื ื•ืกื—ื” ืœื—ื™ืฉื•ื‘ ื”-BDP: ืจื•ื—ื‘ ื”ืคืก ื›ืคื•ืœ ื–ืžืŸ ื”ืœื•ืš ื•ืฉื•ื‘ (RTT). ื”ืชื•ืฆืื” ื”ื™ื ืขืจืš ืฉืžืฆื™ื™ืŸ ืืช ื”ืžืกืคืจ ื”ืื•ืคื˜ื™ืžืœื™ ืฉืœ ื‘ื™ื˜ื™ื ืœืฉืœื™ื—ื” ื›ื“ื™ ืœืžืœื ืืช ื”ืฆื™ื ื•ืจ:

BDP (bits) = bandwidth (bits/second) * RTT (seconds)

ื›ืœ ื”ื ืชื•ื ื™ื ืฉืžื•ืขื‘ืจื™ื ืฆืจื™ื›ื™ื ืœื”ื™ืฉืืจ ื‘ื–ื™ื›ืจื•ืŸ ื”ืžื˜ืžื•ืŸ ืฉืœ ื”ืฉื•ืœื— ืœืžืงืจื” ืฉื™ื”ื™ื” ืฆื•ืจืš ืœืฉืœื•ื— ืื•ืชื ืžื—ื“ืฉ. ื”ื’ื‘ืœื•ืช ื”ื–ื™ื›ืจื•ืŸ ืฉืœ ืฉืงืข TCP ื™ื›ื•ืœื•ืช ืœื”ื’ื‘ื™ืœ ื™ืฉื™ืจื•ืช ืืช ื”ืชืคื•ืงื” ืฉืืคืฉืจ ืœื”ืฉื™ื’, ื›ื™ ื”ืŸ ืงื•ื‘ืขื•ืช ื›ืžื” ื ืชื•ื ื™ื ื‘ืชื”ืœื™ืš ื”ื”ืขื‘ืจื” ืืคืฉืจ ืœืฉืžื•ืจ ื‘ืžืื’ืจ.

ื‘-Linux, ืžื’ื‘ืœื•ืช ื”ื–ื™ื›ืจื•ืŸ ืฉืœ ืฉืงืข TCP ืžื•ื’ื“ืจื•ืช ื‘ืืžืฆืขื•ืช ื”ื”ื’ื“ืจื•ืช ื”ื‘ืื•ืช: sysctl(8)

  • net.core.rmem_max
  • net.core.wmem_max
  • net.ipv4.tcp_rmem
  • net.ipv4.tcp_wmem

ืžื’ื‘ืœื•ืช ื”ื–ื™ื›ืจื•ืŸ ืฉืœ ืฉืงืขื™ TCP ืงื™ื™ืžื•ืช ื›ื“ื™ ืœืžื ื•ืข ืฉื™ืžื•ืฉ ื‘ื›ืœ ื–ื™ื›ืจื•ืŸ ื”ืžืขืจื›ืช ื•ื›ื“ื™ ืœืžื ื•ืข ืžืฆื‘ื™ื ืฉืœ ื—ื•ืกืจ ื–ื™ื›ืจื•ืŸ (OOM), ื‘ืžื™ื•ื—ื“ ื‘ืขื•ืžืกื™ ืขื‘ื•ื“ื” ืขื ื”ืจื‘ื” ื—ื™ื‘ื•ืจื™ื. ื”ื’ื“ืœืช ื”ืžื’ื‘ืœื•ืช ื”ืืœื” ื™ื›ื•ืœื” ืœื”ื’ื“ื™ืœ ืืช ืงืฆื‘ ื”ืขื‘ืจืช ื”ื ืชื•ื ื™ื, ื‘ืžื™ื•ื—ื“ ื‘ื ืชื™ื‘ื™ื ืขื RTT ื’ื‘ื•ื”. ืืœื ืื ืžืกืคืจ ื”ื—ื™ื‘ื•ืจื™ื ื”ื•ื ืžื™ืœื™ื•ื ื™ื, ื”ืกื™ื›ื•ืŸ ื‘ื”ื’ื“ืœืช ื”ืžื’ื‘ืœื•ืช ื”ืืœื” ื”ื•ื ื ืžื•ืš.

ื”ืžืฉืชื ื™ื ื”ืืœื” ืžื’ื“ื™ืจื™ื ื’ื‘ื•ืœื•ืช ืขืœื™ื•ื ื™ื ืœื’ื•ื“ืœ ืฉื˜ื— ื”ืื—ืกื•ืŸ ื”ื–ืžื ื™ ืฉืœ ื”ืฉืงืข, ื•ืœื ื”ืงืฆืืช ื–ื™ื›ืจื•ืŸ ื™ืฉื™ืจื”. ื”ื’ื“ืœืช ื”ืขืจื›ื™ื ื”ืืœื” ืœื ืžืฉืคื™ืขื” ืขืœ ื”ืงืฆืืช ื”ื–ื™ื›ืจื•ืŸ ื‘ืคื•ืขืœ ืœื—ื™ื‘ื•ืจื™ื ืขื RTT ื ืžื•ืš, ื›ืžื• ื—ื™ื‘ื•ืจื™ื ื‘ืชื•ืš ืื–ื•ืจ Google Cloud .

ืฉื ื™ ื”ืคืจืžื˜ืจื™ื ื”ืจืืฉื•ื ื™ื ืฉื ื™ืชื ื™ื ืœื”ืชืืžื” ืžืฉืคื™ืขื™ื ืขืœ ื”ื’ื•ื“ืœ ื”ืžืงืกื™ืžืœื™ ืฉืœ ื—ืœื•ืŸ TCP ืœืืคืœื™ืงืฆื™ื•ืช ืฉืžื’ื“ื™ืจื•ืช ืืช ื”ื’ื•ื“ืœ ืฉืœ ื—ืœื•ืŸ TCP ื‘ืื•ืคืŸ ื™ืฉื™ืจ. ื™ืฉ ื™ื—ืกื™ืช ืžืขื˜ ืืคืœื™ืงืฆื™ื•ืช ื›ืืœื”. ื”ื”ื’ื‘ืœื•ืช ื”ืืœื” ืžื’ื“ื™ืจื•ืช ืืช ืžื” ืฉืืคืœื™ืงืฆื™ื” ื™ื›ื•ืœื” ืœื‘ืงืฉ ื‘ืื•ืคืŸ ืžืคื•ืจืฉ ื‘ืืžืฆืขื•ืช ืืคืฉืจื•ื™ื•ืช ืฉืœ ืฉืงืข SO_RCVBUF ื•-SO_SNDBUF.

ื‘ื’ืจืกืื•ืช ืœื™ื‘ื” ืฉืœ Linuxโ€ 6.18 ื•ืื™ืœืš, ืขืจื›ื™ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ net.core.rmem_max ื•ืฉืœ net.core.wmem_max ื”ื 4ย MB. ื”ื”ื’ื“ืจื•ืช ื”ืืœื” ื ื—ืฉื‘ื•ืช ื‘ื˜ื•ื—ื•ืช ืขืœ ืกืžืš ื ื™ืกื™ื•ืŸ ืฉืœ ืฉื ื™ื. ื‘ื’ืจืกืื•ืช ืงื•ื“ืžื•ืช ืฉืœ Linux, ืžื•ืžืœืฅ ืœื”ื’ื“ื™ืœ ืืช ื”ืžื’ื‘ืœื•ืช ื”ืืœื” ืœ-4ย MB ื‘ืคืœื˜ืคื•ืจืžื•ืช ืžื•ื“ืจื ื™ื•ืช:

echo 4194304 > /proc/sys/net/core/rmem_max
echo 4194304 > /proc/sys/net/core/wmem_max

ื”ืงื‘ื•ืฆื” ื”ืฉื ื™ื™ื” ืฉืœ ื”ืžื’ื‘ืœื•ืช, net.ipv4.tcp_rmem ื•-net.ipv4.tcp_wmem, ืžื ื”ืœืช ืืช ื”ืžื’ื‘ืœื•ืช ืฉืœ ื›ื•ื•ื ื•ืŸ ืื•ื˜ื•ืžื˜ื™ ืฉืœ ืžืื’ืจื™ื ื–ืžื ื™ื™ื ืœืฉืœื™ื—ื” ื•ืœืงื‘ืœื” ืฉืœ TCP.

ืœื›ืœ ืื—ืช ืžื”ื”ื’ื“ืจื•ืช ื”ืืœื” ื™ืฉ ืฉืœื•ืฉื” ืขืจื›ื™ื: ื’ื•ื“ืœ ื–ื™ื›ืจื•ืŸ ื”ืžื™ื ื™ืžื•ื, ื’ื•ื“ืœ ื–ื™ื›ืจื•ืŸ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ืจืืฉื•ื ื™ ื•ื’ื•ื“ืœ ื–ื™ื›ืจื•ืŸ ื”ืžืงืกื™ืžื•ื ืฉืœ ืฉืงืข. ืขืจื›ื™ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ืžืงืกื™ืžืœื™ื™ื ื”ื ืœืจื•ื‘ ืฉืžืจื ื™ื™ื ื™ื•ืชืจ ืžื”ื ื“ืจืฉ ื‘ืคืœื˜ืคื•ืจืžื•ืช ืžื•ื“ืจื ื™ื•ืช, ืœืžืฉืœ:

  • โ€ซtcp_rmem: 4096, 131072, 6291456
  • โ€ซtcp_wmem: 4096, 16384, 4194304

ืžืขืจืš TCP ืžืฉื ื” ืืช ื”ื’ื•ื“ืœ ืฉืœ ืžืื’ืจื™ ื”ื ืชื•ื ื™ื ื”ื–ืžื ื™ื™ื ืฉืœ TCP ืœืฉืœื™ื—ื” ื•ืœืงื‘ืœื” ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™, ืขืœ ืกืžืš ืื•ืžื“ื ื™ื ืฉืœ ื–ืžืŸ ื”ืœื•ืš ื•ืฉื•ื‘ (RTT) ื•ื—ืœื•ืŸ ื”ืขื•ืžืก. ื’ื•ื“ืœ ืžืงืกื™ืžืœื™ ืฉืœ ืฉื˜ื— ืื—ืกื•ืŸ ื–ืžื ื™ ืœื›ืชื™ื‘ื” ืฉืœ 4, 194,304 ืื• 4ย MB ื”ื•ื ืงื˜ืŸ ืœื—ื™ื‘ื•ืจื™ื ืขื RTT ื’ื‘ื•ื”. ืขื RTT ืฉืœ 100ย ms, ื”ื”ื’ื“ืจื” ื”ื–ื• ืžื’ื‘ื™ืœื” ืืช ื”ืชืคื•ืงื” ืœ-40ย MB/s ื‘ืžืงืจื” ื”ื˜ื•ื‘. ื‘ืžืงื•ื ืœื ืกื•ืช ืœื—ืฉื‘ ืืช ื”ืขืจื›ื™ื ืฉื‘ื”ื ืฆืจื™ืš ืœื”ืฉืชืžืฉ, ื’ื™ืฉื” ืคืฉื•ื˜ื” ื™ื•ืชืจ ื”ื™ื ืœื”ืฉืชืžืฉ ื‘ืขืจื›ื™ ื‘ืจื™ืจืช ืžื—ื“ืœ ื‘ื˜ื•ื—ื™ื ืœืฉืจืชื™ื ืžื•ื“ืจื ื™ื™ื ืขื ื”ืจื‘ื” ื–ื™ื›ืจื•ืŸ RAM.

ื›ื“ื™ ืœื ืงื•ื˜ ืืžืฆืขื™ ื–ื”ื™ืจื•ืช ื ื•ืกืฃ, ืžื•ืžืœืฅ ืœื”ื’ื‘ื™ืœ ืืช ื›ืžื•ืช ื”ื ืชื•ื ื™ื ืฉืืคืฉืจ ืœื”ื•ืกื™ืฃ ืœืชื•ืจ ื‘ืฉืงืข ืื‘ืœ ืขื“ื™ื™ืŸ ืœื ื ืฉืœื—ื•. ื”ืžื˜ืจื” ืฉืœ ื”ื’ื“ืœืช ื”ืขืจืš ื”ืžืงืกื™ืžืœื™ ืฉืœ wmem ื”ื™ื ืœืืคืฉืจ ื™ื•ืชืจ ื ืชื•ื ื™ื ื‘ื”ืขื‘ืจื”, ืื‘ืœ ืชื”ืœื™ืš ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืœืฉืงืข ืžื”ืจ ื™ื•ืชืจ ืžืžื” ืฉ-TCP ื™ื›ื•ืœ ืœืฉืœื•ื—, ื•ืœื’ืจื•ื ืœื”ืฆื˜ื‘ืจื•ืช ืฉืœ ืชื•ืจ ืฉืœ ื ืชื•ื ื™ื ืฉืœื ื ืฉืœื—ื• ื‘ืžืืจื— ื•ืœื‘ื–ื‘ื•ื– ื–ื™ื›ืจื•ืŸ. ื›ื“ื™ ืœืžื ื•ืข ืืช ื–ื”, ืžื’ื‘ื™ืœื™ื ืืช ื›ืžื•ืช ื”ื ืชื•ื ื™ื ืฉืœื ื ืฉืœื—ื• ืขื“ื™ื™ืŸ ืขืœ ื™ื“ื™ ื”ื’ื“ืจืช tcp_notsent_lowat, ื•ืื– ืžื’ื“ื™ืœื™ื ืืช ื”ืžื’ื‘ืœื” ื”ื›ื•ืœืœืช ืฉืœ wmem ื›ื“ื™ ืœืืคืฉืจ ืžืื’ืจื™ ื ืชื•ื ื™ื ื’ื“ื•ืœื™ื ื™ื•ืชืจ ื‘ืฉื™ืžื•ืฉ

ืืœื ืื ืœืฉืจืช ื™ืฉ ืžื™ืœื™ื•ื ื™ ื—ื™ื‘ื•ืจื™ื, ื”ื”ื’ื“ืจื•ืช ื”ื‘ืื•ืช ืืžื•ืจื•ืช ืœื”ื™ื•ืช ื‘ื˜ื•ื—ื•ืช. ืื‘ืœ, ืื ืืชื ื ืชืงืœื™ื ื‘ืชื ืื™ื ืฉืœ ื—ื•ืกืจ ื–ื™ื›ืจื•ืŸ ืขื ื—ื™ื‘ื•ืจื™ื ืจื‘ื™ื, ื›ื“ืื™ ืœื”ืฉืชืžืฉ ื‘ื’ื•ื“ืœ ืฉื˜ื— ืื—ืกื•ืŸ ื–ืžื ื™ ื ืžื•ืš ื™ื•ืชืจ.

echo 4194304 > /proc/sys/net/ipv4/tcp_notsent_lowat

echo "4096 262144 16777216" > /proc/sys/net/ipv4/tcp_rmem
echo "4096 262144 33554432" > /proc/sys/net/ipv4/tcp_wmem

ื”ืคืขืœืช GRO ื‘ื—ื•ืžืจื”

ืฉื™ืคื•ืจ ื”ื™ืขื™ืœื•ืช ืฉืœ ืขื™ื‘ื•ื“ ืงื‘ืœืช TCP/IP ืœื–ืจื™ืžื•ืช ื’ื“ื•ืœื•ืช. ืฆืžืฆื•ื ื”ืชืงื•ืจื” ืฉืœ ื”ืžืขื‘ื“ (CPU) ื‘ืืžืฆืขื•ืช ืืฆื•ื•ื” ืฉืœ ื—ื‘ื™ืœื•ืช ืฉื”ืชืงื‘ืœื•

ื‘ืจื•ื‘ ื”ืคืขื•ืœื•ืช ืฉืœ TCP/IP, ื”ืขืœื•ืช ืฉืœ ืžื—ื–ื•ืจ CPU ืขื•ืœื” ื‘ื”ืชืื ืœืงืฆื‘ ื”ื—ื‘ื™ืœื•ืช, ื•ืœื ืœืงืฆื‘ ื”ื‘ื™ื™ื˜ื™ื. ื›ื“ื™ ืœืฆืžืฆื ืืช ื”ืชืงื•ืจื” ื”ื–ื• ื‘ื”ืขื‘ืจื”, ืžืขืจื›ื•ืช ื”ืคืขืœื” ืžื•ื“ืจื ื™ื•ืช ืฉื•ืœื—ื•ืช ื ืชื•ื ื™ TCP ื“ืจืš ื ืชื™ื‘ ื”ื”ืขื‘ืจื” ื‘ื—ื‘ื™ืœื•ืช ื’ื“ื•ืœื•ืช ืฉืžื›ื™ืœื•ืช ื›ืžื” ืคืœื—ื™ TCP. ื”ื’ื•ื“ืœ ืฉืœื”ื ื™ื›ื•ืœ ืœื”ื’ื™ืข ืขื“ 64KB, ืื• ืืคื™ืœื• ืžืื•ืช ืงื™ืœื•ื‘ื™ื™ื˜ ืขื Linux BIG-TCP.

ื—ื‘ื™ืœื•ืช ื’ื“ื•ืœื•ืช ื›ืืœื” ื—ื•ืจื’ื•ืช ืžื’ื•ื“ืœ ื”ื—ื‘ื™ืœื” ื”ืžืงืกื™ืžืœื™ ื‘ืจืฉืช, ื”-MTU. ื”ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื”ื–ื• ืฉืœ ืžืขืจื›ืช ื”ื”ืคืขืœื” ืžืกืชืžื›ืช ืขืœ ืชืžื™ื›ื” ื‘ืžื›ืฉื™ืจ ื”ืจืฉืช ื›ื“ื™ ืœืคืฆืœ ืืช ื”ื—ื‘ื™ืœื•ืช ื”ืืœื” ื•ืœืฉืœื•ื— ืื•ืชืŸ ื›ืจืฆืฃ ืฉืœ ื—ื‘ื™ืœื•ืช ืงื˜ื ื•ืช ื™ื•ืชืจ, ืฉื›ืœ ืื—ืช ืžื”ืŸ ืžื›ื™ืœื” ืคืœื— TCP ืื—ื“. ื”ืชืžื™ื›ื” ื”ื–ื•, TCP Segmentation Offload โ€ (TSO), ื–ืžื™ื ื” ื‘ืื•ืคืŸ ื ืจื—ื‘ ื•ืžื•ืคืขืœืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ.

ื›ืฉืžื›ืฉื™ืจื™ื ืฉืœ GVNIC ื‘ืคืœื˜ืคื•ืจืžื•ืช ืžื”ื“ื•ืจ ื”ืฉืœื™ืฉื™ ื•ืžืขืœื” ืžืงื‘ืœื™ื ื ืชื•ื ื™ื, ื”ื ื™ื›ื•ืœื™ื ืœื‘ืฆืข ืืช ื”ืคืขื•ืœื” ื”ื”ืคื•ื›ื”: ื”ื ืฉื•ืžืจื™ื ื–ืžื ื™ืช ื‘ืžืื’ืจ ื ืชื•ื ื™ื ื–ืžื ื™ ืคืœื—ื™ื ื›ื“ื™ ืœื‘ื“ื•ืง ืื ืžื’ื™ืขื™ื ืคืœื—ื™ื ืขื•ืงื‘ื™ื. ืื ื›ืŸ, ื”ื ืžืฉืœื‘ื™ื ืื•ืชื ื•ืžืขื‘ื™ืจื™ื ืื•ืชื ื›ืžื ื•ืช ืžืจื•ื‘ื•ืช ืคืœื—ื™ื ืœืžืืจื—. ื”ืชื›ื•ื ื” ื”ื–ื• ื ืงืจืืช Receive Segment Coalescing (RSC)โ€Ž ื‘-Windows, โ€ Large Receive Offload (LRO)โ€Ž ืื• Hardware Generic Receive Offload (HW-GRO)โ€Ž ื‘-Linux. โ€ซHW-GRO ื”ื•ื ืฉื™ืคื•ืจ ืžื—ืžื™ืจ ื™ื•ืชืจ ืฉืœ LRO.

ืืคืฉืจ ืœื”ืคืขื™ืœ ืืช HW-GRO ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื‘ื‘ื˜ื—ื”. ื”ืืคืฉืจื•ืช ื”ื–ื• ืชื”ื™ื” ื–ืžื™ื ื” ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ.

ื‘ื™ื ืชื™ื™ื, ื‘ืคืœื˜ืคื•ืจืžื•ืช ืขื ืžื›ืฉื™ืจื™ GVNIC ืฉืชื•ืžื›ื™ื ื‘ืชื›ื•ื ื”, ืฆืจื™ืš ืœื”ืคืขื™ืœ ืืช HW-GRO ื‘ืืžืฆืขื•ืช ethtool. ื‘ื”ืชืื ืœื’ืจืกืช ื”ืœื™ื‘ื” ื•ื”ื“ืจื™ื™ื‘ืจ, ื”ืชื›ื•ื ื” ืžื•ืฆื’ืช ื›-LRO ืื• ื›-HW-GRO. ื”ื”ื˜ืžืขื” ื–ื”ื”, ื‘ืœื™ ืงืฉืจ ืœืฉื.

    ethtool -K $DEV large-receive-offload on
    ethtool -K $DEV rx-gro-hw on

ื”ื’ื“ืœืช ื’ื•ื“ืœ ื”-MTU ืœ-4,082 ื‘ื™ื™ื˜ื™ื

ืฉื™ืคื•ืจ ื”ื™ืขื™ืœื•ืช ืฉืœ ื”ืขื‘ืจืช ื ืชื•ื ื™ื ื‘ืจืฆืคื™ ืคืขื•ืœื•ืช ืขื ื ืคื— ื ืชื•ื ื™ื ื’ื“ื•ืœ.

ื”ื’ื“ืœืช ื’ื•ื“ืœ ื”ืžื ื”, ื‘ื“ื•ืžื” ืœืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ืฉืœ TSO ื•-HW-GRO, ืžืฉืคืจืช ืืช ื™ืขื™ืœื•ืช ื”ื”ืขื‘ืจื” ื›ื™ ืจื•ื‘ ื”ืขื™ื‘ื•ื“ ืžืชื‘ืฆืข ืœื›ืœ ืžื ื” ื•ืœื ืœื›ืœ ื‘ื™ื™ื˜.

Google Cloud ืจืฉืชื•ืช VPC ื™ื›ื•ืœื•ืช ืœืชืžื•ืš ื‘ืžื ื•ืช ื‘ื’ื•ื“ืœ ืฉืœ ืขื“ 8,898 ื‘ื™ื™ื˜, ืฉื”ื•ื ื’ื“ื•ืœ ืžืฉืžืขื•ืชื™ืช ืžื”-MTU ืฉืžื•ื’ื“ืจ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ืฉืœ 1,460 ื‘ื™ื™ื˜. ืฉื™ืžื•ืฉ ื‘ื’ื•ื“ืœ ื’ื“ื•ืœ ื™ื•ืชืจ ืฉืœ ืžื ื•ืช ื ืชื•ื ื™ื ื‘ืจืฉืช ืžืคื—ื™ืช ืืช ืžื—ื–ื•ืจื™ ื”-CPU ืฉืžื•ืฉืงืขื™ื ื‘ื›ืœ ื‘ื™ื™ื˜ ืฉืœ ืชืคื•ืงื” (goodput).

ืฉื™ืงื•ืœื™ื ืœื’ื‘ื™ ื’ื•ื“ืœ ื—ื‘ื™ืœื” ืื•ืคื˜ื™ืžืœื™

ื‘ื“ืจืš ื›ืœืœ, ืขื“ื™ืฃ ืœื”ืฉืชืžืฉ ื‘ืžื ื•ืช ื’ื“ื•ืœื•ืช ื™ื•ืชืจ, ืื‘ืœ ืœื ืชืžื™ื“ ื›ื“ืื™ ืœื‘ื—ื•ืจ ื‘ืขืจืš ื”-MTU ื”ืžืงืกื™ืžืœื™ ื”ืืคืฉืจื™. ื”ื™ืขื™ืœื•ืช ืฉืžื•ืฉื’ืช ืžืฉืœื™ื—ืช ืคื—ื•ืช ืžื ื•ืช ืฆืจื™ื›ื” ืœื”ื™ื•ืช ืžืื•ื–ื ืช ืขื ื”ืขืœื•ื™ื•ืช ื”ื‘ืื•ืช:

  • ื”ืฉื™ืžื•ืฉ ื‘ื–ื™ื›ืจื•ืŸ: ืžืื’ืจื™ ื ืชื•ื ื™ื ื–ืžื ื™ื™ื ื’ื“ื•ืœื™ื ื™ื•ืชืจ ื“ื•ืจืฉื™ื ื™ื•ืชืจ ื–ื™ื›ืจื•ืŸ ืฉืžื•ืงืฆื” ืœืžื›ืฉื™ืจ ื”ืจืฉืช ืœืงืœื™ื˜ืช ื—ื‘ื™ืœื•ืช ื ืชื•ื ื™ื. ืื ื™ืฉ ืœื›ื ื”ืจื‘ื” ืชื•ืจื™ื, ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉืชื™ืฉืืจ ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ื–ื™ื›ืจื•ืŸ ืœืœื ืฉื™ืžื•ืฉ.
  • ื˜ื™ืคื•ืœ ื‘ื—ื‘ื™ืœื•ืช ืงื˜ื ื•ืช: ืžืื’ืจื™ ื ืชื•ื ื™ื ื’ื“ื•ืœื™ื ื™ื•ืชืจ ืžื˜ืคืœื™ื ื‘ื—ื‘ื™ืœื•ืช ืงื˜ื ื•ืช, ื›ืžื• ืื™ืฉื•ืจื™ ืงื‘ืœื” (ACK) ื˜ื”ื•ืจื™ื, ื‘ืฆื•ืจื” ืคื—ื•ืช ื™ืขื™ืœื”.
  • ืขืœื•ื™ื•ืช ื”ืงืฆืืช CPU: ืขืœื•ื™ื•ืช ื ืชื™ื‘ ื”ื ืชื•ื ื™ื ืžื•ืฉืคืขื•ืช ื‘ืื•ืคืŸ ืžืฉืžืขื•ืชื™ ืžื”ืงืฆืื” ื•ืžืฉื—ืจื•ืจ ืฉืœ ื–ื™ื›ืจื•ืŸ. ื”ืชืืžืช ื’ื•ื“ืœ ื”ืžื ื” ืœืžื›ืคืœื” ืฉืœ ื“ืคื™ ื–ื™ื›ืจื•ืŸ ืขื•ื–ืจืช ืœื‘ืฆืข ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ืขืœื•ืช ื”ืžืขื‘ื“.
  • ืื™ื ื˜ืจืืงืฆื™ื” ืฉืœ TSO: ื’ื•ื“ืœ ื”ืžื ื” ืžืฉืคื™ืข ื‘ืื•ืคืŸ ืขื“ื™ืŸ ืขืœ TCP Segmentation Offload โ€(TSO). ื›ื“ื™ ืœื™ืฆื•ืจ ืืช ื—ื‘ื™ืœืช ื”-TSO ื”ื’ื“ื•ืœื” ื‘ื™ื•ืชืจ ืฉืืคืฉืจ, ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉืชืฆื˜ืจื›ื• ืœื‘ื—ื•ืจ ื‘ื’ื•ื“ืœ ืžืงืกื™ืžืœื™ ืงื˜ืŸ ื™ื•ืชืจ ืฉืœ ืคืœื— (MSS). ืœื“ื•ื’ืžื”, ืื ื—ื‘ื™ืœืช ื”-IP ื”ื’ื“ื•ืœื” ื‘ื™ื•ืชืจ ื”ืืคืฉืจื™ืช ื”ื™ื 64ย KB ื›ื•ืœืœ ื›ื•ืชืจื•ืช, ืขืจืš MSS ืฉืœ 4ย KB ื™ื•ื‘ื™ืœ ืœืžื˜ืขืŸ ื™ื™ืขื•ื“ื™ ื’ื“ื•ืœ ื™ื•ืชืจ (60ย KB) ืžืืฉืจ ืขืจืš MSS ืฉืœ 8ย KB (56ย KB).

ื‘ืจื•ื‘ ืขื•ืžืกื™ ื”ืขื‘ื•ื“ื”, ื”ื”ื‘ื“ืœ ื‘ื™ืขื™ืœื•ืช ื‘ื™ืŸ ื™ื—ื™ื“ื•ืช MTU ื‘ื’ื•ื“ืœ 4KB,โ€ 8KB ืื• 9KB ื”ื•ื ืงื˜ืŸ. ืขื ื–ืืช, ื›ืœ ืื—ื“ ืžื”ืขืจื›ื™ื ื”ืืœื” ืžื™ื™ืฆื’ ืฉื™ืคื•ืจ ืžืฉืžืขื•ืชื™ ืœืขื•ืžืช ืžื ื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ 1,460 ื‘ื™ื™ื˜.

ื”ืžืœืฆื” ืœื’ื‘ื™ ืžื ื•ืช ื‘ื’ื•ื“ืœ ื“ืฃ

ื›ืืคืฉืจื•ืช ื—ื–ืงื” ื•ื™ืขื™ืœื” ื‘ื“ืจืš ื›ืœืœ, ืื ื—ื ื• ืžืžืœื™ืฆื™ื ืœื”ื’ื“ื™ืจ ืืช ื’ื•ื“ืœ ื”-MTU ื‘ืจืฉืช ื”-VPC ืœ-4,082ย ื‘ื™ื™ื˜. ืžื•ืžืœืฅ ืœื”ืฉืชืžืฉ ื‘ื’ื•ื“ืœ ื”ื–ื” ื›ื™ ื”ื•ื ืžืืคืฉืจ ืœื›ืœ ื—ื‘ื™ืœืช ื”ื ืชื•ื ื™ื ืฉืœ Ethernet ืœื”ื™ื›ื ืก ืœื“ืฃ ื–ื™ื›ืจื•ืŸ ื‘ื’ื•ื“ืœ 4,096 ื‘ื™ื™ื˜, ื•ื›ืš ืžืชื‘ืฆืขืช ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ื”ืงืฆืืช ื“ืคื™ ื–ื™ื›ืจื•ืŸ. ื”ื”ืžืœืฆื” ื”ื–ื• ืžืชื™ื™ื—ืกืช ืœ-MTU ื‘ืฉื›ื‘ื” 3, ืฉื›ื•ืœืœ ืืช ื›ื•ืชืจืช ื”-IP, ืื‘ืœ ืœื ื›ื•ืœืœ ืืช ืฉื›ื‘ืช ื”ืงื™ืฉื•ืจ ืฉืœ Ethernet ื‘ื’ื•ื“ืœ 14 ื‘ื™ื™ื˜.

ื”ื’ื“ืจืช IP MTU

ืืคืฉืจ ืœื”ื’ื“ื™ืจ ืืช ื”-MTU ืœื›ืœ ืจืฉืช VPC ื™ืฉื™ืจื•ืช ื“ืจืš ืžืกื•ืฃ Google Cloud .

ื‘ืจื•ื‘ ื”ืคืฆื•ืช Linux ื‘- Google Cloud, ืœื ื ื“ืจืฉืช ื”ื’ื“ืจื” ื™ื“ื ื™ืช ื‘ืžื•ืคืข ื”ื—ื™ืฉื•ื‘. ื”ืžื•ืคืข ืœื•ืžื“ ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ืืช ื”-MTU ืฉืœ ื”ืจืฉืช ื‘ืืžืฆืขื•ืช DHCP ื‘ืžื”ืœืš ื”ืืชื—ื•ืœ (ื‘ืืžืฆืขื•ืช ืืคืฉืจื•ืช 26). ืœืื—ืจ ืžื›ืŸ ื”ืžื•ืคืข ืžื’ื“ื™ืจ ืืช ื”-MTU ืฉืœ ืžื›ืฉื™ืจ ื”ืจืฉืช ื›ืš ืฉื™ืชืื™ื. ืžื•ืžืœืฅ ืœื”ืฉืชืžืฉ ื‘ื”ื’ื“ืจื” ื”ืื•ื˜ื•ืžื˜ื™ืช ื”ื–ื•.

ืื ื ื“ืจืฉืช ื”ื’ื“ืจื” ื™ื“ื ื™ืช, ืืคืฉืจ ืœื”ื’ื“ื™ืจ ืืช ื”-MTU ืฉืœ ืžื›ืฉื™ืจ ื”ืจืฉืช ืœืขืจืš ื ืžื•ืš ื™ื•ืชืจ ืžื”-MTU ืฉืœ ืจืฉืช ื”-VPC ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” ื”ื‘ืื”:

ip link set dev $DEV mtu 4082

ื”ื’ื“ืจืช ื’ื“ืœื™ื ืฉื•ื ื™ื ืฉืœ MTU ืœืžืกืœื•ืœื™ื ืกืคืฆื™ืคื™ื™ื

ืื ืžื•ืคืขืœืช ืชืงืฉื•ืจืช ื—ื™ืฆื•ื ื™ืช ืฉืœ ืžื•ืคืข ืžื—ืฉื•ื‘ ืžื—ื•ืฅ ืœ-VPC, ืฉื‘ื” ื”-MTU ืฉืœ ื”ื ืชื™ื‘ ืขืฉื•ื™ ืœื”ื™ื•ืช ื ืžื•ืš ื™ื•ืชืจ, ืขื“ื™ืฃ ืœื”ื’ื“ื™ืจ MTU ื‘ื ืชื™ื‘ื™ื ืกืคืฆื™ืคื™ื™ื. ื‘ืžืงืจื” ื›ื–ื”, ืฆืจื™ืš ืœื”ื’ื“ื™ืจ ืืช ื”-MTU ืฉืžื•ื’ื“ืจ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ืœ-1,460ย ื‘ื™ื™ื˜, ืฉื”ื•ื ืขืจืš ืฉืžืจื ื™, ื•ืœื”ื—ื™ืœ ืืช ื”-MTU ื”ื’ื‘ื•ื” ื™ื•ืชืจ, ืœืžืฉืœ 4,082ย ื‘ื™ื™ื˜, ืจืง ืขืœ ื ืชื™ื‘ื™ื ื‘ืชื•ืš ื”-VPC:

#Set intra-VPC route MTU:
ip -4 route change $SUBNET/$MASK dev $DEV mtu 4082
#Set default route MTU:
ip -4 route change default dev $DEV mtu 1460

ื”ื’ื“ืจืช ื”ื’ื•ื“ืœ ื”ืžืงืกื™ืžืœื™ ืฉืœ ืคืœื— TCPโ€ (MSS)

ื”ื’ื•ื“ืœ ื”ืžืงืกื™ืžืœื™ ืฉืœ ืคืœื— TCPโ€ (MSS) ืงื•ื‘ืข ืืช ื’ื•ื“ืœ ื”ืžื˜ืขืŸ ื”ื™ื™ืขื•ื“ื™ (payload) ืฉืœ ื”ื—ื‘ื™ืœื” ืœื—ื™ื‘ื•ืจ TCP. ืžื›ื™ื•ื•ืŸ ืฉื’ื•ื“ืœ ื—ื‘ื™ืœื•ืช TCP/IP ืœื ื™ื›ื•ืœ ืœื—ืจื•ื’ ืžื’ื•ื“ืœ ื”-MTU ื›ื“ื™ ืœืžื ื•ืข ืคื™ืฆื•ืœ ืื• ื”ืฉืžื˜ื” ืฉืœ ื—ื‘ื™ืœื•ืช, ืฆืจื™ืš ืœืฉื ื•ืช ืืช ื’ื•ื“ืœ ื”-MSS ื‘ื”ืชืื.

ื‘ื“ืจืš ื›ืœืœ, ืœื ืฆืจื™ืš ืœื”ื’ื“ื™ืจ ืืช TCP MSS ื‘ืื•ืคืŸ ื™ื“ื ื™, ื›ื™ ืžืขืจื›ืช ื”ื”ืคืขืœื” ื’ื•ื–ืจืช ืื•ืชื• ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ืž-MTU ืฉืœ ื”ื ืชื™ื‘.

ื”-MSS ืžื›ืกื” ืืช ื”ืžื˜ืขืŸ ื”ื™ื™ืขื•ื“ื™ (payload) ื•ืืช ืืคืฉืจื•ื™ื•ืช ื”-TCP, ืื‘ืœ ืœื ื›ื•ืœืœ ืืช ื›ื•ืชืจืช ื”-IPv4 ื‘ื’ื•ื“ืœ 20 ื‘ื™ื™ื˜ ื•ืืช ื›ื•ืชืจืช ื”-TCP ื‘ื’ื•ื“ืœ 20 ื‘ื™ื™ื˜. ืœื›ืŸ, ื‘ืจืฉืช IPv4, โ€ ื”-MSS ื‘ื“ืจืš ื›ืœืœ ืงื˜ืŸ ื‘-40ย ื‘ื™ื™ื˜ ืžื”-MTU.

ืื ืืชื ืžืขื“ื™ืคื™ื MSS ืงื˜ืŸ ื™ื•ืชืจ ืœืชื ื•ืขื” ืกืคืฆื™ืคื™ืช, ืืชื ื™ื›ื•ืœื™ื ืœื”ื’ื“ื™ืจ ืื•ืชื• ืขืœ ื‘ืกื™ืก ื›ืœ ื ืชื™ื‘. ืœื“ื•ื’ืžื”, ืื ืจืฉืช ื”-VPC ื•ื”-MTU ืฉืœ ื”ืžื›ืฉื™ืจ ืžืฉืชืžืฉื™ื ื‘ืžืงืกื™ืžื•ื (8,896ย ื‘ื™ื™ื˜) ืœืชื ื•ืขื” ื›ืœืœื™ืช, ืื‘ืœ ืืชื ืจื•ืฆื™ื ืœื”ืฉืชืžืฉ ื‘-MTU ืฉืœ 4ย KB ืœืชื ื•ืขืช TCP, ืืชื ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ืคืงื•ื“ื” ื”ื‘ืื”:

ip -4 route change default dev $DEV advmss 4042

ืžืฆื‘ ืคื™ืฆื•ืœ ื”ื›ื•ืชืจืช

ืžื ื”ืœ ื”ื”ืชืงืŸ gVNIC gve ื‘ื’ืจืกืื•ืช ืœื™ื‘ืช Linuxโ€ 6.9 ื•ืื™ืœืš ืชื•ืžืš ื‘ืคื™ืฆื•ืœ ื ืชื•ื ื™ ื›ื•ืชืจืช TCP โ€ (tcp-data-split), ืฉืžื•ืฉื‘ืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ.

ืคื™ืฆื•ืœ ื”ื›ื•ืชืจืช ืžืคืจื™ื“ ื‘ื™ืŸ ื›ื•ืชืจื•ืช ื”ื—ื‘ื™ืœื•ืช ืœื‘ื™ืŸ ื”ื ืชื•ื ื™ื ืœืžืื’ืจื™ ื ืชื•ื ื™ื ื ืคืจื“ื™ื. ื”ืคืขื•ืœื” ื”ื–ื• ืžืืคืฉืจืช ืœืžืœื ื“ืฃ ื–ื™ื›ืจื•ืŸ ืฉืœื ื‘-4,096ย ื‘ื™ื™ื˜ ืฉืœ ื ืชื•ื ื™ื. ื”ื”ืคืจื“ื” ื”ื–ื• ืžืืคืฉืจืช ืœื‘ืฆืข ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ื—ืฉื•ื‘ื•ืช, ื›ืžื• ื”ื—ืœืคื” ืฉืœ ืคืขื•ืœื•ืช ื™ืงืจื•ืช ืฉืœ ื”ืขืชืงื” ืžืžืจื—ื‘ ื”ืœื™ื‘ื” ืœืžืจื—ื‘ ื”ืžืฉืชืžืฉ ื‘ืคืขื•ืœื•ืช ื–ื•ืœื•ืช ื™ื•ืชืจ ืฉืœ ืžื™ืคื•ื™ ื“ืคื™ ื–ื™ื›ืจื•ืŸ (ืœื“ื•ื’ืžื”, ื‘ืืžืฆืขื•ืช Linux TCP_ZEROCOPY_RECEIVE).

ื›ืฉืžืคืขื™ืœื™ื ืืช ื”ืชื›ื•ื ื” ืฉืœ ืคื™ืฆื•ืœ ื›ื•ืชืจืช ื”ืงื‘ืœื”, ื”ื—ื™ืฉื•ื‘ ืฉืœ MTU ืžืฉืชื ื”. ื”-MTU ื”ืื•ืคื˜ื™ืžืœื™ ื”ื•ื ื›ื–ื” ืฉื‘ื• ื›ืœ ื”ื›ื•ืชืจื•ืช ืžืžื•ืคื•ืช ืœืžืื’ืจ ื”ื›ื•ืชืจื•ืช, ื•ืžืื’ืจ ื”ืžื˜ืขืŸ ื”ื™ื™ืขื•ื“ื™ ืžืžืœื ื“ืฃ ืฉืœื ืฉืœ ื ืชื•ื ื™ื. ืื ื”ืืคืฉืจื•ืช 'ืคื™ืฆื•ืœ ื›ื•ืชืจืช' ืžื•ืคืขืœืช:

  • ืžืื’ืจ ื›ื•ืชืจื•ืช ืžื›ื™ืœ:
    • ืืชืจื ื˜ (14 ื‘ื™ื™ื˜)
    • โ€ซIPv4 (20 ื‘ื™ื™ื˜ื™ื)
    • ื›ื•ืชืจื•ืช TCP (20 ื‘ื™ื™ื˜)
    • ืืคืฉืจื•ื™ื•ืช ื ืคื•ืฆื•ืช ืฉืœ TCP (12 ื‘ื™ื™ื˜ ืœื”ื’ื“ืจืช ื‘ืจื™ืจืช ืžื—ื“ืœ ืขื ื—ื•ืชืžื•ืช ื–ืžืŸ ืฉืœ TCP )
  • ืžืื’ืจ ื”ื ืชื•ื ื™ื ื”ื–ืžื ื™ ืžื›ื™ืœ 4096ย ื‘ื™ื™ื˜ื™ื ืฉืœ ื ืชื•ื ื™ ืžื˜ืขืŸ ื™ื™ืขื•ื“ื™.

ื”ืชื•ืฆืื” ื”ื™ื ื’ื•ื“ืœ ืžืกื’ืจืช ื›ื•ืœืœ ืฉืœ 4,162ย ื‘ื™ื™ื˜ื™ื, ื•ืœื›ืŸ MTU ืฉืœ 4,148ย ื‘ื™ื™ื˜ื™ื.

ื”ืžืืžืจื™ื ื”ื‘ืื™ื