Tại sao iperf, kẻ lừa đảo và đường dẫn gói khám phá MTU đồng ý với MTU của đường dẫn?


11

Chúng ta hãy thực hiện một số khám phá MTU giữa hai máy chủ Debian được phân tách bằng bộ định tuyến Debian chạy các quy tắc iptables do Shorewall tạo. Mỗi trong hai máy chủ sử dụng một liên kết Ethernet duy nhất trong khi bộ định tuyến sử dụng các Vlan được gắn thẻ qua hai liên kết Ethernet tổng hợp.

Sử dụng kẻ lừa đảo :

root@kitandara:/home/jm# scamper -I "trace -M 10.64.0.2"
traceroute from 10.1.0.5 to 10.64.0.2
 1  10.1.0.1  0.180 ms [mtu: 6128]
 2  10.64.0.2  0.243 ms [mtu: 6128]

Tốt: 6128 byte là kết quả mong đợi (bộ điều hợp Ethernet Realtek giá rẻ không thể xử lý các khung khổng lồ có kích thước khá).

Bây giờ, hãy để iperf thực hiện kiểm tra thông lượng và cho chúng tôi biết về MTU bằng cách này:

root@kitandara:/home/jm# iperf -c 10.64.0.2 -N -m
------------------------------------------------------------
Client connecting to 10.64.0.2, TCP port 5001
TCP window size: 66.2 KByte (default)
------------------------------------------------------------
[  3] local 10.1.0.5 port 59828 connected with 10.64.0.2 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1011 MBytes   848 Mbits/sec
[  3] MSS size 6076 bytes (MTU 6116 bytes, unknown interface)

6116 byte? Tại sao ?

Và bây giờ đối với một cái gì đó hoàn toàn khác, hãy xem lưu lượng truy cập của phiên này thực sự chứa gì:

root@kitandara:/home/jm# tshark -i eth0 -R "(ip.dst == 10.64.0.2) || (ip.src == 10.64.0.2)" | head
Capturing on eth0
  1.308557     10.1.0.5 -> 10.64.0.2    TCP 74 60310 > 5001 [SYN] Seq=0 Win=5340 Len=0 MSS=534 SACK_PERM=1 TSval=101928961 TSecr=0 WS=16
  1.308801    10.64.0.2 -> 10.1.0.5     TCP 74 5001 > 60310 [SYN, ACK] Seq=0 Ack=1 Win=18328 Len=0 MSS=6088 SACK_PERM=1 TSval=3764064056 TSecr=101928961 WS=64

6088 byte MSS, có nghĩa là 6128 MTU ... Tốt. Nhưng tại sao iperf lại công bố MTU 6116 byte?

Tại thời điểm đó, tính kỹ lưỡng yêu cầu xem xét kỹ hơn những gì xảy ra trong phiên truy tìm kẻ lừa đảo:

root@kitandara:/home/jm# tshark -i eth0 -R "(ip.dst == 10.64.0.2) || (ip.src == 10.64.0.2)"
Capturing on eth0
  0.000000     10.1.0.5 -> 10.64.0.2    UDP 58 Source port: 43870  Destination port: 33435
  0.000175     10.1.0.1 -> 10.1.0.5     ICMP 86 Time-to-live exceeded (Time to live exceeded in transit)
  0.050358     10.1.0.5 -> 10.64.0.2    UDP 58 Source port: 43870  Destination port: 33436
  0.050592    10.64.0.2 -> 10.1.0.5     ICMP 86 Destination unreachable (Port unreachable)
  0.099790     10.1.0.5 -> 10.64.0.2    UDP 6142 Source port: 43870  Destination port: 33437
  0.100912    10.64.0.2 -> 10.1.0.5     ICMP 590 Destination unreachable (Port unreachable)

Tất cả các gói đó có udp.length là 24 ngoại trừ hai gói cuối cùng có udp.length là 6108 ... Nhưng sau đó, kẻ lừa đảo nói với chúng ta rằng MTU đường dẫn là 6128 như thế nào?

6108, 6116, 6128 ... Rất nhiều MTU để lựa chọn!


Có câu trả lời nào giúp bạn không? nếu vậy, bạn nên chấp nhận câu trả lời để câu hỏi không xuất hiện mãi mãi, tìm kiếm câu trả lời. Ngoài ra, bạn có thể cung cấp và chấp nhận câu trả lời của riêng bạn.
Ron Maupin

Câu trả lời:


4

Rất thú vị.

MSS (kích thước phân khúc tối đa) = MTU - Tiêu đề IP = 6076.

6076 + 40 = 6116.

Có thể Debian đang sử dụng các trường tùy chọn IP trong tiêu đề IP? Đó có thể là thêm 12 byte ...


Có thể là bắt tay TCP thiết lập MTU 6128 byte và sau đó iperf phát hiện ra rằng anh ta đã không truyền được hơn 6116 byte cùng một lúc - đó sẽ là một loại MTU theo kinh nghiệm không liên quan đến "chính thức"?
Jean-Marc Liotier

Dù tùy chọn IP là gì, không có phần đệm đảm bảo độ dài đó (tùy chọn IP + phần đệm) = 32 bit?
Jean-Marc Liotier

12 byte 'Không phải bạn có nghĩa là "tùy chọn TCP" thay vì "tùy chọn IP"?
Jean-Marc Liotier

Tôi đã lấy mẫu các tùy chọn TCP của phiên iperf: dường như luôn luôn là 12 byte (chỉ có dấu thời gian)
Jean-Marc Liotier

2
Trong github.com/jasonrm/iperf/blob/ MSS và MTU, được đưa ra MSS (hoặc đoán nó) "- kỳ lạ khi xem xét rằng iperf có nhiệm vụ hỗ trợ Path MTU Discovery thực tế.
Jean-Marc Liotier

3

tshark đang báo cáo kích thước khung ethernet: 6142 - 14 (tiêu đề ethernet) = 6128 byte IP.

kẻ lừa đảo thực hiện theo dõi với các gói nhỏ trước khi thăm dò các gói lớn để khám phá MTU (đó là lý do tại sao bạn thấy các gói nhỏ theo sau là một gói lớn). điều này rất hữu ích để phân biệt giữa tất cả các gói bị loại bỏ / không phản hồi và chỉ những gói lớn.

https://www.usenix.org/conference/imc-05/inferring-and-debugging-path-mtu-discovery-failures

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.