Top

tcp 체크섬 예제

예제로 이것을 이해해 봅시다. UDP 세그먼트 또는 TCP 패킷이 있다고 가정해 보겠습니다. 우리가 하는 첫 번째 일은 16 비트 조각까지 나누고 슬라이스하는 것입니다. 아래와 같이 3 개의 16 비트 데이터가 있다고 가정 해 봅시다. 위의 224번을 벤치마크로 실행하고 결과를 시간 초과할 수 있습니다. 물론 사용되는 버퍼의 크기에 따라 시간이 달라집니다. 64바이트 패킷, 1023바이트 패킷 및 1024바이트 패킷을 살펴봅니다. 64바이트 케이스는 작은 패킷에 대한 오버헤드를 나타냅니다. 1024 바이트는 큰 패킷 제한에서 성능이 어떻게 달라지는지 알려줍니다. 1023 바이트는 체크섬 알고리즘의 다양한 변종의 성능에 홀수 크기의 패킷의 영향을 진단하는 데 도움이 됩니다.

이렇게 하면 패킷의 체크섬을 쉽게 확인할 수 있습니다. 패킷을 수신할 때 수신기는 체크섬 필드를 포함한 모든 관련 옥텟을 합산합니다. 숫자와 패킷의 보체의 합이 항상 0이기 때문에 패킷이 올바른 경우 결과는 0이어야 합니다. TCP는 종단 간 흐름 제어 프로토콜을 사용하여 보낸 사람에게 TCP 수신기가 데이터를 안정적으로 수신하고 처리하기에 너무 빨리 데이터를 보내지 않도록 합니다. 다양한 네트워크 속도의 기계가 통신하는 환경에서는 흐름 제어를 위한 메커니즘이 필수적입니다. 예를 들어, PC가 수신된 데이터를 천천히 처리하는 스마트폰으로 데이터를 전송하는 경우 스마트폰은 과부하되지 않도록 데이터 흐름을 조절해야 합니다. [5] 버퍼가 잘못 정렬되었지만 여전히 균등하게 정렬된 경우 유사한 알고리즘을 사용할 수 있습니다. 16바이트정렬(또는 체크섬바이트가 부족할 때까지)이 시작될 바이트를 처리하기만 하면 됩니다. 누적을 해당 값으로 초기화하고 벡터화된 코드로 정상적으로 계속합니다.

그러나, 우리가 이상한 정렬에 있다면 우리는 문제가 발생합니다. 우리는 처리 할 부분 16 비트 단어를해야합니다. 여기서 체크섬이 엔디안 중립이라는 사실은 우리를 구해주죠. 체크섬의 일부를 “잘못된” endian 형식으로 축적한 다음 나중에 수정할 수 있습니다. 그러나 체크섬 자체가 계산될 때 TCP 헤더의 Checksum 필드의 값은 무엇입니까? 체크섬 계산 자체가 TCP 헤더, 데이터 및 의사 헤더를 사용한다는 것을 알게 되었습니다. 그래서이 계산하는 동안 tcp 헤더의 체크섬 필드에 배치됩니다 무엇? 체크섬 필드는 헤더와 텍스트의 모든 16 비트 단어의 보완 합계의 16 비트 의 보완입니다. 세그먼트에 체크스할 헤더와 텍스트 옥텟의 홀수가 포함된 경우 마지막 옥텟은 오른쪽에 0으로 패딩되어 체크섬 을 위해 16비트 단어를 형성합니다. 패드가 세그먼트의 일부로 전송되지 않습니다. 체크섬을 계산하는 동안 체크섬 필드 자체가 0으로 바뀝니다. 수정된 패킷의 체크섬을 다시 계산하는 가장 빠른 방법은 패킷이 수정될 때 체크섬을 점진적으로 업데이트하는 것입니다.

예를 들어 출발지와 도착지 포트 및 주소를 수정하는 NAT의 경우를 예로 들어 보세요. 이러한 작업은 TCP 및 IP 체크섬모두에 영향을 미칩니다. IP 체크섬의 경우 소스 주소가 수정되면 새로운 IP 체크섬을 다시 계산할 수 있습니다: 의사 헤더로 UDP 프레임에 대한 체크섬 계산 및 : 해결! (확인을 위한 C-Code, 예제 출력 및 와이어샤크 데이터프레임 포함) 이 기능을 사용하면 아직 네트워크 어댑터에 도달하지 않은 아웃바운드 패킷에서 잘못된 체크섬을 보고하기 위해 체크섬 오프로드를 사용하는 것에 대해 알지 못하거나 불확실한 패킷 분석기의 원인이 될 수 있습니다. [51] 네트워크 어댑터에 의해 전송되기 전에 가로채는 패킷에 대해서만 발생합니다. 네트워크 어댑터가 와이어로 전송하는 모든 패킷에는 유효한 체크섬이 있습니다. [52] 이 문제는 가상 장치 드라이버가 체크섬 계산(최적화)을 생략할 수 있는 동일한 호스트의 가상 시스템 간에 패킷이 전송되는 모니터링시에도 발생할 수 있으며, 나중에 VM 호스트에서 체크섬이 계산될 것임을 알 수 있습니다. 커널 또는 물리적 하드웨어.