Do 0.0.0.0 0 và *: * đại diện cho cùng một thứ?


23

Tôi đã sử dụng netstat (trong Windows) để xem các cổng được nghe cho TCP và UDP:

nhập mô tả hình ảnh ở đây

Tôi nhận thấy rằng trong cột Địa chỉ nước ngoài , UDP hiển thị *:*thay vì 0.0.0.0:0, hai giá trị này có đại diện cho cùng một thứ không? Nếu vậy, tại sao UDP hiển thị *:*thay vì 0.0.0.0:0?


Tôi tin *:*là IPv6 trong khi 0.0.0.0:0là IPv4.
LPChip

Tôi cũng đã nhận thấy những điều sau : UDP 0.0.0.0:5355 *:*, điều đó có nghĩa là dữ liệu có thể được gửi giữa IPv4 và IPv6?
dùng612473


4
IPv6 tương đương với 0,0.0.0 là [::]
marsh-lung lay

2
@LPChip Bạn nhầm rồi. *:*không nói gì về phiên bản IP. Tuy nhiên, vì địa chỉ cục bộ của ổ cắm đó chỉ là IPv4, nên địa chỉ từ xa cũng phải là IPv4.
kasperd

Câu trả lời:


12

Nó đã được chỉ ra rằng câu trả lời của tôi là lỗi. Vì tôi không thể xóa nó, thay vào đó tôi sẽ cung cấp đúng.

Biểu thức *:*có nghĩa là "Bất kỳ địa chỉ, bất kỳ cổng". Tất cả người nghe UDP sẽ hiển thị chữ ký này. Điều này là do bản chất không kết nối của UDP.


Câu trả lời gốc (không chính xác). Có và không. *:*đề cập đến bất kỳ địa chỉ IPv6. Sự khác biệt giữa một địa chỉ không xác định / không xác định là mơ hồ trong IPv4, vì vậy chúng tôi sử dụng 0.0.0.0/0 để đại diện cho bất kỳ máy chủ nào trên mạng, nhưng trong IPv6 có một sự khác biệt tinh tế.

Tuy nhiên, đối với hầu hết các phần, mọi người sử dụng ::để biểu diễn một chuỗi 0 liền kề.

Trong một địa chỉ IPv6, bất kỳ chuỗi số 0 liền kề nào cũng có thể được thay thế bằng :: :

  • 0.0.0.0/0=> 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000 => ::=>*:*
  • fe80:0000:0000:0000:2000:0aff:fea7:0f7c => fe80::2000:0aff:fea7:0f7c

Tuy nhiên, biểu diễn sử dụng ký tự đại diện cho phép kiểm soát tốt hơn các mẫu địa chỉ. Ví dụ, ::sẽ không phù hợp fe80::2000:0aff:fea7:0f7c, nhưng *:*sẽ.

Sự khác biệt này không thực sự có ý nghĩa đối với bất kỳ thiết bị nào không thực hiện định tuyến, nhưng khi đến lúc chọn các tuyến tối ưu đến không gian địa chỉ tổng hợp, ký hiệu ký tự đại diện cho phép lựa chọn mạng đích linh hoạt hơn.


5
Nhưng bạn đã viết trong câu trả lời của mình rằng *:* refers to ANY IPv6 address Ở đây bạn nói có thể any..addressgọi là IPv4 hoặc IPv6. Vậy đó là cái gì? Là *:*tự giới hạn IPv6, hay nó cũng cho phép IPv4?
barlop

2
Cả hai ổ cắm được đề cập trong câu hỏi là chỉ IPv4. Bạn có thể thấy rằng từ địa chỉ cục bộ được gán cho mỗi ổ cắm. Như đã đề cập IPv6 không liên quan đến câu hỏi.
kasperd

7
IPv6 hoàn toàn không liên quan đến câu hỏi này.
hobbs

8
Câu trả lời này là hoàn toàn sai cho câu hỏi.
Brad

3
Như ghi chú bình luận của kasperd (và cả bình luận của hobbs nữa), IPv6 không liên quan đến câu hỏi. Câu hỏi là về những gì chúng ta thấy trong cột Địa chỉ nước ngoài, tương ứng với những gì trong cùng một hàng trong cột Địa chỉ cục bộ, đó là IPv4. (Mặc dù, với một số hệ điều hành, việc nghe trên một họ địa chỉ / phiên bản IP thường có thể tự động nghe trên một họ địa chỉ khác.)
QUÁN NGÀY

15

Các /đề cập đến mặt nạ mạng subnet, mà là một phần của lớp IP.

Các :đề cập đến một cổng là một phần của tầng Transport.

Đối với TCP, có nghĩa là có một kết thúc từ xa cho một kết nối.

UDP, vì nó không có kết nối, nên nó không có ý nghĩa gì khi hiển thị địa chỉ nước ngoài.

Cảm giác ruột của tôi là nó sẽ luôn hiển thị ký tự đại diện cho UDP và nó có khả năng giúp phân tích cú pháp đầu ra thân thiện hơn một chút hoặc hiển thị nếu bạn đang sử dụng IPv4 / 6:

IPV4 "*:*" đấu với IPV6 "[::]:*"


Tôi chỉ nói điều này với một số người bạn. Bạn có thể hiển thị PORTS nghe, nhưng để hiển thị các phiên từ xa thực tế khi không có khả năng đó là lý do tại sao nó hiển thị như *:*đối với các phiên không tồn tại UDP từ xa. Tôi đồng ý với bạn ở đây.
NotAdmin Dave

6

Trong cả hai trường hợp, thông tin về cơ bản là vô nghĩa, nhưng chỉ ra ít nhiều cùng một thứ.

Dòng đầu tiên của bạn là một ổ cắm nghe TCP. Cột địa chỉ cục bộ cho biết địa chỉ và cổng chấp nhận kết nối và cột địa chỉ từ xa không có nghĩa gì vì ổ cắm nghe chưa có kết nối từ xa. Một ổ cắm TCP được kết nối sẽ hiển thị địa chỉ của đầu kia của kết nối trong cột đó, nhưng đối với ổ cắm nghe, nó quyết định hiển thị một địa chỉ và cổng hoàn toàn bằng không.

Dòng thứ hai của bạn là một ổ cắm UDP. UDP là một giao thức không kết nối, có nghĩa là nó gửi và nhận các gói mà không có bất kỳ khái niệm nào về việc ai đã kết nối với ai, cho dù gói đó là một phần của cuộc hội thoại hiện tại hay liệu dữ liệu vừa ra khỏi màu xanh. Cột địa chỉ cục bộ có ý nghĩa tương tự như đối với TCP và cột địa chỉ từ xa là vô nghĩa vì ổ cắm UDP có thể có một máy ngang hàng, nhiều thiết bị ngang hàng hoặc không có đồng nghiệp tại bất kỳ thời điểm nào. (Trên thực tế POSIX có khái niệm "ổ cắm UDP được kết nối" nhưng điều đó hơi xa một chút).

Bây giờ câu hỏi: tại sao họ hiển thị khác nhau? Nó dường như không có gì khác hơn là một sự giải thích về mã netstat của Windows. Linux (công cụ mạng) hiển thị 0.0.0.0:*cho đầu từ xa của cả ổ cắm nghe TCP và ổ cắm UDP (cho IPv4; nó hiển thị :::*cho IPv6), khác với ví dụ trên Windows, nhưng ít nhất là nó phù hợp trong cùng một chương trình. Có lẽ Windows sẽ phân biệt ngữ nghĩa giữa "sẽ được điền sau" trong trường hợp TCP và "mở cho mọi thứ" trong trường hợp của UDP, nhưng có khả năng hai bit mã được viết bởi hai người khác nhau không có đặc biệt quan tâm đến tính nhất quán.


+1 cho phần đầu của đoạn thứ 4. 0.0.0.0 có một số tài liệu: Địa chỉ của tất cả các số không là địa chỉ "không xác định" (theo Địa chỉ IPv6 RFC 4291 giây 2.5.2 ), thường áp dụng cho các địa chỉ không xác định. RFC 1700 trang 4 đề cập "Chỉ có thể được sử dụng làm địa chỉ nguồn" và RFC 1122 # trang-29 phần "a" mô tả việc sử dụng thêm. ( câu trả lời của tôi về ::: đề cập 0.0.0.0)
TUYỆT VỜI

Không phải 0.0.0.0:0giá trị trong cột Địa chỉ nước ngoài có nghĩa là bất kỳ địa chỉ IP và số cổng nào cũng có thể gửi dữ liệu đến ổ cắm này? và nếu giá trị này là ví dụ 127.0.0.0:12345, thì điều này có nghĩa là chỉ địa chỉ IP 127.0.0.0có số cổng mới 12345có thể gửi dữ liệu đến ổ cắm này chứ không phải ai khác?
Tom

6

Sự khác biệt chỉ đơn giản là công chứng.

Netstat trong Windows sử dụng 0.0.0.0:0để thể hiện một ý tưởng trừu tượng về "bất kỳ địa chỉ và cổng từ xa" nào cho trình nghe TCP4 cục bộ và *:*cho trình nghe UDP. Đối với IPv6, địa chỉ từ xa được ký hiệu là [::]:0cho TCP và *:*cho UDP.

Trong OS X, *.*được sử dụng cho cả TCP và UDP, cho dù là IPv4 hay IPv6 (lưu ý rằng OS X sử dụng dấu chấm để phân tách địa chỉ và cổng). Linux sử dụng 0.0.0.0:*cho IPv4 và :::*IPv6, với hai dấu hai chấm đầu tiên đại diện cho chữ viết tắt cho tất cả địa chỉ IPv6 và dấu hai chấm thứ ba phân cách giữa địa chỉ và cổng.

IIRC từ một cái gì đó tôi đã nghe hoặc đọc từ lâu, tôi nghĩ rằng các cặp UDP có thể hiển thị, nhưng thường thì không vì chúng bị phá vỡ khi hoàn thành và các kết nối UDP thường rất ngắn, kéo dài một phần nghìn giây hoặc ít hơn. Tôi chưa bao giờ nhìn thấy điều này bản thân mình, vì vậy nó có thể không chính xác.

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.