Traceroute - mỗi gói có TTL == 1


17

Tôi đang làm việc trên Wireshark lab-IP trong Mạng máy tính - Cách tiếp cận từ trên xuống và tôi không hiểu tại sao mọi gói thông thường hết hạn đều có chỉ số TTL là 1.

Đây là tập tin chụp Wireshark của tôi. https://www.dropbox.com/s/rr5wgze9j20gzvu/traceroute-56.pcapng?dl=0

Tôi đã bắt được việc thực thi traceroutechương trình trong Linux (với tùy chọn 56 byte), như được thực hiện bằng lệnh sau:

traceroute http://gaia.cs.umass.edu 56

Bạn có thể thấy rằng hầu hết các gói của TTL == 1 và tôi không biết tại sao, vì tôi đã học được rằng mọi bước nhảy tiếp theo đều có TTL là +1 (hoặc hơn).

Tái bút

  • Tôi đang sử dụng Lubfox trên VMware với mạng được bắc cầu đến máy chủ.
  • Tôi đã chụp nó bằng wireshark trên máy chủ (Windows)
  • Tôi được kết nối với AP không dây bằng máy chủ DHCP của chính nó trên giao thức NAT

Câu trả lời:


14

Hãy để tôi thử trả lời điều này, bởi vì nó phức tạp hơn một chút mà nó có thể trông ban đầu.

Có vẻ như bạn đã biết hoạt động cơ bản của traceroutenhưng trước đây mọi thứ khác ở đây là một bản tóm tắt rất nhỏ:

traceroutecố gắng xác định tất cả các bước ở giữa từ máy chủ của bạn đến máy chủ đích hoặc chỉ khoảng cách, tức là số bước nhảy, từ máy chủ của bạn đến máy chủ đích. Để làm điều đó, nó bắt đầu gửi các gói đến máy chủ đích với số cổng đích "ngẫu nhiên" và TTL bắt đầu từ 1 và tiếp tục tăng.
Ý tưởng là mỗi bộ định tuyến ở giữa làm giảm TTL xuống 1. Do đó, nếu TTL đạt 0 (trong thực tế, bộ định tuyến sắp giảm xuống 0 sẽ tạo ra lỗi trước đó), bộ định tuyến sẽ trả về ICMP Thông báo lỗi " Thời gian tồn tại vượt quá ", ví dụ gói số 24 trong tệp chụp của bạn. Những gì bạn nhận được từ đó là điểm đến của bạn ở xa hơn và đây là lý do tại sao bạn tiếp tục tăng TTL.
Khi gói tin của bạn có chỉ số đủ lớn để đến đích, bạn sẽ nhận được thông báo lỗi ICMP khác: " Không thể truy cập đích (Không thể truy cập cổng) ", ví dụ gói số 208 trong tệp chụp của bạn. Những gì bạn nhận được từ đó là TTL được sử dụng cuối cùng thực sự là số bước nhảy giữa bạn và nút đích. Lý do bạn gặp lỗi đơn giản là vì bạn đang gửi tin nhắn đến một cổng "ngẫu nhiên" mà nút đích (hy vọng) không nghe.

Bây giờ sẽ đi vào chi tiết cụ thể cho tệp chụp của bạn:
Từ trang thủ công của traceroutechúng tôi có thể thấy rằng mỗi TTL được sử dụng 3 lần (tùy chọn '-q') và giao thức mặc định được sử dụng là UDP (tùy chọn '-P'). Bằng cách kiểm tra 3 gói UDP đầu tiên, tức là các gói 8-9-10 , chúng ta có thể thấy thực sự rằng TTL là 1 . 3 tiếp theo, tức là 11-12-13 , có TTL 2 , v.v. Vì vậy, từ quan điểm nguồn mọi thứ dường như đi tốt.

Sau đó, sau một thời gian phụ thuộc vào độ trễ của mạng, chúng tôi bắt đầu nhận được các thông báo lỗi dự đoán. Do đó, chúng ta có thể thấy các gói 24-25-26 là các gói lỗi " Thời gian sống vượt quá " và do đó có nghĩa là đích đến càng xa.

Sự cố gắng và lỗi này vẫn tiếp tục, cho đến khi, cuối cùng, gói 208 và trên bạn có thể thấy thông báo lỗi " Cổng không thể truy cập ", nghĩa là đã đến đích.

Bằng cách đếm các gói bạn gửi và các phản hồi bạn thực sự có thể tìm ra ngay cả từ dấu vết mà TTL thực sự hoạt động nhưng đó là một nhiệm vụ tẻ nhạt :)

Hy vọng rằng đã giúp


siêu giải thích
ksp0422

14

Khách hàng của bạn chỉ gửi ba gói đầu tiên với TTL là 1. Ba gói tiếp theo được gửi với TTL là 2. Ba gói tiếp theo được gửi với TTL là 3. Và cứ tiếp tục như vậy.

Một cách dễ dàng hơn để xem điều này là đặt trường IP TTL làm cột riêng trong Wireshark. Chỉ cần nhấp chuột phải vào giá trị TTL trong bất kỳ gói nào và chọn "Áp dụng dưới dạng Cột": Đặt TTL làm Cột trong Wireshark

Từ đó, bạn có thể thấy các gói 8,9,10 có chỉ số TTL là 1. Và các gói 11,12,13 có chỉ số TTL là 2. Và cứ thế tiếp tục. TTL trong một Traceroute

Điều này đang xảy ra bởi vì đây là cách Traceroute hoạt động. Nó lợi dụng những gì Bộ định tuyến thực hiện khi giảm TTL xuống 0. Thay vì tiếp tục chuyển tiếp gói, nó sẽ gửi lại cho khách hàng ban đầu một "ICMP TTL đã hết hạn trong thông báo Chuyển tuyến" (xem gói số 24 trong bản chụp của bạn) .

Vì vậy, với tư cách là khách hàng, khi bạn gửi bộ gói đầu tiên có chỉ số TTL là 1, bộ định tuyến đầu tiên trong đường dẫn sẽ phản hồi với thông báo hết hạn TTL. Sau đó, bạn đo khoảng thời gian để nhận được tin nhắn hết hạn TTL khi bạn gửi các tin nhắn ban đầu và điều đó mang lại cho bạn ba giá trị đầu tiên trong đầu ra Traceroute.

Sau đó, bạn gửi một bộ ba gói khác có chỉ số TTL là 2. Bộ định tuyến đầu tiên trong đường dẫn giảm giá trị này thành 1, sau đó chuyển tiếp nó đến bộ định tuyến tiếp theo trong đường dẫn. Khi nhận được, khi bộ định tuyến thứ hai nhận được nó, nó sẽ giảm giá trị TTL xuống 0, điều này nhắc nó bỏ gói tin và gửi cho bạn TTL đã hết hạn trong quá trình.

Quá trình tiếp tục cho đến khi khách hàng của bạn nhận được một tin nhắn hết hạn (tốt, ba) TTL từ mọi bộ định tuyến đang chuyển giữa bạn và đích đến cuối cùng mà bạn đang chạy theo dõi.


giải thích trực quan nhất
ksp0422

@Eddie, Điều này có thể không liên quan đến câu hỏi này nhưng đây là chi tiết rất nhỏ mà tôi nghĩ là hỏi trong bình luận. Bạn có thể chỉ định điều gì xảy ra nếu máy chủ (không phải bộ định tuyến) nhận datagram với trường 1 không?
Vimal Patel

1
@VimalPatel Nếu gói được gửi đến máy chủ, máy chủ chỉ chấp nhận gói. Bỏ gói tin nếu TTL chạm 0 là chức năng của bộ định tuyến.
Eddie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.