Gần đây tôi đã xử lý các vấn đề MTU . Và tất cả dường như xuất phát từ thực tế là bộ điều hợp ethernet trên các máy tính mới hơn mặc định có kích thước khung là 1504 byte:
>netsh interface ipv4 show subinterfaces
MTU MediaSenseState Bytes In Bytes Out Interface
------ --------------- --------- --------- -------------
1504 1 3954161316 804790885 Local Area Connection
Bây giờ, theo một người ngẫu nhiên trên NetworkEngineering.stackexchange.com , bất kỳ gói nào quá lớn sẽ bị loại bỏ bởi bất kỳ Thẻ giao diện mạng (NIC) nào, vì gói ethernet quá lớn:
... Bất kỳ khung hình nào có MTU lớn hơn thông số kỹ thuật 802.3 là 1500
Một khung hình lớn hơn mức tối đa đã đặt sẽ bị loại bỏ bởi NIC - đó là một lỗi và HĐH sẽ không bao giờ biết về nó. (bộ đếm khung quá khổ sẽ nhấp lên, nhưng đó là tất cả.)
Điều này gây ra vấn đề khi máy tính cố gắng gửi các gói đến máy gateway. Lý tưởng nhất là tôi sẽ dựa vào khám phá Path MTU . Nhưng vì các gói ethernet được tạo ra quá lớn so với bất kỳ máy nào khác nhận được, nên không có cơ hội nào cho các gói tin phân mảnh quá lớn của IP Packet :
Sẽ không có sự "phân mảnh" nào cả. Lớp 2 (ethernet) không có nghĩa là nếu chỉ ra "sự phân mảnh cần thiết". Điều này được tìm ra ở Lớp 3 (IP) bởi các bộ định tuyến gửi tin nhắn ICMP khi nó phải bỏ gói vì nó không phù hợp với giao diện hop tiếp theo.
Điều này đưa tôi đến câu hỏi thứ hai của tôi đầu tiên:
- Tại sao có một thông số cố ý tạo các khung ethernet không hợp lệ? Hành vi dự định ở đây là gì? Cho rằng các thẻ giao diện mạng khác không thể nhận được các gói có kích thước mặc định mới này, điều họ mong đợi sẽ xảy ra.
Điều này sau đó đưa tôi đến câu hỏi đầu tiên của tôi thứ hai. Và đây là điều đã được hỏi trước đây - rất nhiều.
- Là thẻ QinQ 4 byte là một phần của tiêu đề khung ethernet, hay một phần của tải trọng ethernet? Nếu đó là một phần của tiêu đề, tại sao phần thân tải trọng tăng thêm 4 byte? Nếu đó là một phần của tải trọng ethernet, tại sao MTU tải trọng tăng thêm 4 byte (khi chúng ta biết rằng việc tăng thêm 4 byte khiến nó trở thành một gói không hợp lệ)?
Câu hỏi lớn hơn là ...
Nếu chúng ta lùi lại một lúc, chúng ta có câu hỏi lớn hơn:
chúng ta phải làm gì?
Phải có những người thiết kế tiêu chuẩn này. Họ mong đợi mọi người sẽ làm gì với các thiết bị tạo ra các gói quá lớn này ?
Tôi thực sự đang hỏi. Tôi cho rằng chúng tôi không có ý định đi đến mọi thiết bị phần cứng và hoàn tác việc tăng MTU 1504 và hoàn nguyên thành 1500:
netsh interface ipv4>set subinterface "Local Area Connection" mtu=1500 store=persistent
Ok.
đó sẽ là (và đang) một cơn ác mộng cấu hình.
Có phải ý tưởng có thể tắt tính năng gắn thẻ Vlan? Ngoài cơn ác mộng cấu hình, đơn giản là nó không hoạt động:
Bước 1: vô hiệu hóa gắn thẻ Vlan
Bước 2: quan sát rằng nó không hoạt động:
giao diện Netsh ipv4 hiển thị giao diện con
MTU MediaSenseState Bytes In Bytes Out Interface
1504 1 238125 245855 Local Area Connection
Nếu giải pháp cho vấn đề này là buộc thủ công tất cả các card mạng trở lại MTU 1500, thì tại sao họ lại nâng nó lên tới 1504 byte và tạo các gói không hợp lệ, ngay từ đầu?
Có một mảnh của câu đố tôi đang thiếu.
Thưởng trò chuyện
Without 802.1Q tagging Without 802.1Q tagging
+------------------------+ +------------------------+
|Destination MAC: 6 bytes| |Destination MAC: 6 bytes|
|Source MAC: 6 bytes | |Source MAC: 6 bytes |
|Ethertype: 2 bytes | |802.1Q tag: 4 bytes |
+------------------------+ |Ethertype: 2 bytes |
| | +------------------------+
| | | |
/ Payload: 1500 bytes / / Payload: 1500 bytes /
| | | |
| | | |
+------------------------+ | |
| Frame Check Sequence: | +------------------------+
| 4 bytes| | Frame Check Sequence: |
+------------------------+ | 4 bytes|
+------------------------+
Giản đồ hệ thống
+------------------+ +----------------+ +------------------+
| Realtek PCIe GBe | | NetGear 10/100 | | Realtek 10/100 |
| (on-board) | | Switch | | (on-board) |
| | +----------------+ | |
| Windows 7 | ^ ^ | |
| | | | | |
| 192.168.1.98/24 |-----------+ +------------| 192.168.1.10/24 |
| MTU = 1504 bytes | | MTU = 1500 bytes |
+------------------+ +------------------+
Bạn cũng có thể thay thế bất kỳ cấu hình nào bạn muốn, tạo các gói lớn hơn 1500
byte tối đa được phép :
+------------------+ +----------------+ +------------------+
| Realtek PCIe GBe | | NetGear 10/100 | | Realtek 10/100 |
| (on-board) | | Switch | | (on-board) |
| | +----------------+ | |
| Windows 7 | ^ ^ | MTU = 1500 bytes |
| MTU = 16384bytes | | | | |
| |-----------+ +------------| |
+------------------+ +------------------+
Tôi đang cố gắng tìm một trang web có thể giải quyết vấn đề kỹ thuật, khái niệm, logic, cơ bản, lý thuyết về cách Ethernet có thể hoạt động khi một số thiết bị cố tình tạo ra các gói không hợp lệ.
Mối lo ngại xuất hiện khi tôi cố gửi một gói Ethernet không hợp lệ đến một thiết bị Ethernet khác:
máy tính tạo gói Ethernet
Source MAC: xx-xx-xx-xx-xx-xx Destination MAC: yy-yy-yy-yy-yy-yy Ethertype: 0x0800 Payload: ...1504 bytes... (or could be ...16384 bytes, anything larger than 1500...) CRC: 4 bytes
Gói này không hợp lệ vì quá lớn để thiết bị đích 802.3u nhận được. Vì hệ điều hành máy chủ của mục tiêu không bao giờ nhìn thấy gói và vì Ethernet không có chức năng báo cáo các gói không hợp lệ trở lại cho người gửi, nên gói "lớn" bị mất.
Thưởng trò chuyện
Từ Liên kết chuyển mạch liên kết của Cisco và Định dạng khung của IEEE 802.1Q :
Kích thước khung
Đơn vị truyền tối đa mặc định (MTU) của giao diện là 1500 byte. Với thẻ Vlan bên ngoài được gắn vào khung Ethernet, kích thước gói tăng thêm 4 byte. Do đó, bạn nên tăng MTU của từng giao diện trên mạng của nhà cung cấp một cách thích hợp. MTU tối thiểu được đề xuất là 1504 byte.
Trong khi đó:
Chuẩn Ethernet Ethernet 802.11 chỉ bắt buộc hỗ trợ cho các khung MTU 1500 byte.