ตามที่ฉันเข้าใจแล้วนี่เป็นสิ่งที่เกิดขึ้นเมื่อไคลเอนต์ทำการร้องขอการเชื่อมต่อ:
- เซิร์ฟเวอร์จะถูกผูกไว้กับหมายเลขพอร์ตเฉพาะ หมายเลขพอร์ตนั้นจะเชื่อมโยงกับกระบวนการรับฟังเสมอ เนื่องจากมีเพียงเซิร์ฟเวอร์เท่านั้นที่กำลังรับฟังการเชื่อมต่อขาเข้าเราจึงไม่จำเป็นต้องเชื่อมโยงฝั่งไคลเอ็นต์
- เซิร์ฟเวอร์จะคอยฟังหมายเลขพอร์ตนั้นต่อไป
- ลูกค้าจะส่ง
connect()
คำขอ accept()
เซิร์ฟเวอร์จะยอมรับคำขอใช้ ทันทีที่เซิร์ฟเวอร์ยอมรับคำขอของลูกค้าเคอร์เนลจะจัดสรรหมายเลขพอร์ตแบบสุ่มสำหรับเซิร์ฟเวอร์เพิ่มเติมsend()
และreceive()
เนื่องจากหมายเลขพอร์ตเดียวกันบนเซิร์ฟเวอร์ไม่สามารถใช้สำหรับการส่งและฟังได้และพอร์ตก่อนหน้ายังคงอยู่ กำลังฟังการเชื่อมต่อใหม่
จากทั้งหมดนั้นเซิร์ฟเวอร์จะหาพอร์ตที่ไคลเอ็นต์ได้รับอย่างไร ฉันรู้ว่าไคลเอนต์จะส่งเซกเมนต์ TCP พร้อมพอร์ตต้นทางและพอร์ตปลายทางดังนั้นเซิร์ฟเวอร์จะใช้พอร์ตต้นทางของเซ็กเมนต์นั้นเป็นพอร์ตปลายทาง แต่เซิร์ฟเวอร์เรียกใช้ฟังก์ชันใดเพื่อค้นหาข้อมูลเกี่ยวกับพอร์ตนั้น มันคือaccept()
อะไร