Tôi đang đọc một cuốn sách về lập trình mạng với Go. Một trong các chương liên quan đến tệp/etc/services. Một cái gì đó tôi nhận thấy khi khám phá tệp này là các mục phổ biến nhất định như HTTP và SSH, cả hai đều sử dụng TCP ở lớp vận chuyển, có mục nhập thứ hai cho UDP. Ví dụ: trên Ubuntu 14.04:
[email protected]:~$ grep ssh /etc/services
ssh 22/tcp # SSH Remote Login Protocol
ssh 22/udp
[email protected]:~$ grep http /etc/services
http 80/tcp www # WorldWideWeb HTTP
http 80/udp # HyperText Transfer Protocol
Bất cứ ai cũng biết tại sao những điều này có hai mục? Tôi không tin SSH hoặc HTTP từng sử dụng UDP (được xác nhận bởi câu hỏi này cho SSH).
Về cơ bản, đó là vì đó là truyền thống từ khi trở lại khi số cổng bắt đầu được chỉ định cho đến khoảng năm 2011. Xem, ví dụ, §7.1. Nguyên tắc trước đây Nguyên tắc of RFC 6335 :
Các cổng TCP và UDP được gán đồng thời khi được yêu cầu
Tất nhiên, có thể chúng sẽ không được phân bổ vào một ngày nào đó, tất nhiên, vì các cổng 1023 trở xuống là "cổng hệ thống", được xử lý đặc biệt bởi hầu hết các hệ điều hành và hầu hết phạm vi đó hiện đang được chỉ định.
Và, nhân tiện, HTTP/3 chạy trên UDP. Mặc dù nó có thể sử dụng bất kỳ cổng UDP nào, không chỉ 80/443. Vì vậy, thực sự những người vẫn chưa được sử dụng.
Theo như Debian có liên quan, nó /etc/services
đã có 22/udp trong 1.0 (buzz 1996) .
Tuy nhiên, nó đã bị xóa trong cam kết này vào năm 2016, lần đầu tiên được phát hành trong phiên bản 5.4 của gói netbase
.
Khi viết, phiên bản ổn định mới nhất của Debian (buster) có 5.6 . Và Ubuntu LTS mới nhất (18.04, bionic) gói netbase dựa trên Debian netbase 5.4 và bạn có thể thấy thay đổi của nó cũng đề cập đến việc loại bỏ udp/22 .