CHƯƠNG 5: ICMP (PHẦN 1)
I. PING
1. Đặc điểm
Giao thức thông điệp điều khiển liên mạng (Internetwork Control Message Protocol - ICMP) cho phép việc thử nghiệm và khắc phục các sự cố của giao thức TCP/IP. ICMP định nghĩa các các thông điệp được dùng để xác định khi nào một hệ thống mạng có thể phân phối các gói tin. Thật ra, ICMP là một thành phần bắt buộc của mọi hiện thực IP.
Trong một vài trường hợp, một máy ngõ ra hoặc một máy đích sẽ cần giao tiếp với máy nguồn để báo cáo lại các lỗi xảy ra trong quá trình xử lý gói tin. Trong trường hợp đó, ICMP sẽ được dùng. ICMP sử dụng IP như thể nó (ICMP) nằm ở một mức cao hơn.
Lớp |
Mô hình OSI của ISO |
Mô hình TCP/IP |
Giao thức, Ứng dụng, và Tiện ích |
7 |
Ứng dụng |
Ứng dụng |
Telnet, NFS, FTP, TFTP, HTTP, DNS, X.500, *RIP, *BGP, *DHCP, ASCII, EBCDIC, JPEG, GIF, NetBIOS, SOCKETS |
6 |
Trình diễn |
||
5 |
Phiên |
||
4 |
Vận chuyển |
Vận chuyển Máy - đến - Máy |
TCP, UDP, *OSPF, *EIGRP |
3 |
Mạng |
Internet |
IP, ICMP, ARP/RARP |
2 |
Liên kết dữ liệu |
Liên kết dữ liệu |
Ethernet, Token Ring, FDDI, Frame Relay, ATM, ISDN, HDLC và các môi trường truyền dẫn khác. |
1 |
Vật lý |
Vật lý |
Bảng 5.1: Bảng so sánh hai mô hình OSI và TCP/IP
Cũng trong bảng 5.1, tương tự cho ARP. ARP không phải là một giao thức lớp mạng. Nó là một ứng dụng được viết trực tiếp trên lớp liên kết dữ liệu. Có một cách thức khác để chia các loại thông điệp này là mặt phẳng điều khiển, mặt phẳng quản lý và mặt phẳng dữ liệu.
Đôi khi gói tin ping còn được gọi là yêu cầu ICMP (ICMP echo request) và trả lời ICMP (ICMP echo reply), nhưng thật ra, ICMP bao gồm nhiều loại thông điệp khác nhau.
Ping thường được dùng để kiểm tra kết nối giữa các thiết bị. Đây là một giao thức rất phổ biến để kiểm tra sự tồn tại của một máy. Ping cũng có thể được dùng để khắc phục những vấn đề phức tạp hơn trong mạng. Phần lớn các hiện thực của lệnh ping cho phép bạn thay đổi kích thước của gói tin. Bảng 5.2 mô tả một vài thống kê về kích thước gói tin ping trong IOS của Cisco và các thiết bị Switch Catalyst.
Thiết bị |
Kích cỡ gói tin tối thiểu |
Kích cỡ gói tin tối đa |
Kích cỡ gói tin mặc định |
IOS của Cisco |
36 byte |
18024 byte |
100 byte |
Catalyst của Cisco |
56 byte |
427 byte |
64 byte |
Bảng 5.2: Kích cỡ gói tin ping
Phần lớn các hiện thực của lệnh ping trên các máy gửi từng gói tin mỗi giây. IOS của Cisco cho phép bạn gửi các gói tin nhanh hay chậm tùy thuộc vào khả năng của CPU và các thiết bị mạng có thể truyền nó như thế nào.
Có vài vấn đề bạn cần phải nhận biết khi dùng lệnh ping. Ping được tạo ra và được trả lời bởi CPU của các thiết bị Cisco. Mặc dù lệnh ping không chiếm nhiều thời gian xử lý của CPU, bạn phải cẩn thận khi dùng các thiết bị có tải lớn để trả lời hoặc tạo ra lệnh ping. Trên các thiết bị Cisco, tác vụ ping được gán độ ưu tiên rất thấp. Vì vậy, có thể một thiết bị đang bận rộn không thể trả lời lệnh ping. Nếu một thiết bị mà bạn đang ping không có trong bảng ARP, gói tin ping đầu tiên thường bị hết hạn. Do đó, phần lớn các ứng dụng mạng dùng ping sẽ gửi ra vài gói tin ping trước khi thực sự thông báo là bị mất kết nối. Cũng tương tự, bạn phải rất cẩn thận khi dùng lệnh ping để xác định độ trễ hay thông lượng của một hệ thống mạng bởi vì bạn đang đo lường tính năng ICMP của các đầu cuối chứ không phải đo hiệu năng thực sự của hệ thống mạng.
Bảng dưới đây liệt kê các loại thông điệp ICMP quan trọng nhất:
Loại thông điệp ICMP |
Mục đích |
Đích không thể đển được (Destination Unreachable) |
Thông báo cho máy nguồn là có một vấn đề trong phân phối gói tin |
Thời gian vượt ngưỡng (Time Exceed) |
Thời gian để chuyển một gói tin là quá lớn. Gói tin bị loại bỏ. |
Nguồn vi phạm (Source Quench) |
Máy nguồn đang gửi dữ liệu ở mức nhanh hơn mà máy đích có thể xử lý. Thông điệp này yêu cầu máy gửi gửi chậm lại. |
Gửi lần nữa (Redirect) |
Được dùng bởi một router thông báo cho một máy dùng một địa chỉ router khác tốt hơn cho những lần gửi khác sắp tới. |
Echo |
Được dùng bởi lệnh ping để kiểm tra kết nối. |
Địa chỉ/mặt nạ yêu cầu/trả lời (Address/mask request/reply) |
Được dùng để học và để truy vấn địa chỉ IP/ mặt nạ được dùng. |
Quảng bá router và lựa chọn (Router Advertisement and Selection) |
Được dùng để cho phép các máy học địa chỉ IP của các router gắn vào mạng con. |
Bảng 5.3: Liệt kê các loại thông điệp của ICMP
Mỗi thông điệp ICMP chứa một trường loại (type) và trường mã (code). Trường loại để chỉ ra loại thông điệp trong bảng 5.3. Trường mã ngầm định một loại kiểu con. Ví dụ, nhiều người hay mô tả lệnh ping như là yêu cầu ICMP và trả lời ICMP nhưng trong thực tế, hai loại thông điệp trên có cùng kiểu Echo nhưng khác mã (yêu cầu và trả lời).
Ký tự |
Mô tả |
! |
Dấu chấm than biểu thị cho gói tin ping thành công |
. |
Dấu chấm biểu thị gói tin trả lời bị hết hạn |
U |
Một đích không thể đến được và gói tin PDU lỗi được nhận |
Q |
Đích đang bận không trả lời được |
M |
Không thể phân mảnh |
? |
Loại gói tin không biết |
& |
Thời gian sống của gói tin hết |
Bảng 5.4: Các ký tự của lệnh ping
2. Thông điệp ICMP không thể đến được
Khi một thiết bị nhận ra rằng một gói tin không thể được đưa đến địa chỉ đích ghi trong gói tin, thiết bị sẽ gửi ngược về một thông điệp ICMP không thể đến được (ICMP Unreachable). Để giúp xác định nguyên nhân sâu xa tại sao gói tin không thể được phân phối, thông điệp ICMP bao gồm 1 trong 5 giá trị sau để chỉ ra nguyên nhân của vấn đề.
Mã không thể đến được |
Ý nghĩa |
Ví dụ |
Mạng không thể đến được (Network Unreachable) |
Router không có đường đi trong trong bảng định tuyến trùng với địa chỉ đích của gói tin |
Router A không có tuyến đi về 10.1.2.0. Router A gửi thông điệp không thể đến được về Fred |
Máy không thể đến được (Host Unreachable) |
Gói tin đã đến được router cuối cùng, nhưng máy không trả lời yêu cầu ARP |
Máy Web bị tắt. Router B gửi cho Fred một thông điệp máy không thể đến được |
Không thể phân mảnh (Can’t fragment) |
Một gói tin có kích thước lớn hơn MTU nhưng gói tin có bit DF (Don’t fragment) được thiếp lập. |
Router A có MTU là 1500 byte. Gói tin có kích thước 1600 byte và có DF=1. |
Giao thức không thể đến được (Protocol Unreachable) |
Gói tin đã đến được máy đích nhưng trên máy đích không cài giao thức đó |
Máy Web không cài giao thức TCP. Máy Web trả lời thông điệp không thể đến được cho Fred. |
Cổng không thể đến được (Port Unreachable) |
Gói tin được gửi đến máy đích. Không có tiến trình nào lắng nghe trên cổng đích |
Máy Web đang làm việc nhưng máy chủ Web không hoạt động. Máy Web gửi cổng không thể đến được về cho Fred. |
Bảng 5.4: Các mã của thông điệp ICMP không thể đến được
3. Thông điệp ICMP thời gian vượt ngưỡng
Thông điệp ICMP thời gian vượt ngưỡng (ICMP Time Exceed) lưu ý một máy khi một gói tin mà máy đó đã gửi bị loại bỏ bởi vì bị hết thời gian (timeout). Các gói tin thường thực sự không có nhãn thời gian, nhưng để ngăn ngừa gói tin bị chuyển đi một cách bất tận giữa các mạng, mỗi gói tin có một trường TTL.
Router trừ giá trị TTL của gói tin đi 1 mỗi khi router chuyển một gói tin đi. Nếu một router nhận được một gói tin và sau đó trừ giá trị TTL xuống còn 0, router sẽ loại bỏ gói tin. Điều này mang ý nghĩa là gói tin đã được định tuyến đi quá lâu trong mạng. Router thực hiện loại bỏ gói tin sẽ làm thêm một động tác là gửi ngược về một thông điệp ICMP thời gian vượt ngưỡng đến máy gửi ban đầu.
Sử dụng đặc điểm này, lệnh trace trong IOS của Cisco cũng dùng thông điệp thời gian vượt ngưỡng và trường TTL trong cơ chế hoạt động của nó. Đầu tiên, lệnh trace sẽ gửi ra ba gói tin, mỗi gói với giá trị TTL = 1. Kết quả là, thông điệp ICMP thời gian vượt ngưỡng sẽ bị trả về bởi những router đầu tiên trong tuyến đường. Lý do là những router đầu tiên sẽ trừ giá trị TTL đi 1, còn lại 0. Những router đầu tiên chính là các router loại bỏ gói tin nên nó truyền ngược thông điệp thời gian vượt ngưỡng về ngược lại máy nguồn. Như vậy, máy nguồn sau phép thử đầu tiên đã biết được những router gần nó nhất (cách nó một chặng). Sau đó, lệnh trace trên router sẽ tiếp tục gửi ra 3 gói tin với TTL = 2. Sau phép thử lần 2, router sẽ biết được những router cách nó 2 chặng. Router cứ thế tiếp tục gửi ra các gói với TTL = 3 và cứ thế tiếp tục cho đến khi nào nó nhận được một trả lời từ máy đích, là máy mà nó muốn tìm đường đi.
RouterA# trace 10.12.14
Type escape sequence to abort.
Tracing the route to 10.1.2.14
1 10.1.3.253 8 msec 4 msec 4 msec
2 10.1.2.14 12 msec 8 msec 4 msec
RouterA#
RouterB#
ICMP: time exceeded (time to live) sent to 10.1.3.251 (dest was 10.1.2.14)
ICMP: time exceeded (time to live) sent to 10.1.3.251 (dest was 10.1.2.14)
ICMP: time exceeded (time to live) sent to 10.1.3.251 (dest was 10.1.2.14)
4. Gói tin ICMP gửi lần nữa
Thông điệp gửi lần nữa ICMP (ICMP Redirect) cho phép router ngõ ra của một má thông báo cho các máy cục bộ một router tốt hơn để đến một địa chỉ đích nào đó. Để thực hiện việc đó, một router gửi ra một thông điệp ICMP redirect đến một máy để nói địa chỉ IP của một router tốt hơn. Trong hình 5.2, PC dùng Router B như router mặc định, nhưng đường đi về mạng 10.1.4.0/24 thông qua Router A là tốt hơn.
Các bước sau sẽ diễn ra:
PC gửi ra một gói tin, đi về mạng đích 10.1.4.0/24 đến Router B.
Router B chuyển gói tin dựa trên bảng định tuyến của nó.
Router B gửi ICMP Redirect về PC, thông báo rằng các gói tin đi về 10.1.4.0/24 nên đi thông qua router A.
PC sẽ gửi các gói tin tiếp theo đi về máy đó thông qua router A.
Dĩ nhiên máy có thể bỏ qua các thông điệp redirect và tiếp tục gửi về B.
II. ARP, Proxy ARP, ARP nghịch chiều, BOOTP và DHCP
Các giao thức này có chung một chức năng là giúp các máy học các thông tin sau cho nó có thể gửi và nhận gói tin IP thành công. Đặc biệt ARP và Proxy ARP chỉ ra một phương thức để các máy học địa chỉ MAC của một máy khác. Trong khi đó, chức năng của RARP, BOOTP và DHCP sẽ định nghĩa làm thế nào một máy có thể tìm ra địa chỉ IP của chính nó và các thông tin liên quan.
1. So sánh ARP và Proxy ARP
Trong hình 5.3, cả Fred và Barney đều cố gắng đi đến máy chủ Web ở địa chỉ 10.1.2.200. Fred sẽ tuân theo một tiến trình ARP bình thường, broadcast một yêu cầu ARP với địa chỉ IP của cổng E1 của R1 là địa chỉ đích. Thông điệp ARP có trường mục tiêu (target) chứa địa chỉ MAC cần tìm (ban đầu bằng 0) và địa chỉ đích IP là 10.1.1.1. Gói tin trả lời ARP sẽ liệt kê tất cả các địa chỉ MAC kết hợp với địa chỉ IP này, trong trường hợp này là MAC của cổng E1 của R1. Thông điệp ARP không có bao gồm phần đầu IP mặc dù nó có địa chỉ nguồn và địa chỉ IP đích trong vị trí tương tự như trong phần đầu IP. Giao thức ARP sẽ gửi về địa chỉ đích là 255.255.255.255. Kiểu giao thức trong ARP Ethernet là 0x0806 trong khi gói tin IP của kiểu Ethernet là 0x0800.
Proxy ARP dùng cùng thông điệp như ARP, nhưng thông điệp yêu cầu ARP đang tìm một địa chỉ MAC không có trên mạng con cục bộ. Bởi vì thông điệp ARP broadcast trên mạng con cục bộ, nó sẽ không nghe bởi máy đích. Vì vậy, nếu một router có thể định tuyến đến một máy đích, router sẽ gửi ra một gói tin trả lời ARP thay cho máy đích đó.
Ví dụ, Barnet đặt địa chỉ máy chủ Web 10.1.2.200 trong trường target bởi vì Baret nghĩ rằng máy của mình trên cùng mạng con với máy Web do có cùng giá trị mặt nạ 255.0.0.0. Thông điệp yêu cầu ARP là một L2 broadcast vì vậy R1 sẽ không trung chuyển các ARP broadcast này. Tuy nhiên, do biết rằng yêu cầu ARP sẽ không bao giờ đến được mạng con 10.1.2.200, R1 sẽ trả lời lại thông điệp ARP thay cho máy chủ. R1 sẽ đóng vai trò của máy chủ Web nên giao thức này có tên là proxy ARP. Ngoài ra cũng lưu ý rằng thông điệp trả lời ARP sẽ chứa địa chỉ MAC của cổng E1 của R1 vì vậy Barney sẽ chuyển khung tin đến R1 khi Barney muốn gửi một gói tin đến máy chủ Web.
Trước khi có DHCP, nhiều hệ thống mạng dựa trên Proxy ARP, cấu hình các mặt nạ có giá trị mặt nạ mặc định trong các mạng tương ứng của nó. Bất chấp phiên bản proxy đang được dùng kết quả cuối cùng là máy sẽ học được địa chỉ MAC của router để chuyển gói tin về mạng con khác.
2. RARP, BOOTP và DHCP
Các tiến trình ARP và proxy ARP diễn ra sau khi một máy biết địa chỉ IP và mặt nạ mạng con của nó. Trong khi đó, RARP, BOOTP và DHCP đại diện cho các giao thức được định nghĩa để học địa chỉ IP của một máy tính. Cả 3 giao thức này đều yêu cầu các máy khách gửi broadcast để bắt đầu quá trình tìm kiếm IP và cả 3 giao thức này đều dựa trên việc sử dụng máy chủ để nghe và trả lời các yêu cầu cũng như là cung cấp địa chỉ IP cho các máy khách.
Một máy con sẽ cố gắng tìm ra địa chỉ IP của chính nó bằng gói tin yêu cầu RARP. Vì RARP dùng cùng loại thông điệp giống như ARP. Tuy nhiên gói tin yêu cầu ARP sẽ ghi địa chỉ MAC đích như là địa chỉ của chính nó và địa chỉ đích IP là 0.0.0.0. Một máy chủ RARP cấu hình trước sẽ phải hiện diện trên cùng một mạng con của máy khách. Máy chủ RARP sẽ nhận các gói tin yêu cầu RARP và thực hiện việc tìm kiếm trong bảng cấu hình của nó. Nếu địa chỉ MAC đích được chỉ ra trong gói yêu cầu ARP thì máy chủ RARP gửi ngược về một gói ARP trả lời, bằng cách điền vào địa chỉ được cấu hình trong trường địa chỉ IP nguồn của gói tin trả lời RARP.
BOOTP được thiết kế để cải tiến việc gán địa chỉ của RARP. BOOTP dùng một tập hợp các thông điệp hoàn toàn khác. Các thông điệp này có chứa các lệnh bên trong gói tin IP và UDP. Với một cấu hình router chính xác, một router có thể chuyển các gói tin BOOTP đến các mạng con khác. Điều này giúp cho quá trình triển khai một máy chủ BOOTP cục bộ. Ngoài ra, BOOTP cũng hỗ trợ việc gán các thông tin khác, chẳng hạn như mặt nạ mạng con, ngõ ra, địa chỉ DNS và địa chỉ IP của một ảnh khởi tạo (boot image). Tuy nhiên, BOOTP không giải quyết được các gánh nặng cấu hình của RARP. BOOTP vẫn đòi hỏi máy chủ phải được cấu hình trước với địa chỉ MAC và địa chỉ IP của từng máy con.
DHCP là bước kế tiếp trong quá trình cải tiến của việc gán địa chỉ IP. Dựa trên định dạng của giao thức BOOTP, DHCP tập trung vào việc gán động các thông tin khác nhau và cho phép các thay đổi mà không cần phải cấu hình trước địa chỉ MAC cho từng máy con. DHCP cũng có các tính năng gán địa chỉ tạm thời, cho phép xin lại địa chỉ, khai báo các dãy địa chỉ và hỗ trợ các dạng tên DNS đầy đủ (FQDN). Các máy chủ DHCP thường nằm trong một khu vực tập trung, trong đó các router khác sẽ chuyển các yêu cầu DHCP đến máy chủ này bằng cách thay đổi địa chỉ đích của gói tin yêu cầu DHCP cho đúng bằng với địa chỉ của máy chủ DHCP. Tính năng này gọi là chuyển tiếp máy chủ DHCP (DHCP relay agent).
Trong hình 5.5, nếu Fred và Barney đều dùng DHCP. Nếu địa chỉ DHCP là 10.1.2.202, R1 sẽ thay đổi địa chỉ của gói tin yêu cầu DHCP từ nguồn/đích là 255.255.255.255 sang thành một gói tin có địa chỉ nguồn là 10.1.1.255 (địa chỉ directed-broadcast của Fred) và địa chỉ đích là 10.1.2.202. Các yêu cầu DHCP sau đó sẽ được định tuyến đến máy chủ DHCP và sau đó các thông điệp trả lời DHCP sẽ được gửi ngược về trên mạng con đó với địa chỉ đích là địa chỉ broadcast của mạng con của Fred. Cấu hình duy nhất được yêu cầu trên router là dùng lệnh ip helper-address 10.1.2.202 trên cổng E1 của router.
Ngoài ra, R1 cũng sẽ được cấu hình như là DHCP server. Xem cấu hình dưới đây:
Các thông điệp UDP broadcast trong E0 sẽ được chuyển thành unicast về địa chỉ 10.1.2.202. Địa chỉ IP nguồn sẽ thay đổi thành 10.1.1.255 sao cho gói tin trả về sẽ được broadcast ngược lại cổng E0.
interface Ethernet1
ip address 10.1.1.11 255.255.255.0
ip helper-address 10.1.2.202
Dưới đây là một cấu hình thay thế với R1 và máy chủ DHCP. R1 gán địa chỉ IP không nằm trong 20 địa chỉ đầu tiên trong mạng con và thông báo cho máy con địa chỉ của nó, mặt nạ mạng con và router mặc định. Khoảng thời gian địa chỉ còn hiệu lực là 0 ngày, 0 giờ và 20 phút.
ip dhcp excluded-address 10.1.1.0 10.1.1.20
!
ip dhcp pool subnet1
network 10.1.1.0 255.255.255.0
dns-server 10.1.2.203
default-router 1100..11..11..11
leasee 0 0 20
Đặc điểm |
RARP |
BOOTP |
DHCP |
Dựa trên máy chủ để cung cấp địa chỉ IP |
Có |
Có |
Có |
Đóng gói các thông điệp bên trong gói tin IP và UDP, sao cho các thông điệp có thể được chuyển đến các máy chủ ở xa |
Không |
Có |
Có |
Máy con có thể tìm ra giá trị mặt nạ, ngõ ra, DNS và máy chủ tải. |
Không |
Có |
Có |
Có khả năng gán địa chỉ IP từ một dãy các địa chỉ mà không có kiến thức về địa chỉ MAC. |
Không |
Không |
Có |
Cho phép mượn địa chỉ tạm thời |
Không |
Không |
Có |
Bao gồm khả năng mở rộng cho các client là FQDN. |
Không |
Không |
Có |