<br> # 5.2.2 The Internet Checksum ![[TCPIP Illustrated_Internet Checksum_Figure5-3.jpg]] P.187 Figure 5-3은 IPv4 헤더의 체크섬을 계산하는 과정 <br> - Claude Figure 5-3은 인터넷 체크섬을 계산하는 과정을 보여주는 예시입니다. 우선 전송할 메시지는 'E3 4F 23 96 44 27 99 F3 00 00'이고, 마지막 두 바이트 '00 00'은 체크섬 필드를 나타냅니다. 체크섬을 계산할 때는 이 필드를 0으로 초기화합니다. 메시지를 16비트 단위로 쪼개어 모두 더하면 '1E4FF'가 됩니다. 이는 2의 보수 표현법으로 된 값입니다. 여기에 1을 더해주면 1의 보수 값 'E500'을 얻을 수 있습니다. 이 값 'E500'의 1의 보수, 즉 비트를 모두 반전시킨 값이 'E500'의 1의 보수인 '1AFF'가 됩니다. 이것이 바로 체크섬 값이 됩니다. 이제 수신자 입장에서 받은 메시지와 체크섬을 더해봅시다. 'E34F + 2396 + 4427 + 99F3 + 1AFF'를 모두 더하면 'FFFF'가 됩니다. 만약 데이터에 오류가 없다면, 더한 값에서 1의 보수를 취했을 때 0이 나와야 합니다. 여기서는 'FFFF'의 1의 보수가 '0000'이 되므로, 데이터가 올바르게 전송되었음을 알 수 있습니다. ==이처럼 인터넷 체크섬은 단순한 덧셈과 비트 반전을 통해 오류를 검출하는, 간단하지만 효과적인 방법입니다.== <br> - ChatGPT Figure 5-3은 IPv4 헤더의 체크섬을 계산하는 과정을 보여줍니다. 이 과정은 다음과 같이 진행됩니다: 1. **체크섬 필드 초기화**: 전송하기 전에, 체크섬 필드는 0으로 초기화됩니다. 2. **16비트 단위 합산**: IPv4 헤더를 16비트 단위로 나누어 이들을 모두 더합니다. 3. **엔드-라운드-캐리 덧셈 실행**: 이 때, 16비트를 초과하는 캐리(자릿수 올림)는 다시 더해집니다. 4. **1의 보수 계산**: 모든 합산 후, 이 값을 1의 보수(모든 비트를 반전)로 취합니다. 5. **체크섬 설정**: 이렇게 계산된 체크섬 값은 IPv4 헤더의 체크섬 필드에 저장됩니다. ==IPv4 데이터그램을 수신할 때, 수신자는 전체 헤더를 포함하여 체크섬을 계산하고, 이 체크섬이 0이 되어야 합니다(오류가 없다면). 만약 체크섬 계산 결과가 0이 아니면, 에러가 발생한 것으로 간주하고 해당 데이터그램은 폐기됩니다.== 이는 데이터의 무결성을 보장하는 중요한 방법 중 하나입니다. <br> ## 5.2.2.1 Mathematics of the Internet Checksum - Claude 5.2.2.1절에서는 인터넷 체크섬의 수학적 속성에 대해 설명하고 있습니다. 간단히 말해, ==16비트 값들의 집합과 1의 보수 덧셈 연산이 하나의 수학적 구조, 즉 아벨 군(Abelian group)을 이룬다는 것이 요점==입니다. 아벨 군이 되기 위해서는 다음 다섯 가지 조건을 만족해야 합니다: 1. 닫힘성: 두 16비트 값을 1의 보수로 더한 결과도 16비트여야 함 2. 결합법칙: (a + b) + c = a + (b + c) 3. 항등원 존재: a + e = a 를 만족하는 e가 존재 (여기서는 e = FFFF) 4. 역원 존재: a + a' = e 를 만족하는 a'이 존재 5. 교환법칙: a + b = b + a 여기서 집합 V는 0000을 제외한 16비트 값들의 집합입니다. V와 1의 보수 덧셈 연산 +를 합쳐 <V, +>로 표기하면, 이것이 아벨 군을 이룹니다. 그런데 흥미롭게도, 만약 V에 0000을 포함시키면 <V, +>는 더 이상 군이 아니게 됩니다. 0000과 FFFF가 둘 다 항등원처럼 보이지만, 군에서 항등원은 유일해야 하기 때문입니다. 따라서 인터넷 체크섬이 수학적으로 완벽한 속성을 갖추려면 0000을 제외하는 것이 중요합니다. 이런 수학적 기반 덕분에 인터넷 체크섬은 간단하면서도 나름의 오류 검출 능력을 갖추고 있는 것입니다. 하지만 더 강력한 오류 검출을 위해서는 CRC 등의 다른 기법이 쓰입니다. <br> - ChatGPT 인터넷 체크섬의 수학적 원리는 아벨 군(Abelian group)의 개념을 사용하여 설명할 수 있습니다. 16비트 16진수 값들의 집합 \( V = \{0001, \. . . , FFFF\} \)과 이 값들을 더하는 '1의 보수 덧셈' 연산을 결합하면, 아벨 군을 형성합니다. 아벨 군이 되기 위해서는 다음과 같은 성질들이 만족되어야 합니다: - **닫힘(Closure)**: \( V \) 내의 어떤 두 수 \( X \)와 \( Y \)에 대해, \( X + Y \) 또한 \( V \) 안에 있습니다. - **결합법칙(Associativity)**: \( V \) 내의 어떤 세 수 \( X, Y, Z \)에 대해, \( X + (Y + Z) = (X + Y) + Z \)가 성립합니다. - **항등원(Identity element)**: \( V \) 내의 모든 \( X \)에 대해, \( e + X = X + e = X \)가 되는 \( e \)가 존재합니다. 여기서 \( e \)는 \( FFFF \)입니다. - **역원(Inverse)**: \( V \) 내의 모든 \( X \)에 대해, 어떤 \( X' \)가 존재하여 \( X + X' = e \)를 만족합니다. - **교환법칙(Commutativity)**: \( V \) 내의 어떤 \( X, Y \)에 대해, \( X + Y = Y + X \)가 성립합니다. 이러한 성질들은 1의 보수 덧셈 연산이 네트워크 프로토콜에서 체크섬을 계산하는 데 적합하도록 설계되었다는 것을 나타냅니다. 그리고 흥미로운 점은, 이 군에서는 숫자 \( 0000 \)이 제외된다는 것입니다. 이는 \( 0000 \)이 집합 \( V \)에 포함되면, \( V \)와 \( + \) 연산이 더 이상 군을 형성하지 않기 때문입니다. \( 0000 \)과 \( FFFF \)는 둘 다 항등원으로 작용할 수 있지만, 군의 정의에 따라 항등원은 하나만 존재해야 합니다 . <br> # References [TCP/IP Packet Format | AnalysisMan](https://www.analysisman.com/2024/03/tcpip-packet-format.html) <br> # Links [[_MOC_2_Network]] <br> # Tags #network #protocol #tcpip <br>