Thực ra, tôi có hai câu hỏi liên quan.Làm thế nào để gửi các gói lớn hơn 1500 byte bởi pcap_sendpacket?
Tôi đang chụp lưu lượng truy cập mạng được lọc theo libpcap trên Debian. Sau đó, tôi cần phải phát lại lưu lượng truy cập này trên máy chủ Win2k3. Đôi khi tôi nắm bắt các gói tin, cả TCP và UDP, lớn hơn nhiều 1500 byte (kích thước MTU mặc định cho Ethernet). Ví dụ: 2000+ byte. Tôi không có thay đổi cụ thể đối với kích thước MTU trên Linux đó. Vì vậy, câu hỏi # 1:
Lý do cho các gói này lớn hơn nhiều so với MTU mặc định là bao nhiêu?Jumbo frames? Bài viết trên Wikipedia này nói rằng "các thẻ giao diện mạng có khả năng khung jumbo yêu cầu cấu hình rõ ràng để sử dụng các khung jumbo", nhưng tôi không biết về bất kỳ cấu hình nào như vậy. Ngoài ra ifconfig
cho tôi biết "MTU: 1500". Nó có thể được bằng cách nào đó liên quan với kỹ thuật "kết hợp gián đoạn" (hoặc "ngắt kết hợp" như trong this article)? Tôi có thể chặn các gói như vậy không?
Sau đó, câu hỏi # 2:
Làm thế nào tôi có thể gửi các gói tin như vậy bởi pcap_sendpacket
trên Windows? Tôi nhận được thông báo lỗi "gửi lỗi: PacketSendPacket không thành công" chỉ cho các gói lớn hơn 1500 byte. Dường như tôi không thể sử dụng khung jumbo bởi vì tôi đang gửi dữ liệu để kết nối trực tiếp tùy chỉnh "net tap" như thẻ pci và tôi không chắc chắn tôi có thể cấu hình NIC của nó. Còn gì nữa? Tôi có nên phân mảnh các gói này theo các quy tắc giao thức không?
EDIT:
Kiểm tra phân mảnh bởi NIC như Guy Harris gợi ý:
~# ethtool -k eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: off
udp-fragmentation-offload: off
generic-segmentation-offload: off
generic-receive-offload: off
large-receive-offload: off
ntuple-filters: off
receive-hashing: off
Cùng cho eth1
và br0
- mạng cầu nối giữa eth0
và eth1
mà tôi đang đánh hơi.
Và tôi vẫn nhận được các gói UDP lớn.
pcap có lẽ đang dán các gói dữ liệu bị phân mảnh lại với nhau thành một đoạn từ các gói dây cho bạn. Kiểm tra xem bạn có thể yêu cầu nó cung cấp cho bạn khung ethernet và không vận chuyển gói dữ liệu không. –
@NikolaiNFetissov: Tôi đang nhận các khung ethernet –