Network – cksum (checksum) incorrect

最近學習使用 tcpdump – http://benjr.tw/96904 卻看到一堆 cksum (checksum) incorrect 的封包,這是怎麼一回事?

測試環境為 CentOS x86_64 (虛擬機)

04:12:03.916512 IP (tos 0x12,ECT(0), ttl 64, id 55822, offset 0, flags [DF], proto TCP (6), length 664) localhost.localdomain.ssh > 192.168.95.1.55154: Flags [P.], cksum 0x4277 (incorrect -> 0x5557), seq 7810800:7811412, ack 5365, win 292, options [nop,nop,TS val 2588788 ecr 595141790], length 612

Flags – DF (Don’t fragment).

上網查了一下,跟 網卡的 TOE(TCP/IP offload engine) – http://benjr.tw/16056 或是 TCO(TCP/IP offload) 有關,有這一類功能的網卡其 checksum 是透過網卡本身來運作(降低使用系統 CPU 資源),透過 tcpdump 抓取的封包還沒到 NIC 做實際的 checksum ,所以可以看到 cksum 都是臨時的.

那要怎麼確認是被 NIC 的 TOE / TCO 所影響的,可以先檢查 NIC 的 rx-checksumming 以及 tx-checksumming 是否開啟.
透過 ethtool 參數 -k | –show-features | –show-offload devname 來查詢的,其他關於 ethtool 的使用請參考 http://benjr.tw/66839.

[root@localhost ~]# ethtool -k ens33 | grep checksum
rx-checksumming: on
tx-checksumming: on
	tx-checksum-ipv4: on
	tx-checksum-ip-generic: off [fixed]
	tx-checksum-ipv6: on
	tx-checksum-fcoe-crc: off [fixed]
	tx-checksum-sctp: off [fixed]

on 表示為開啟,先關閉來進行測試,透過 ethtool 參數 -K|–features|–offload 來設定.

[root@localhost ~]# ethtool -K ens33 tx off rx off
Actual changes:
tx-checksumming: off
	tx-checksum-ip-generic: off
tcp-segmentation-offload: off
	tx-tcp-segmentation: off [requested on]

透過 tcpdump 再抓一次封包,確認一下 checksum incorrect 是否解決了,如果確認是這個問題,要記得把設定值改回來.

[root@localhost ~]# ethtool -K ens33 tx on rx on
Actual changes:
rx-checksumming: on
tx-checksumming: on
	tx-checksum-ip-generic: on
tcp-segmentation-offload: on
	tx-tcp-segmentation: on
沒有解決問題,試試搜尋本站其他內容

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料