tra-loi-cau-hoi-phat-trien-web.com

Tại sao các dịch vụ sử dụng TCP phổ biến có UDP cũng như TCP mục trong / etc / services?

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).

22
sixty4bit

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, /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 .

29
derobert