TCP/IP 프로토콜의 패킷화 및 재조립 원리 소개
조각화는 패킷 교환 아이디어의 구체화이자 해결된 두 가지 주요 문제 중 하나이기도 합니다. IP 프로토콜에 의해. IP 프로토콜의 조각화 알고리즘은 주로 서로 다른 물리적 네트워크의 서로 다른 최대 전송 단위(MTU)로 인해 발생하는 전송 문제를 해결합니다. 그러나 전송 중 패킷의 지속적인 조각화 및 재구성으로 인해 많은 작업량이 발생하고 일부 불안전한 요소가 증가합니다. 이 짧은 문서에서는 IP 단편화로 인해 발생하는 이유, 원칙, 구현 및 보안 문제에 대해 논의합니다.
1. IP 조각화란 무엇입니까
IP 조각화는 네트워크에서 IP 패킷을 전송하는 기술적인 방법입니다. IP 프로토콜은 데이터 패킷을 전송할 때 데이터 패킷을 여러 조각으로 나누어 전송을 위해 대상 시스템에서 재조립합니다. 이 프로세스를 조각화라고 합니다.
2. IP 조각화가 필요한 이유
각 물리적 네트워크는 링크 계층 MTU(최대 전송 단위)라고 하는 링크 계층 데이터 프레임의 최대 길이를 규정합니다. IP 프로토콜은 데이터 패킷을 전송하는데, 데이터 프레임 헤더를 추가한 후 IP 데이터그램의 길이가 MTU보다 길면 데이터 패킷은 전송을 위해 여러 조각으로 나누어 대상 시스템에서 재조립됩니다. 예를 들어, 이더넷 환경에서 전송할 수 있는 최대 IP 패킷 크기(MTU)는 1500바이트입니다. 전송하려는 데이터 프레임의 크기가 1500바이트를 초과하는 경우, 즉 IP 데이터그램의 길이가 1472(1500-20-8=1472, 일반 데이터그램)바이트보다 큰 경우 전송 전에 조각화해야 합니다.
3. IP 조각화 원리 및 분석
조각화 및 재조립 과정은 전송 계층에 투명합니다. 그 이유는 IP 데이터그램이 조각화된 후에만 가능하기 때문입니다. 목적지 스테이션에 도달할 때만 재조립되고 목적지의 IP 계층에 의해 완료됩니다. 조각화된 데이터그램은 필요에 따라 다시 조각화될 수 있습니다.
IP 조각과 전체 IP 패킷은 거의 동일한 IP 헤더를 가지므로 각 조각마다 ID 필드가 일관되므로 샤딩 중에 동일한 IP 패킷에서 식별할 수 있습니다. IP 헤더에서 16비트 식별 번호는 IP 패킷의 ID를 고유하게 기록하고 동일한 ID를 가진 IP 조각이 재조립되는 반면 13비트 조각 오프셋은 전체 패킷에 대한 IP 조각의 위치를 기록합니다. ; 그리고 두 테이블 중간에 있는 3비트 플래그는 조각 뒤에 새로운 조각이 있는지 여부를 나타냅니다. 이 세 가지 플래그는 IP 단편화(추후 소개)의 모든 정보를 구성하며, 수신자는 이 정보를 사용하여 IP 데이터를 재구성할 수 있습니다.
1. 플래그 필드의 역할
플래그 필드는 조각화된 데이터그램에서 큰 역할을 합니다. 플래그 필드의 비트는 "조각화 없음" 비트라고 하며 비트 중 하나는 "더 많은 조각화"를 나타냅니다. 마지막 조각을 제외하고 데이터그램을 구성하는 다른 모든 조각은 이 비트를 1로 설정해야 합니다. 조각 오프셋 필드는 원본 데이터그램 시작 부분의 조각 오프셋을 나타냅니다. 또한, 데이터그램이 조각화되면 각 조각의 전체 길이 값이 조각의 길이 값으로 변경됩니다. 플래그 필드 비트가 1로 설정되면 IP는 데이터그램을 조각화하지 않습니다. 중간 라우터에서 조각화해야 하는 경우 데이터그램을 삭제하고 ICMP 도달 불가 오류 메시지를 소스 호스트에 보냅니다. 특별한 필요가 없으면 1로 설정하면 안 됩니다. 가장 오른쪽 비트를 1로 설정하면 패킷이 마지막 IP 조각이 아님을 나타냅니다. 의도적으로 전체 IP 조각 대신 일부 IP 조각을 보내면 대상 호스트는 항상 조각이 소비되고 시스템 리소스를 차지할 때까지 기다리게 됩니다. 일부 샤드 스톰 공격은 이 원칙에 따라 작동합니다. 여기서는 이더넷 전송의 전기적 제한으로 인해 각 이더넷 프레임의 최소 크기는 64바이트이고 최대 크기는 1518바이트입니다.(DMAC 대상 MAC 주소 48) 비트 = 6바이트 + SMAC 소스 MAC 주소는 48비트 = 6바이트 + 유형 필드 2바이트) 14바이트이고 프레임 테일 CRC 확인 부분은 4바이트입니다. 그러면 상위 계층 프로토콜을 전달하는 나머지 부분, 즉 데이터 필드는 최대 1500바이트만 가질 수 있습니다. 이는 앞서 언급한 MTU 값입니다.
이는 네트워크 계층 프로토콜이 매우 우려하는 사항이기도 합니다. 네트워크 계층의 IP 프로토콜은 이 값을 기반으로 상위 계층에서 전송된 데이터를 조각화할지 여부를 결정하기 때문입니다. 큰 빵 조각을 상자에 담을 수 없듯이, 빵을 여러 조각으로 잘라서 여러 상자에 담아야 합니다.
다음은 IP 헤더의 플래그 비트 형식과 각 플래그의 의미입니다.
식별
R
DF
MF
조각 오프셋
R: 예약되어 있으며 사용되지 않습니다. DF: 조각화 안 함, "조각화 없음" 비트(이 비트가 다음으로 설정된 경우) 1, IP 계층은 데이터그램을 조각화하지 않습니다. MF: 더 많은 조각, "더 많은 조각", 마지막 조각을 제외하고 데이터그램을 구성하는 다른 모든 조각은 비트를 1로 설정해야 합니다. 조각 오프셋: 조각은 원본 데이터를 오프셋합니다. 패키지가 시작되는 위치입니다. 오프셋할 바이트 수는 이 값에 8을 곱한 값입니다.
2. MTU 원칙
두 개의 원격 PC가 통신해야 하는 경우 해당 데이터는 서로 다른 미디어의 MTU에 도달하기 위해 많은 라우터와 다양한 네트워크 미디어를 통과해야 합니다. 서로 다른 두께(다른 MTU)의 수도관으로 구성된 긴 수도관 부분과 마찬가지로 이 수도관 부분을 통과하는 물의 최대량은 중앙에 있는 가장 얇은 수도관에 의해 결정됩니다. .
네트워크 계층의 상위 계층 프로토콜(여기서는 TCP/IP 프로토콜 제품군을 예로 들어)에 대해 그들은 "수도관"의 두께에 관심이 없다고 생각합니다. 네트워크 계층의 문제입니다. 네트워크 계층 IP 프로토콜은 상위 계층 프로토콜에서 내려오는 각 데이터 패킷의 크기를 확인하고 로컬 MTU의 크기에 따라 "조각화" 처리를 수행할지 여부를 결정합니다. 단편화의 가장 큰 단점은 전송 성능이 저하된다는 점인데, 한 번에 할 수 있는 일이 여러 번 나누어지기 때문에 네트워크 계층의 상위 계층(즉, 전송 계층)을 구현할 때 이에 주목하는 경우가 많습니다. 레이어)! 어떤 이유로든 이를 인식하지 못하는 고위 공무원이 있습니다. 빵을 완전히 자르지 말라고 요구할 예정이므로 DF(돈)라는 라벨을 추가하겠습니다. 't Fragment)를 IP 데이터 패킷의 헤더에 추가합니다. 이런 방식으로 IP 데이터 패킷이 네트워크의 큰 부분(수도관 내부)에서 전송될 때 MTU가 IP 데이터 패킷보다 작으면 전달 장치는 필요에 따라 데이터 패킷을 삭제합니다. 그런 다음 보낸 사람에게 오류 메시지를 반환합니다. 이로 인해 일부 통신 문제가 발생하는 경우가 많지만 다행히 대부분의 네트워크 링크의 MTU는 1500 이상입니다(X.25 네트워크 중 576개와 지점간 네트워크 중 296개만이 1500 미만입니다).
UDP 프로토콜의 경우 프로토콜 자체는 연결 없는 프로토콜이며 데이터 패킷의 도착 순서와 올바르게 도착하는지 여부에 신경 쓰지 않으므로 일반적으로 UDP 애플리케이션에는 조각화에 대한 특별한 요구 사항이 없습니다.
TCP 프로토콜의 경우에는 다릅니다. TCP 프로토콜의 경우 데이터 패킷의 도착 순서와 전송 오류 여부가 매우 중요합니다. 따라서 일부 TCP 응용 프로그램에는 조각화에 대한 요구 사항이 있습니다. 즉 조각화할 수 없습니다(DF).
3. MSS의 원리
MSS(Maxmum Sigmentation Size)는 TCP 패킷이 매번 전송할 수 있는 최대 데이터 세그먼트입니다. 최상의 전송 성능을 달성하기 위해 TCP 프로토콜은 일반적으로 연결을 설정할 때 양쪽 당사자의 MSS 값을 협상합니다. 이 값은 TCP 프로토콜이 구현될 때 MTU 값으로 대체되는 경우가 많습니다(IP에서 20바이트를 빼야 함). 데이터 패킷 헤더 크기 및 TCP 데이터 세그먼트의 헤더는 20바이트이므로 MSS는 종종 1460입니다. 두 통신 당사자는 두 당사자가 제공한 최소 MSS 값을 기반으로 이 연결에 대한 최대 MSS 값을 결정합니다.
IP 데이터그램이 조각화되면 각 조각은 패킷이 되고 자체 IP 헤더를 가지며 라우팅 시 다른 패킷과 독립적입니다. 따라서 데이터그램 조각은 목적지에 도착할 때 순서가 잘못될 수 있지만 IP 헤더에는 수신 측에서 데이터그램 조각을 올바르게 조립할 수 있는 충분한 정보가 있습니다.
IP 단편화 과정이 투명해 보이지만 이를 사용하고 싶게 만드는 한 가지 이유는 데이터 중 하나만 손실되더라도 전체 데이터그램을 다시 전송해야 한다는 것입니다.
IP 계층 자체에는 시간 초과 및 재전송 메커니즘이 없기 때문에 상위 계층이 시간 초과 및 재전송을 담당합니다(TCP에는 시간 초과 및 재전송 메커니즘이 있지만 UDP에는 없습니다. 일부 UDP 응용 프로그램도 시간 초과 및 재전송 자체를 수행합니다). TCP 세그먼트의 일부가 손실되면 TCP는 시간 초과 후 IP 데이터그램에 해당하는 전체 TCP 세그먼트를 다시 보냅니다. 데이터그램에서 단 하나의 데이터그램 조각만 재전송할 수 있는 방법은 없습니다. 실제로 데이터그램이 원본 시스템이 아닌 중간 라우터에 의해 조각화되면 원본 시스템은 데이터그램이 어떻게 조각화되었는지 알 수 없습니다. 이러한 이유로 샤딩을 피하는 경우가 많습니다.
4. IP 조각화 알고리즘의 원리
조각화 재조립은 IP 계층의 가장 중요한 작업 중 하나입니다. 처리의 주요 아이디어는 다음과 같습니다. 한 네트워크 A에서 다른 네트워크 B로, 원래 네트워크의 데이터 패킷이 다른 네트워크 또는 인터페이스의 MTU 길이보다 크면 조각화해야 합니다(DF가 1로 설정된 경우 폐기되고 ICMP 연결할 수 없다는 오류 메시지가 다시 전송됩니다). 따라서 IP 데이터 패킷의 헤더에는 조각난 패킷의 고유 식별 번호, 조각의 오프셋, 마지막 조각인지 여부, 조각화 허용 여부를 나타내는 여러 식별 필드가 있습니다. 전송 중 게이트웨이는 재조각화를 위해 이러한 식별 필드를 사용하고, 대상 호스트는 수신된 조각을 재조립하여 데이터를 복원합니다. 따라서 조각난 패킷이 네트워크 감시 장비, 보안 장비, 시스템 관리 장비를 통과할 때 정보를 획득하고 데이터를 처리하기 위해서는 데이터 패킷의 조각화 또는 재조립이 완료되어야 합니다.
5. IP 조각화의 보안 문제
IP 조각화는 네트워크에서 IP 패킷을 전송하는 데 자주 사용되는 기술이지만 몇 가지 보안 위험이 있습니다. Ping of Death 및 눈물방울과 같은 공격으로 인해 IP 조각을 재구성하는 과정에서 일부 시스템이 충돌하거나 다시 시작될 수 있습니다. 서비스 거부 공격에 사용되는 것 외에도 일부 IP 조각화 공격은 일반적으로 방화벽이나 네트워크 침입 탐지 시스템을 회피하는 수단으로 사용됩니다. 일부 라우터 또는 네트워크 기반 침입 탐지 시스템(NIDS)은 IP 조각화 재조립 기능이 부족하여 정상적인 필터링이나 탐지를 수행할 수 없습니다.
타이니 프래그먼트 공격 소개:
소위 타이니 프래그먼트 공격은 악의적인 조작을 통해 극히 작은 프래그먼트를 전송하여 패킷 필터링 시스템이나 침입 탐지 시스템을 우회하는 공격을 말합니다. 수단. 공격자는 악의적인 조작을 통해 TCP 헤더(보통 20바이트)를 2개의 조각에 분산시켜 대상 포트 번호가 두 번째 조각에 포함될 수 있습니다. 패킷 필터링 장비나 침입 탐지 시스템의 경우 먼저 대상 포트 번호를 결정하여 허용/거부 조치를 취합니다. 그러나 악의적인 조각화를 통해 목적지 포트 번호가 두 번째 조각에 위치하므로 패킷 필터링 장치는 첫 번째 조각을 판단하여 후속 조각의 통과 허용 여부를 결정합니다. 그러나 이러한 조각은 대상 호스트에서 재구성된 후 다양한 공격을 형성합니다. 이 방법은 일부 침입 탐지 시스템과 일부 보안 필터링 시스템을 우회할 수 있습니다. 현재 일부 지능형 패킷 필터링 장치는 헤더에 포트 정보가 포함되지 않은 조각을 직접 삭제합니다.