Câu trả lời:
Đối với các thông báo loại truy vấn / trả lời ICMP như Echoes (ping), NAPT sử dụng ID truy vấn ICMP (đôi khi chỉ được gọi là ID ICMP) giống như cách sử dụng số cổng TCP hoặc UDP.
Đối với các thông báo lỗi ICMP như Destination Unreachable, nó sử dụng bản sao bên trong của gói ICMP của các tiêu đề của khung gây ra lỗi để tìm ra ánh xạ nào trong bảng NAT được sử dụng để dịch nó.
Các quy trình này được tham chiếu ngắn gọn trong một số RFC liên quan đến NAT, nhưng tôi đã gặp khó khăn khi tìm một quy trình rõ ràng đánh vần thủ tục. Xem "NAT truyền thống", RFC3022 , phần 4.1.
Điều này không mâu thuẫn với bất kỳ ánh xạ TCP hoặc UDP nào vì trong triển khai NAPT tốt, giao thức là một trong những thông tin được giữ trong mục nhập bảng NAT để làm cho nó trở nên duy nhất.
Tôi đã thực hiện một mô phỏng nhỏ (dựa trên thiết bị GSN3 Kali Linux CLI), để kiểm tra xem điều gì xảy ra khi ICMP đụng độ (rõ ràng, nó có thể là nhà cung cấp cụ thể):
Trên các yêu cầu / phản hồi của ICMP Trước khi NAT hiển thị tình huống, khi Số nhận dạng của các yêu cầu ICMP từ 2 thiết bị (với IP 10.0.0.1 và 10.0.0.2 một cách tôn trọng) trở nên bằng nhau.
Đồng thời trên các yêu cầu / phản hồi của ICMP Sau khi NAT được hiển thị rằng Mã định danh của phiên ICMP xung đột được thay đổi thành 0 bởi NAT và được tăng lên từ đó.
Tóm lại, có thể nói rằng Linux NAT xử lý sự xung đột của các định danh ICMP trên nó (Vì các định danh ICMP không bị thay đổi trước NAT).