[MTU 복습]
단편화
[플래그 / 플래그 오프셋 복습]
단편화 pcap 파일 분석
if (pIpHeader->fragOffset & htons((short)0x2000) ||
ntohs(pIpHeader->fragOffset & (unsigned short)0xFF1F) > 0)
{
printf("ID: %04X, Flags: %04X, Offset: %d, Protocol: 0x%02X\\n",
ntohs(pIpHeader->id),
ntohs(pIpHeader->fragOffset & htons((short)0xE000)),
ntohs(pIpHeader->fragOffset & (unsigned short)0xFF1F) * 8,
pIpHeader->protocol);
printf("%d.%d.%d.%d -> %d.%d.%d.%d\\n",
pIpHeader->srcIp[0], pIpHeader->srcIp[1],
pIpHeader->srcIp[2], pIpHeader->srcIp[3],
pIpHeader->dstIp[0], pIpHeader->dstIp[1],
pIpHeader->dstIp[2], pIpHeader->dstIp[3]
);
printf("\\n");
}
⇒ if (pIpHeader->fragOffset & htons((short)0x2000) || ntohs(pIpHeader->fragOffset & (unsigned short)0xFF1F) > 0)
fragOffset 이 8421 방식으로 0010 (0x2000) 인 MF(More Fragments) bit 이거나,
0xFF1F
는 Offset 포함, 나머지 하위 비트들도 포함하는 마스크이고, fragOffset 이 0 보다 크면
⇒ 단편화된 패킷이다.
⇒ ntohs(pIpHeader->fragOffset & 0xE000)
⇒ ntohs(pIpHeader->fragOffset & 0x1FFF) * 8