Tech/WireShark

WireShark (TCP 체크섬 오프로드)

눈꽃산행 2021. 5. 20. 11:22

TCP 체크섬 오프로드

이번 글은 TCP 체크섬 오프로드 (TCP Checksum Offload)에 관한 글입니다.

네트워크 공부하신 분들은 아시겠지만, TCP에는 checksum을 계산하여 넣게 되어 있습니다. 기본적으로 이러한 checksum 계산은 OS의 socket 레벨에서 주로 수행하지만, 요세 나오는 Etherenet 카드의 경우에는 OS에서 안하고 Etherenet 카드 하드웨어에서 수행하는 경우가 있습니다.

이렇게 OS에서 해주어야 할 checksum을 Etherenet 카드에서 대신해 줌으로서 서버의 성능을 개선 시켜 줍니다.

일반적인 패킷의 경우에는 알려져 있기로 5% 정도의 성능 향상이 있고, jumbo 패킷의 경우에는 15% 정도까지 성능 향상이 있다고 합니다. (제가 실제 측정해 본 결과치는 아니고, 인터넷에서 말 그대로 알려져 있는 수치 입니다. )

일반적으로 사용하는 경우에는 이런 TCP 체크섬 오프로드 (TCP Checksum Offload)가 별 문제가 되지 않습니다.

하지만 네트워크 관련 프로그램을 개발 하시는 분들에게는 TCP 체크섬 오프로드 때문에 자신이 만든 패킷의 checksum 이 깨지는 것이 아닌가 하는 의심을 하게 만듭니다.

네트워크 관련 프로그램 개발 후 테스트시에 주로 사용하는 것이 wireshark (packet capture tool)입니다. 이 tool을 이용하여 자신이 만든 패킷을 캡쳐 하는데, 이 경우에 아래 그림과 같이 Bad Checksum : True 라는 메시지를 보실 수 있습니다.

개발하는 사람이 패킷의 체크섬 (checksum)을 잘 못 계산하는 경우도 있지만, 먼저 시험하는 PC / 서버에 장착되어 있는 Etherenet 카드가 TCP 체크섬 오프로드 (TCP Checksum Offload)를 지원 하는지를 알아봐야 합니다.

그리고 해당 기능을 off 하고도 Bad Checksum 이 계속 나온다면 이 때는 개발한 소스를 살펴봐야 할 것으로 보입니다.

만약 아래와 같이 고급 Tab을 선택했는데 오프로드 TCP/IP 체크섬 이라는 메뉴가 안나온다면 현재 장착되어 있는 Etherenet 카드가 TCP 체크섬 오프로드 (TCP Checksum Offload) 기능을 지원하지 않는다는 얘기입니다.

출처: https://myknowledge.kr/29 [My Knowledge]


리눅스 TCP 체크섬 오프로드


이번 글도 TCP 체크섬 오프로드 (TCP Checksum Offload)에 관한 글입니다.

지난 글에서는 TCP 체크섬 오프로드 (TCP Checksum Offload) (클릭하시면 해당 글을 보실 수 있습니다.) 에 대하여 간단히 알아봤고, 윈도우즈에서 해당 기능을 어떻게 enable / disable 시키는지에 대해서 알아 봤습니다.

이번 글에서는 해당 기능을 Linux (리눅스)에서 어떻게 enable / disable 시키는지에 대하여 알아 보도록 하겠습니다.

아무래도 Linux (리눅스)에서 개발을 더 많이 하기 때문에 윈도우즈에서 언급했던 방법 보다 더 유용할 것으로 생각됩니다.

1. TCP 체크섬 오프로드 지원 여부를 확인한다.

TCP 체크섬 오프로드 지원 여부를 확인하기 위해서는 ethtool 이라는 명령을 사용합니다. 이 명령은 여러가지 옵션들을 가지고 있는데, 이중에 -k 라는 옵션을 이용하면 관련 정보를 보여 줍니다.

rx-checksumming: on , tx-checksumming: on 이라고 되어 있으므로, 현재 상태는 TCP 체크섬 계산을 Etherenet 카드에서 하고 있다는 의미 입니다.

 

1. TCP 체크섬 오프로드 지원 여부를 확인한다.

TCP 체크섬 오프로드 지원 여부를 확인하기 위해서는 ethtool 이라는 명령을 사용합니다. 이 명령은 여러가지 옵션들을 가지고 있는데, 이중에 -k 라는 옵션을 이용하면 관련 정보를 보여 줍니다.

rx-checksumming: on , tx-checksumming: on 이라고 되어 있으므로, 현재 상태는 TCP 체크섬 계산을 Etherenet 카드에서 하고 있다는 의미 입니다.

$ ethtool -k eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: on
$


2. TCP 체크섬 오프로드 Disable

disalbe 시키는 방법은 간단합니다. 아래와 같이 -K (대문자) 옵션을 주고 interface 이름을 쓰신 다음 tx / rx on / off 를 선택해서 입력하시면 됩니다.

$ ethtool -K eth0 tx off
$

3. TCP 체크섬 오프로드 적용 확인

처음과 마찬가지로 ehtool -k eth0 라고 입력하면 tx-checksumming: off 되어 있음을 확인 할 수 있습니다.


$ ethtool -k eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: off
scatter-gather: on
tcp segmentation offload: on
tcp segmentation offload: on
$


eth0 말고도 지원하는 인터페이스가 더 있는 경우에도 ethtool을 이용하여 TCP체크섬 오프로드 기능을 제어 할 수 있습니다.


출처: https://myknowledge.kr/30 [My Knowledge]