Đường hầm bỏ các lần truyền lớn nhưng vẫn cho ping đi qua, nên lời khuyên đến nhanh: giảm MTU. Cách sửa đôi khi hiệu quả, rồi sau đó nó được áp cho mọi hồ sơ trên mọi mạng. Đó là lúc một sửa chữa có mục tiêu trở thành một khoản thuế hiệu năng vĩnh viễn. Phép so sánh cần làm là giữa giới hạn thực của đường truyền và chi phí thu nhỏ mọi gói tin xuống dưới nó.

Điều gì thực sự co lại khi bạn giảm MTU

Mỗi gói tin mang phần tiêu đề trước khi mang dữ liệu của bạn. Trên đường Ethernet 1500 byte, IPv4 và TCP chiếm 40 byte và để lại 1460 cho phần tải; đóng gói thêm các tiêu đề IP, UDP và đường hầm bên ngoài lên trên, nên ngân sách tải bên trong lại giảm. Giảm MTU của giao diện thu nhỏ ngân sách đó một cách có chủ đích.

Chi phí tỷ lệ với số gói tin, không phải số byte. Cùng một tệp chia thành nhiều gói hơn cần nhiều ngắt hơn, nhiều quyết định định tuyến hơn và nhiều xử lý trên mỗi gói hơn ở mọi thiết bị dọc đường. Trên một router đã gần giới hạn số gói mỗi giây, đó là sự chậm lại thật chứ không phải sai số làm tròn. Chi phí xuất hiện ngay cả khi bản thân việc truyền thành công.

Vì vậy MTU nhỏ hơn là cách đi vòng một ràng buộc, không phải tối ưu hóa chung. Nó mua độ tin cậy trước một đường truyền không thể mang khung lớn hơn và tính thêm chi phí cho mọi gói tin không cần việc thu nhỏ.

Khi nào MTU nhỏ hơn là cách sửa đúng

Triệu chứng kinh điển rất cụ thể: bắt tay TCP hoàn tất, các phản hồi nhỏ đến, và một bản tải lớn bị treo hoặc đặt lại. Ping với bit không phân mảnh ở 1472 byte thất bại trong khi ping 1400 byte thành công, cho thấy một đường truyền không thể mang gói kích thước đầy đủ và không chuyển thông điệp ICMP lẽ ra phải báo người gửi thu nhỏ.

Việc phát hiện MTU của đường truyền phụ thuộc vào các thông điệp ICMP về nhu cầu phân mảnh đó. Khi tường lửa loại bỏ chúng, người gửi tiếp tục thử lại gói lớn và kết nối có vẻ bị treo. Giảm MTU ở phía đường hầm tránh việc thử lại, và đó là một sửa chữa hợp lý cho mạng đó.

Các công nghệ truy cập cũng đặt giới hạn riêng: PPPoE thường dừng ở 1492, một số đường di động và DSL thấp hơn, và các đường hầm lồng nhau trừ chi phí hai lần. Hãy đo đường thực thay vì sao chép một con số từ hướng dẫn, và nhớ rằng IPv6 yêu cầu ít nhất 1280 byte MTU trên mọi liên kết mang nó, như RFC 8200 quy định.

So sánh ba nút điều khiển trước khi đổi một

MTU, MSS và phân mảnh là những nút điều khiển khác nhau ở các tầng khác nhau, và đổi nhầm nút thì triệu chứng vẫn còn.

ControlLayerWhat it changesWhere it misleads
Interface MTUIP linkLargest frame the interface will sendPenalizes every protocol, not just the one that failed
TCP MSS clampTCPSegment size advertised in the handshakeLeaves UDP and QUIC untouched
DF and fragmentationIPWhether a router may split a packetCan break path MTU discovery and security assumptions
Tunnel overheadEncapsulationInner MTU after outer headersMismatch shows up only for large inner packets

Giới hạn MSS thường là cách sửa ít xâm lấn nhất vì nó chỉ ảnh hưởng TCP và để giao diện rảnh cho lưu lượng khác. MTU giao diện thấp hơn thì rộng hơn và dễ lập luận hơn, nên nó phổ biến trên router tiêu dùng, nhưng nó bắt mọi giao thức trả giá cho vấn đề của một giao thức.

Tắt hành vi không phân mảnh sẽ che triệu chứng bằng cách cho phép phân mảnh, và thường làm độ trễ tệ hơn đồng thời phá vỡ phản hồi lẽ ra tìm được kích thước đúng. Hãy tránh nó như một cách sửa vĩnh viễn.

Đo sự đánh đổi thay vì một con số

Tìm giới hạn của đường bằng đầu dò không phân mảnh, bắt đầu từ cao và hạ xuống cho đến khi có phản hồi:

ping -M do -s 1472 203.0.113.10
ping -M do -s 1400 203.0.113.10
tracepath 203.0.113.10

Sau đó so sánh công việc thực trên cả hai thiết lập: cùng một lần truyền tệp, cùng một điểm cuối và cùng một mạng. Ghi lại thời gian hoàn tất và số lần truyền lại, ví dụ bằng nstat -az TcpRetransSegs, và theo dõi CPU của thiết bị nếu đường hầm kết thúc trên một router nhỏ. Một bài kiểm tra thông lượng tổng hợp ngắn có thể bỏ sót tình trạng đứng mà chỉ xuất hiện sau vài megabyte.

Bộ đếm gói tin sẽ tăng sau khi giảm vì cùng một lần truyền giờ dùng nhiều gói hơn. Đó là điều dự kiến và không phải bằng chứng của thông lượng cao hơn. Hãy so sánh dữ liệu ứng dụng đã hoàn tất, số lần truyền lại và khả năng phản hồi, không chỉ tốc độ gói tin.

Đưa thay đổi vào theo từng bước và giữ phạm vi hẹp

Ghi lại giá trị ban đầu, đổi một nút điều khiển và lặp lại phép đo trước khi biến nó thành vĩnh viễn. Nếu bằng chứng không cho thấy lợi ích, hãy khôi phục giá trị trước đó bằng đúng lệnh giao diện mà bạn đã dùng để đặt nó:

ip link set dev wg0 mtu 1420
ip link set dev wg0 mtu 1500

Giới hạn kết quả cho mạng cần đến nó. Một hồ sơ phải chạy trên Wi-Fi khách sạn, điểm phát di động và LAN văn phòng không nên thừa hưởng giá trị thấp nhất mà bất kỳ mạng nào trong số đó yêu cầu, trừ khi ứng dụng khách không thể phát hiện đường truyền.

Giá trị đúng là MTU lớn nhất sống sót qua đường truyền, không phải giá trị nhỏ nhất làm triệu chứng biến mất. Hãy ghi lại đường truyền, kết quả đầu dò và việc hoàn tác, và xem lại thiết lập khi mạng truy cập thay đổi.

Bài viết liên quan