พอร์ตและโปรโตคอลคืออะไร


11

ฉันได้ยินคนพูดคุยเกี่ยวกับพอร์ตและโปรโตคอล (ที่เกี่ยวข้องกับระบบเครือข่ายคอมพิวเตอร์) และพวกเขามักจะให้ analogies สำหรับพวกเขา (ตัวอย่างเช่น: "พอร์ตเป็นเหมือนพอร์ตการจัดส่งสินค้ามันจะส่งและรับข้อมูลเช่นพอร์ตการส่งและรับสินค้า จากพอร์ตอื่น ") และสิ่งต่าง ๆ เช่นนั้น

ฉันเข้าใจว่าทั้งหมดนี้หมายถึงอะไร แต่อยู่ในระดับประดิษฐ์มาก โดยพื้นฐานแล้วฉันรู้ว่าพอร์ตและฉันเข้าใจว่าโปรโตคอลคืออะไร แต่พวกเขาคืออะไรจริง ๆ

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

โปรโตคอลคืออะไร ฉันคิดว่ามันเป็นรหัสบางอย่าง .... คุณสามารถสร้างโปรโตคอลของคุณเองได้หรือไม่? คุณจะได้รับพอร์ตเฉพาะเพื่อรันโปรโตคอลเฉพาะได้อย่างไร คุณใช้ภาษาใดในการสร้างโปรโตคอล คุณกำหนดหรือคิดค้นโปรโตคอลใหม่ได้อย่างไร

คำตอบ:


9

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

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

Source IP    Source Port       Dest IP       Dest Port       Service
10.1.1.10    23434             192.168.1.1   80              web
10.1.1.10    34343             192.168.1.1   25              incoming email

บริการเว็บเป็นเจ้าของพอร์ต 80 และบริการอีเมลเป็นเจ้าของพอร์ต 25 - พวกเขา "ฟัง" บนพอร์ตที่เกี่ยวข้องซึ่งทำให้การรับส่งข้อมูลสิ้นสุดลงในตำแหน่งที่ถูกต้อง

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

Source IP    Source Port       Dest IP       Dest Port       Service
10.1.1.10    23232             192.168.1.1   80              web request 1
10.1.1.10    23234             192.168.1.1   80              web request 2

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

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

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


ขอบคุณ! นี่เป็นเพียงคำตอบที่ฉันต้องการขอบคุณที่ช่วย!
บ๊อบ

3

ฮึ่ม ฉันคิดว่าสถานที่ที่ดีที่สุดในการเริ่มต้นคือดูที่ IP Suite หรือรุ่น TCP / IP (ไม่สนใจเลเยอร์อื่น ๆ ของแบบจำลอง OSI เพื่อความเรียบง่าย)

โดยทั่วไปมันเป็นชุดของเลเยอร์:

Application Layer - HTTP, FTP, POP, SSH และอื่น ๆ
Transport Layer - TCP, UDP และอื่น ๆ
Internet Layer - IP, ICMP และอื่น ๆ
Link Layer - Ethernet, ฯลฯ

ส่วนใหญ่แล้วพอร์ตจะถูกนำไปใช้ที่เลเยอร์การขนส่ง (เลเยอร์ 4 - ใช่การกำหนดหมายเลขให้ถูกต้อง)

สแต็คส่วนใหญ่ของ TCP และ / หรือ UDP ที่นำมาใช้ในระบบปฏิบัติการใช้ระบบพื้นฐานของการกำหนดพอร์ตให้กับโปรแกรมและเพิ่มเหตุการณ์ในโปรแกรมเหล่านี้เมื่อแพ็กเก็ตเข้ามาในเครือข่าย อย่างไรก็ตามการดำเนินการใด ๆ ในทางทฤษฎีอาจทำงาน; แม้อาจมีสแต็คทางเลือกสมมุติที่ไตร่ตรองไว้ในสถาบันการศึกษา

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

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

สำหรับรายละเอียดเพิ่มเติมให้ตรวจสอบหน้า Wikipedia บนโมเดล OSI, TCP และ IP


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

ไม่พอร์ตไม่ใช่สิ่งที่มีอยู่จริงในบริบทนี้ (เห็นได้ชัดว่าพอร์ต USB นั้นเป็นฟิสิคัล แต่ไม่เกี่ยวข้องกับหัวข้อนี้) โปรโตคอลถูกกำหนดผ่าน RFCs ( en.wikipedia.org/wiki/Request_for_Comments ) และนำไปใช้ในรหัส - โปรแกรม
พอล

มันจะถูกต้องหรือไม่ในการบอกว่า TCP เป็นกระบวนการระบบที่สงวนหน่วยความจำสำหรับการจัดเก็บข้อมูลที่เข้ามาจาก IP (หรือการจัดเก็บข้อมูลที่จะดึงข้อมูลโดย IP) และหน่วยความจำนี้แบ่งออกเป็น 'พอร์ต' และแอปพลิเคชันอื่น ๆ (กระบวนการ) เช่น HTTP สามารถแจ้งเตือน TCP ว่าพวกเขาต้องการสำรองพอร์ตเฉพาะ (เช่น 80 และ 443) จากนั้นจะกลายเป็นงานของ TCP ไปที่ 1 อนุญาตให้ HTTP เพิ่มข้อมูลขาออกข้อมูลไปยังที่อยู่หน่วยความจำเหล่านั้นและ 2 แจ้ง HTTP เมื่อมีการเพิ่มข้อมูลขาเข้าลงในที่อยู่หน่วยความจำเหล่านั้นหรือไม่
Zach Smith

บางทีบ๊อบอาจสับสนระหว่างพอร์ตโปรโตคอลและพอร์ตสวิตช์จริง หลายส่วนของพอร์ตโปรโตคอลได้รับการตอบรับที่ดีจากหลาย ๆ คนแม้ว่าจะไม่มีแหล่งข้อมูลใด ๆ สำหรับฟิสิคัลพอร์ตเหล่านั้นคืออินพุตอินพุตและเอาต์พุตที่ซึ่งการเชื่อมต่อสายเคเบิลซึ่งอนุญาตการถ่ายโอนข้อมูลเครือข่าย ที่อาจเกี่ยวข้องกับวงจรอิเล็กทรอนิกส์ตัวรับสัญญาณใยแก้วนำแสงเลเซอร์และบัฟเฟอร์ L. Peterson รุ่นที่ 4
nassim

3

แม้ว่าคำถามนี้ได้ถูกทำเครื่องหมายว่าตอบแล้ว แต่ฉันต้องการตอบคำถามเพิ่มเติมที่ถามใน OP

วัตถุทางกายภาพพอร์ตเหล่านี้หรือไม่

ไม่มีพอร์ตไม่ใช่วัตถุทางกายภาพ

หมายเลขพอร์ตเป็นจำนวนเต็มแบบไม่มีเครื่องหมาย 16 บิตซึ่งหมายความว่าช่วงของพอร์ตที่มีให้ใช้ตั้งแต่ 1 ถึง 65535 (หมายเลขพอร์ต 0 ถูกสงวนไว้และไม่สามารถใช้งานได้) กระบวนการเชื่อมโยงช่องสัญญาณเข้าหรือส่งออกผ่านซ็อกเก็ตอินเทอร์เน็ตประเภทของตัวอธิบายไฟล์พร้อมโปรโตคอลการขนส่งหมายเลขพอร์ตและที่อยู่ IP กระบวนการนี้เรียกว่าการเชื่อมโยงและเปิดใช้งานการส่งและรับข้อมูลผ่านเครือข่าย

พวกเขามีบางสิ่งในคอมพิวเตอร์ของฉันหรือไม่ พวกเขาเป็นอะไรบางอย่างทางกายภาพ? หรือเขียนเป็นรหัส? รหัสนี้อยู่ที่ไหน ระบบปฏิบัติการ? พอร์ตคืออะไร

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

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

ย่อหน้าข้างต้นเป็นกุญแจสำคัญในการทำความเข้าใจว่าทำไมพอร์ต / โปรโตคอลใช้ในเครือข่าย หากเราไม่มีวิธีระบุโปรโตคอลซึ่งส่งข้อมูลผ่านหมายเลขพอร์ต apon ที่ตกลงกันไว้คุณจะไม่สามารถทำสิ่งต่าง ๆ ได้มากกว่า 1 ครั้ง (ตรวจสอบอีเมลของคุณและใช้เว็บ) เพราะคอมพิวเตอร์ของคุณจะมี ไม่มีทางแยกความแตกต่างระหว่างข้อมูลสำหรับไคลเอนต์อีเมลของคุณและข้อมูลสำหรับเว็บไซต์ที่คุณกำลังเรียกดู

มีพอร์ตกี่พอร์ต

หมายเลขพอร์ตได้รับการกำหนดในรูปแบบต่าง ๆ ตามช่วงที่สาม:

  1. Well Known / System Ports (0-1023) - ช่วงของพอร์ตนี้ถูกใช้โดยกระบวนการของระบบที่ให้บริการเครือข่ายประเภทที่ใช้กันอย่างแพร่หลาย (HTTP / 80, HTTPS / 443, Telnet / 21, SSH / 22)

  2. พอร์ตการลงทะเบียน / ผู้ใช้ (1024-49151) - ช่วงของหมายเลขพอร์ตจาก 1024 ถึง 49151 คือพอร์ตที่ลงทะเบียน IANA ได้รับมอบหมายจากพวกเขาสำหรับการให้บริการเฉพาะเมื่อสมัครโดยนิติบุคคลที่ร้องขอ (Webmin / 10000, HTTP Proxy / 8080, Remote Desktop Protocol / 3389 ฯลฯ )

  3. ชั่วคราว / ไดนามิก / พอร์ตส่วนตัว (49152-65535) - ช่วง 49152–65535 มีพอร์ตแบบไดนามิกหรือส่วนตัวที่ไม่สามารถลงทะเบียนกับ IANA ช่วงนี้ใช้สำหรับวัตถุประสงค์ที่กำหนดเองหรือชั่วคราวและสำหรับการจัดสรรพอร์ตชั่วคราวโดยอัตโนมัติ

ฉันสามารถเพิ่มหรือลดจำนวนพอร์ตได้หรือไม่

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

โปรโตคอลคืออะไร

ภายในวิทยาการคอมพิวเตอร์โปรโตคอลการสื่อสารเป็นระบบของกฎดิจิตอลสำหรับการแลกเปลี่ยนข้อความภายในหรือระหว่างคอมพิวเตอร์ เมื่อข้อความถูกแลกเปลี่ยนผ่านเครือข่ายคอมพิวเตอร์ระบบกฎเรียกว่าโปรโตคอลเครือข่าย โปรโตคอลนั้นเป็นชุดที่ตกลงกันตามคำสั่ง / คำสั่ง / การโทรที่อุปกรณ์เครือข่ายทั้งสองสามารถสื่อสารกันได้ คิดว่าถ้าเราไม่ได้ตกลงโปรโตคอลและเว็บเซิร์ฟเวอร์เพียงแค่ส่งข้อมูลแบบสุ่มไปยังเว็บเบราว์เซอร์ที่เบราว์เซอร์ไม่ทราบว่าจะทำอย่างไร? โชคดีที่เรามี HTTP และทุกเว็บเบราว์เซอร์ที่สร้างขึ้นได้สร้างไว้ในซอฟต์แวร์เพื่อให้สามารถสื่อสารกับเว็บเซิร์ฟเวอร์ใดก็ได้ที่พูดภาษาเดียวกัน (HTTP)

ฉันคิดว่ามันเป็นรหัสบางอย่าง .... คุณสามารถสร้างโปรโตคอลของคุณเองได้หรือไม่? คุณใช้ภาษาใดในการสร้างโปรโตคอล

ใช่คุณสามารถสร้างโปรโตคอลของคุณเอง โปรโตคอลเขียนด้วยภาษาที่หลากหลาย ฉันไม่ใช่นักพัฒนาซอฟต์แวร์ แต่ฉันค่อนข้างมั่นใจว่าตราบใดที่ภาษาที่คุณใช้มีไลบรารี่ที่อนุญาตให้คุณเขียนซอฟต์แวร์ที่สามารถสื่อสารผ่าน TCP / IP (มีชุดโปรโตคอลอื่น ๆ แต่ TCP / IP เป็นสิ่งที่สำคัญที่สุด ใช้กันอย่างแพร่หลาย) คุณสามารถใช้ภาษานั้นเพื่อเขียนโปรโตคอล ภาษาการเขียนโปรแกรม 'C' ดูเหมือนจะใช้กันมากที่สุดในการเขียนโปรโตคอล นี่เป็นเพราะความจริงที่ว่าโปรโตคอลเครือข่ายแรกจำนวนมากได้รับการพัฒนาบน UNIX ในปี 1970 และ C เป็นภาษาที่ UNIX เขียนขึ้นเอง

คุณจะได้รับพอร์ตเฉพาะเพื่อรันโปรโตคอลเฉพาะได้อย่างไร

สิ่งนี้แตกต่างกันเล็กน้อยระหว่างระบบปฏิบัติการ ตัวอย่างเช่นในการเปลี่ยนหมายเลขพอร์ต Remote Desktop Protocol ทำงานใน Windows คุณจะต้องแก้ไขรีจิสทรี บน Linux บริการเครือข่ายจำนวนมากสามารถกำหนดค่าได้โดยตรงจากไฟล์. conf สำหรับบริการเครือข่ายเฉพาะ

คุณกำหนดหรือคิดค้นโปรโตคอลใหม่ได้อย่างไร

ดูhttps://journal.paul.querna.org/articles/2012/02/22/designing-network-protocols/สำหรับโพสต์บล็อกโดยคนที่เพิ่งพัฒนาโปรโตคอลเครือข่ายใหม่และสิ่งที่เขาต้องทำ ระหว่างทาง.

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