ช่วงหมายเลขพอร์ต TCP ที่ดีที่สุดสำหรับแอปพลิเคชันภายใน [ปิด]


97

ฉันทำงานในสถานที่ที่แต่ละแอปพลิเคชันภายในของเราทำงานบนอินสแตนซ์ Tomcat แต่ละตัวและใช้พอร์ต TCP เฉพาะ ช่วงพอร์ต IANA ที่ดีที่สุดที่จะใช้สำหรับแอปเหล่านี้คืออะไรเพื่อหลีกเลี่ยงการชนกันของหมายเลขพอร์ตกับกระบวนการอื่น ๆ บนเซิร์ฟเวอร์

จากhttp://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xmlนี่คือตัวเลือกที่ฉันเห็นในปัจจุบัน:

  1. พอร์ตระบบ (0-1023): ฉันไม่ต้องการใช้พอร์ตใด ๆ เหล่านี้เนื่องจากเซิร์ฟเวอร์อาจใช้บริการบนพอร์ตมาตรฐานในช่วงนี้
  2. พอร์ตผู้ใช้ (1024-49151): เนื่องจากแอปพลิเคชันอยู่ภายในฉันไม่ได้ตั้งใจที่จะขอให้ IANA จองหมายเลขสำหรับแอปพลิเคชันใด ๆ ของเรา อย่างไรก็ตามฉันต้องการลดความเป็นไปได้ที่กระบวนการอื่นจะใช้พอร์ตเดียวกันเช่น Oracle Net Listener ในปี 1521
  3. ไดนามิกและ / หรือพอร์ตส่วนตัว (49152-65535): ช่วงนี้เหมาะสำหรับหมายเลขพอร์ตที่กำหนดเอง สิ่งเดียวที่ฉันกังวลคือหากสิ่งนี้เกิดขึ้น:

    ก. ฉันกำหนดค่าหนึ่งในแอปพลิเคชันของฉันให้ใช้พอร์ต X
    b แอปพลิเคชันจะหยุดทำงานสักครู่หรือหลายชั่วโมง (ขึ้นอยู่กับลักษณะของแอป) ปล่อยให้พอร์ตไม่ได้ใช้งานสักครู่
    c. ระบบปฏิบัติการจะจัดสรรหมายเลขพอร์ต X ให้กับกระบวนการอื่นเช่นเมื่อกระบวนการนั้นทำหน้าที่เป็นไคลเอนต์ที่ต้องการการเชื่อมต่อ TCP ไปยังเซิร์ฟเวอร์อื่น สิ่งนี้ประสบความสำเร็จเนื่องจากอยู่ในช่วงไดนามิกและขณะนี้ X ไม่ได้ใช้งานเท่าที่ระบบปฏิบัติการเกี่ยวข้องและ
    d แอปไม่สามารถเริ่มทำงานได้เนื่องจากมีการใช้งานพอร์ต X อยู่แล้ว


2
ฉันตอบคำถามที่คล้ายกันที่นี่stackoverflow.com/a/38141340/3333759ซึ่งคุณอาจพบว่ามีประโยชน์
adrianwadey

คำตอบ:


35

ฉันไม่เห็นว่าทำไมคุณถึงสนใจ นอกเหนือจากกฎสิทธิ์ "ไม่ใช้พอร์ตที่ต่ำกว่า 1024" คุณควรจะใช้พอร์ตใดก็ได้เนื่องจากไคลเอ็นต์ของคุณควรกำหนดค่าให้พูดคุยกับที่อยู่ IP และพอร์ตใดก็ได้!

ถ้าไม่เป็นเช่นนั้นแสดงว่ายังทำได้ไม่ดีนัก กลับไปทำอย่างถูกต้อง :-)

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

ฉันก็เหมือนคุณจะไม่พยายามรับหมายเลขที่ IANA กำหนดเพราะมันควรจะเป็นสำหรับบริการทั่วไปที่หลายสภาพแวดล้อมจะใช้มัน (เช่น SSH หรือ FTP หรือ TELNET)

เครือข่ายของคุณคือ ของคุณและหากคุณต้องการให้เซิร์ฟเวอร์ของคุณอยู่บนพอร์ต 1234 (หรือแม้แต่พอร์ต TELNET หรือ FTP สำหรับเรื่องนั้น) นั่นคือธุรกิจของคุณ ในกรณีที่เป็นประเด็นในพื้นที่การพัฒนาเมนเฟรมของเราพอร์ต 23 ใช้สำหรับเซิร์ฟเวอร์เทอร์มินัล 3270 ซึ่งเป็นสัตว์ร้ายที่แตกต่างกันอย่างมากกับเทลเน็ต หากคุณต้องการเทลเน็ตไปที่ด้าน UNIX ของเมนเฟรมคุณใช้พอร์ต 1023 บางครั้งมันก็น่ารำคาญหากคุณใช้ไคลเอนต์เทลเน็ตโดยไม่ระบุพอร์ต 1023 เนื่องจากมันเชื่อมโยงคุณเข้ากับเซิร์ฟเวอร์ที่ไม่รู้จักโปรโตคอลเทลเน็ต - เราต้องทำลาย ออกจากไคลเอนต์ telnet และทำอย่างถูกต้อง:

telnet big_honking_mainframe_box.com 1023

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


ขอบคุณ. หลังจากอ่านคำตอบของคุณและลองคิดดูแล้วฉันตัดสินใจเลือกใช้พอร์ตในช่วงที่สอง เราเลือก 46xxx เนื่องจากปัจจุบัน IANA มีพอร์ตน้อยมากที่กำหนดไว้ในลิงก์ช่วงย่อยนี้ เราไม่ได้เลือกช่วงที่สามเนื่องจากสถานการณ์ที่เป็นไปได้ในทางทฤษฎี (แม้ว่าจะไม่น่าเป็นไปได้สูงก็ตาม) ที่ฉันอธิบายไว้
Juanal

119

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

เนื่องจากหน้า stackoverflow.com นี้อยู่ในอันดับที่สูงมากในการค้นหาของฉันเกี่ยวกับหัวข้อนี้ฉันจึงคิดว่าฉันจะโพสต์ช่วงที่ใหญ่ที่สุดที่นี่สำหรับคนอื่นที่สนใจ สิ่งเหล่านี้ใช้สำหรับทั้ง TCP และ UDP โดยที่จำนวนพอร์ตในช่วงนั้นมีอย่างน้อย 500

Total   Start   End
829     29170   29998
815     38866   39680
710     41798   42507
681     43442   44122
661     46337   46997
643     35358   36000
609     36866   37474
596     38204   38799
592     33657   34248
571     30261   30831
563     41231   41793
542     21011   21552
528     28590   29117
521     14415   14935
510     26490   26999

ที่มา (ผ่านปุ่มดาวน์โหลด CSV):

http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml


"เป็นทั้ง tcp และ udp" เหมือนใน - ฉันสามารถเปิดพอร์ตเหล่านั้นได้ทั้งหมดบอกว่า44100-44199ดูจำง่ายเพราะการสุ่มตัวอย่างเสียง 44100 ทั้ง udp และ tcp อย่างปลอดภัย? ทั้ง udp 44100-44199 และ tcp 44100-44199 ฟรีหรือไม่?
Lapsio

1
น่าเสียดายที่ไม่มี มีการจองเพิ่มเติมตั้งแต่ที่ฉันโพสต์ มีพอร์ตอยู่ในช่วงของคุณแล้ว "z-wave-tunnel 44123 tcp Z-Wave Secure Tunnel"
David Vereb

โชคดีที่ฉันไม่คิดว่าจะติดตั้งระบบรักษาความปลอดภัยบ้านอัจฉริยะ Z-Wave บนเซิร์ฟเวอร์การพัฒนาฮ่า ๆ ช่วงพอร์ตที่ใช้ก่อนหน้านี้ครอบคลุมสิ่งสำคัญมากมายรวมถึงเครื่องมือ VMWare บางอย่างจึงแย่กว่ามาก ถ้านั่นเป็นการปะทะกันในตอนนี้ฉันก็เจ๋งด้วยขอบคุณ :)
Lapsio

3
ดังนั้นฉันจึงตัดสินใจเรียกใช้รายการอีกครั้งเพื่อสร้างชุดช่วงใหม่โดยใช้ข้อมูลที่ใหม่กว่า ดูเหมือนว่าช่วง "ไม่ได้กำหนด" จะไม่ได้รับการกำหนดหมายเลขอย่างถูกต้อง ตัวอย่างเช่น 43124-44320 ถูกทำเครื่องหมายว่ายังไม่ได้มอบหมาย แต่ 44123 ซึ่งอยู่ในช่วงดังกล่าวแสดงอยู่ด้านบนว่าได้รับมอบหมาย ดูเหมือนว่าฉันจะต้องหาช่วงที่ไม่ได้กำหนดด้วยตนเองเนื่องจากดูเหมือนว่าจะคำนวณไม่ถูกต้อง
David Vereb

6

คำตอบสั้น ๆ : ใช้พอร์ตผู้ใช้ที่ไม่ได้กำหนด

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

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

คุณสามารถลดความเสี่ยงจากไคลเอนต์ได้เกือบทั้งหมดโดยหลีกเลี่ยงพอร์ตส่วนตัวซึ่งส่งมอบให้กับลูกค้าแบบไดนามิก

ความเสี่ยงที่เกิดจากบริการอื่นจะน้อยที่สุดหากคุณใช้พอร์ตผู้ใช้ ความเสี่ยงของพอร์ตที่ไม่ได้กำหนดคือการที่บริการอื่นที่ถูกกำหนดค่า (หรือ dyamically) ใช้พอร์ตนั้น แต่อย่างน้อยนั่นอาจอยู่ภายใต้การควบคุมของคุณ

เอกสารขนาดใหญ่ที่มีการกำหนดพอร์ตทั้งหมดรวมถึงพอร์ตผู้ใช้อยู่ที่นี่: http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txtมองหาโทเค็นที่ไม่ได้กำหนด .


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