เหตุใดบริการที่ใช้ TCP ยอดนิยมจึงมี UDP เช่นเดียวกับรายการ TCP ใน / etc / services


22

ฉันกำลังอ่านหนังสือเกี่ยวกับการเขียนโปรแกรมเครือข่ายด้วย Go หนึ่งในบทเกี่ยวข้องกับไฟล์ / etc / services สิ่งที่ฉันสังเกตเห็นขณะสำรวจไฟล์นี้คือรายการยอดนิยมบางรายการเช่น HTTP และ SSH ซึ่งทั้งคู่ใช้ TCP ที่ transport layer มีรายการที่สองสำหรับ UDP ตัวอย่างเช่นใน Ubuntu 14.04:

ubuntu@vm1:~$ grep ssh /etc/services  
ssh             22/tcp         # SSH Remote Login Protocol 
ssh             22/udp

ubuntu@vm1:~$ grep http /etc/services  
http            80/tcp          www             # WorldWideWeb HTTP            
http            80/udp                          # HyperText Transfer Protocol

ใครรู้ว่าทำไมทั้งสองมีสองรายการ? ฉันไม่เชื่อว่า SSH หรือ HTTP จะเคยใช้ UDP (ยืนยันโดยคำถามนี้สำหรับ SSH)


7
22/udpถูกลบใน Debian ในปี 2559 IANA ยังคงแสดงรายการ 22 / udpและแสดงรายการทั้ง udp และ tcp สำหรับโปรโตคอลส่วนใหญ่ที่มักจะนำมาใช้กับหนึ่งในนั้น อาจเป็นได้ว่ามันหมายถึง 22 ถูกสงวนไว้สำหรับ ssh ในกรณีที่ใครบางคนต้องการที่จะใช้ ssh มากกว่า udp บางวัน?
Stéphane Chazelas

2
ดูเพิ่มเติมที่หัวข้อ 7.1 ของrfc6335
Stéphane Chazelas

คำตอบ:


29

โดยทั่วไปเป็นเพราะนั่นเป็นประเพณีตั้งแต่ทางกลับกันเมื่อหมายเลขพอร์ตเริ่มได้รับมอบหมายจนถึงประมาณ 2011 ดูตัวอย่างเช่น§7.1“ หลักการที่ผ่านมา”ของRFC 6335 :

พอร์ต TCP และ UDP ถูกกำหนดพร้อมกันเมื่อมีการร้องขอ

อาจเป็นไปได้ว่าพวกเขาจะไม่ได้รับการจัดสรรในวันหนึ่งเนื่องจากพอร์ต 1,023 และด้านล่างเป็น "พอร์ตของระบบ" ซึ่งได้รับการดูแลเป็นพิเศษโดยระบบปฏิบัติการส่วนใหญ่และช่วงที่กำหนดส่วนใหญ่ในปัจจุบัน

และโดยวิธีการ HTTP / 3 ทำงานผ่าน UDP แม้ว่ามันจะสามารถใช้พอร์ต UDP ใด ๆ ไม่ใช่แค่ 80/443 ดังนั้นสิ่งเหล่านั้นยังคงไม่ได้ใช้จริง ๆ

เท่าที่ Debian เป็นห่วงของมัน/etc/servicesแล้วมี 22 / UDP ใน 1.0 (ฉวัดเฉวียน 1996)

อย่างไรก็ตามมันถูกลบออกในคอมมิชชันนี้ในปี 2559 เปิดตัวครั้งแรกในเวอร์ชั่น 5.4 ของnetbaseแพ็คเกจ

เช่นการเขียนรุ่นเสถียรล่าสุด Debian (มือปราบ) มี 5.6 และล่าสุด Ubuntu LTS (18.04, ไบโอนิค) แพคเกจ Netbaseจะขึ้นอยู่กับ Debian Netbase 5.4 และคุณสามารถเห็นการเปลี่ยนแปลงของมันยังกล่าวถึงการกำจัดของ UDP


4
@SergiyKolodyazhnyy ฉันไม่คิดว่าจะเป็นเพราะการปฏิบัตินี้มีไฟร์วอลล์
Derobert

3
@TobySpeight นั่นไม่ใช่แค่ Linux นั่นเป็นส่วนหนึ่งของมาตรฐานที่เกี่ยวข้อง ดูเช่น§6ของ RFC นั้น ถึงแม้ว่า IANA จะลงทะเบียนพอร์ตที่สูงขึ้น แต่ก็มีการจัดประเภทที่แตกต่างกัน (และนั่นเป็นเรื่องสำคัญในทางปฏิบัติเนื่องจากระบบปฏิบัติการไม่ใช่แค่ Linux จัดการกับพวกมัน) ฉันจะอธิบายให้ชัดเจน นอกจากนี้ 0 ไม่ใช่พอร์ตที่ถูกต้อง มันใช้โดย sockets API เป็นสัญลักษณ์แทน (เพื่อบอกเคอร์เนลให้เลือกพอร์ตสำหรับคุณ)
Derobert

2
"0 ไม่ใช่พอร์ตที่ถูกต้อง" เป็นที่น่าสงสัย แน่นอนว่ามันไม่ใช่พอร์ตที่ใช้งานได้บนระบบปฏิบัติการของเรา (ซึ่งเป็นสาเหตุที่ฉันเรียกมันออกมาโดยเฉพาะและทำไมมันถึงถูกจองไว้ในปัจจุบันและไม่น่าจะกำหนดให้กับสิ่งใด ๆ ) แต่มันไม่พิเศษในระดับโปรโตคอล
Toby Speight

1
@derobert: อาร์กิวเมนต์ของคุณคือพอร์ต 0 ใช้ไม่ได้บนเครื่อง Unix เพราะพอร์ต 0 หมายถึง "เลือกพอร์ตว่าง" ฉันกำลังบอกว่าการโต้เถียงผิด ข้อสรุปไม่เป็นไปตามหลักเหตุผลจากสถานที่ตั้ง
MSalters

3
แม้ว่ามันจะสามารถใช้พอร์ต UDP ใด ๆ ได้ไม่ใช่แค่ 80/443นั่นเป็นความจริงอย่างยิ่งสำหรับโปรโตคอล TCP / UDP ใด ๆ โปรโตคอลเหล่านี้เป็นเพียงพอร์ตเริ่มต้นที่เกี่ยวข้องกับแต่ละพอร์ต แอปพลิเคชันส่วนใหญ่ที่ใช้ TCP และ UDP ไม่มีวิธีระบุพอร์ตที่ไม่ใช่ค่าเริ่มต้น แต่ HTTP อนุญาตให้ระบุใน URL ดังนั้นจึงเป็นไปได้มากกว่าที่จะเปลี่ยนพอร์ต
Barmar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.