ซ็อกเก็ต TCP และ UDP สามารถใช้พอร์ตเดียวกันได้หรือไม่


104

ก่อนอื่นมีปัญหากับการใช้ทั้ง UDP และ TCP บนเซิร์ฟเวอร์เดียวกันหรือไม่?

ประการที่สองฉันสามารถใช้หมายเลขพอร์ตเดียวกันได้หรือไม่?

คำตอบ:


111

ได้คุณสามารถใช้หมายเลขพอร์ตเดียวกันสำหรับทั้ง TCP และ UDP หลายโปรโตคอลทำสิ่งนี้อยู่แล้วเช่น DNS ทำงานบน udp / 53 และ tcp / 53

สระว่ายน้ำในทางเทคนิคพอร์ตสำหรับแต่ละโปรโตคอลมีความเป็นอิสระอย่างสมบูรณ์ แต่สำหรับโปรโตคอลระดับสูงที่สามารถใช้ทั้ง TCP หรือ UDP ก็ประชุมว่าพวกเขาเริ่มต้นกับพอร์ตเดียวกันจำนวน

เมื่อเขียนเซิร์ฟเวอร์ของคุณจำไว้ว่าลำดับของเหตุการณ์สำหรับซ็อกเก็ต TCP คือมากยิ่งกว่าสำหรับซ็อกเก็ต UDP ตั้งแต่เช่นเดียวกับปกติsocketและbindสายที่คุณยังต้องและlistenaccept

นอกจากนี้ที่acceptโทรจะกลับซ็อกเก็ตใหม่และเป็นที่ซ็อกเก็ตที่แล้วคุณจะต้องยังสำรวจความคิดเห็นสำหรับรับเหตุการณ์ เซิร์ฟเวอร์ของคุณควรเตรียมพร้อมที่จะดำเนินacceptการเชื่อมต่อบนซ็อกเก็ตเดิมในขณะที่ให้บริการไคลเอนต์หลายรายพร้อมกันซึ่งแต่ละเซิร์ฟเวอร์จะเรียกใช้เหตุการณ์การรับบนซ็อกเก็ตของตนเอง


2
@Eric Fortis RFC 1700 เต็มไปด้วยตัวอย่างเราจะไม่แสดงรายการทั้งหมดเลยหรือ? ;-)
Marquis of Lorne

2
@Eric Fortist ทำไมทุกคนควรรู้เกี่ยวกับ 'หมายเลขพอร์ต NetBIOS?
Marquis of Lorne

4
กรุณาโพสต์เป็นคำถามเพื่อให้คุณสามารถตอบฉันได้
Eric Fortis

6
คำตอบนี้ไม่ได้อธิบายบางสิ่ง: ความหมาย 'พอร์ต' นั้นเฉพาะสำหรับแต่ละโปรโตคอล (แต่บางอย่างอาจไม่มีความหมายนี้) ของระดับการขนส่ง (โมเดล OSI ระดับ 4) ดังนั้น TCP จึงมีพอร์ตของตัวเองซึ่งถูกตีความโดยสแต็ก TCP UDP มีพอร์ตของตัวเองซึ่งตีความโดย UDP stack กล่าวคือไม่มีการแชร์พอร์ตระหว่าง UDP และ TCP มันเพิ่งเกิดขึ้นที่โปรโตคอลทั้งสองมีคำจำกัดความของ "พอร์ต" เหมือนกันและเพื่อให้ง่ายขึ้นเราใช้ค่าพอร์ตเดียวกันสำหรับการเชื่อมต่อหลายประเภทกับบริการเดียวกัน
moala

2
@EricFortis เพราะคำถามดังกล่าวจะเป็นศูนย์ความสนใจที่จะฉันหรือใครอื่นจะเป็นเหตุผลของคุณสำหรับการพิจารณาว่ามันน่าสนใจและเหมือนกันคัดค้านของคุณเพื่ออ้างหนึ่ง RFC ที่นี่สำหรับแม่นยำวัตถุประสงค์ที่เราจะคุย
Marquis of Lorne

8

ประการแรกไม่มีปัญหาในการใช้ทั้ง tcp และ udp บนเซิร์ฟเวอร์

ประการที่สองเราสามารถมีทั้งคำขอ UDP และ TCP บนพอร์ตเดียวกันได้เนื่องจากแต่ละคำขอถูกระบุโดย quintuple ที่มี IP ต้นทาง, IP ปลายทาง, พอร์ตต้นทาง, พอร์ตปลายทาง, PROTOCOL (เนื่องจากโปรโตคอลสามารถเป็น TCP หรือ UDP)


3
เหตุผลที่คุณระบุมักจะได้รับ แต่มันไม่มีความหมายจริงๆ ไม่มีสิ่งที่เรียกว่าการเชื่อมต่อ UDP และไม่มีบริบทที่พิจารณาการเชื่อมต่อโดยไม่คำนึงถึงโปรโตคอลที่เกี่ยวข้อง ความจริงก็คือพอร์ตเป็นสิ่งประดิษฐ์ของ TCP และ UDP แยกกันดังนั้นจึงไม่มีความเป็นไปได้ที่จะทำให้เกิดความสับสน
Marquis of Lorne

ขอบคุณที่ชี้ให้เห็นความผิดของฉันถูกแล้วที่ไม่มีการเชื่อมต่อกับ UDP
aMooly
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.