My Knowledge

TCP 체크섬 오프로드 본문

Network

TCP 체크섬 오프로드

행복한하루 2007. 9. 14. 23:29
이번 글은 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 이 계속 나온다면 이 때는 개발한 소스를 살펴봐야 할 것으로 보입니다.

사용자 삽입 이미지

wireshark capture


그럼 이제 TCP 체크섬 오프로드 (TCP Checksum Offload) 기능 disable 시키는 방법을 알아보도록 하겠습니다.

먼저 Ethernet 카드의 상태 화면으로 들어갑니다. 여기서 보면 속성이라는 버튼이 보입니다.

사용자 삽입 이미지

Etherenet 연결 상태 화면


속성 버튼을 클릭하면 아래와 같은 화면이 나옵니다.

사용자 삽입 이미지

속성


그리고 고급 이라고 되어 있는 tab을 선택합니다.

여기서 오프로드 TCP/IP 체크섬 이라는 메뉴를 볼 수 있습니다. 이 것을 오프로 바꾸어 주시면 됩니다.

사용자 삽입 이미지

속성 : 오프로드 TCP/IP 체크섬


이렇게 바꾸고 나서도 Bad Checksum 이 계속 나온다면 이 때는 개발한 소스를 살펴봐야 합니다.

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

사용자 삽입 이미지

오프로드 체크섬을 지원안하는 Ethernet


앞서 설명드린거처럼 개발을 하는 경우에는 TCP 체크섬 오프로드 (TCP Checksum Offload)를 잠깐 disable시키는 것이 필요하지만, 만약 서버를 운영하신다면, 성능 향상을 위해 TCP 체크섬 오프로드 (TCP Checksum Offload)를 지원하는 카드로 장착하시는게 더 좋을 것으로 생각됩니다.

리눅스에서 TCP 체크섬 오프로드를 enable / disable 시키는 방법은 아래 링크를 클릭하시기 바랍니다.

'Network' 카테고리의 다른 글

Wireshark 실행 권한  (1) 2013.03.01
공유기 유해사이트 차단  (0) 2007.12.14
Wireshark TCP 체크섬 끄기  (0) 2007.10.02
무선랜 보안 설정 방법  (0) 2007.09.28
리눅스 TCP 체크섬 오프로드  (0) 2007.09.17