การเชื่อมต่อไคลเอนต์หลายวิธีทำกับเว็บเซิร์ฟเวอร์เดียวได้อย่างไร


16

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

เพียงเพื่อระบุว่าฉันได้เรียนรู้ราง googling บางอย่างที่ซ็อกเก็ตจัดการคำขอของลูกค้าแต่ละราย

ดังนั้นสมมติว่ามีเว็บเซิร์ฟเวอร์และสมมติว่ามี 2 ไคลเอ็นต์ที่มี IP

Client A: 5.5.5.5
Client B: 10.10.10.10 

ทั้งคู่พยายามเชื่อมต่อกับเซิร์ฟเวอร์ที่พอร์ต 80

ตอนนี้จาก googling สิ่งที่ฉันได้รับเซิร์ฟเวอร์ฟังที่พอร์ต 80สำหรับคำขอที่เข้ามา จากนั้นสมมติว่าไคลเอ็นต์ Aพยายามเชื่อมต่อกับเซิร์ฟเวอร์ (ทำการเชื่อมต่อ TCP / IP) ในระหว่างที่ซ็อกเก็ตถูกสร้างขึ้นระหว่างสองคนนี้ จากนั้นจะถูกเรียกใช้งานเป็นเธรดแยกต่างหากสำหรับการสื่อสารเพิ่มเติมทำให้เซิร์ฟเวอร์สามารถฟังการร้องขอของไคลเอ็นต์อื่นที่พอร์ตนั้นอีกครั้ง และลูกค้า Bเชื่อมต่อด้วยวิธีเดียวกัน

ตอนนี้คำถามแรกของฉันคือ:

1. How does server communicate with these two clients simultaneously  
   after the connection has been established?

ตอนนี้ในทางปฏิบัติไม่เพียงลูกค้า 2 รายเท่านั้น แต่ผู้ใช้หลายพันคนอาจเชื่อมต่อกับเซิร์ฟเวอร์

ดังนั้นคำถามต่อไปของฉันคือ:

2. Now, how do those thousands of clients get connected to a single server?

   If we assume every client is connected to the server through wire, it is not 
   practically possible to maintain that many sockets on a hardware for
   connection. How those thousands connections are made and handled?

สุดท้ายคำถามที่สามของฉันคือ:

3. Above I said (actually heard) how **client A** connected to the the server
   and similarly the client B.

   But I didn't get the part stating "after a TCP/IP connection is made they
   continue separately in a separate socket and making server to listen for 
   other client requests." What does that mean? If one client is communicating
   to the server, how come other can communicate at the same time to same server.

   Isn't it like while a student is asking question to a teacher, other can't
   ask at the same time since that particular student is busy or occupying the
   teacher at the moment so others should wait, which we compare than client B 
   should wait when client A is communicating.

นี่เป็นคำถามพื้นฐานของฉันที่ฉันไม่ได้รับ โปรดแก้ไขให้ฉันถ้าฉันเข้าใจผิดทั้งหมด คุณสามารถแนะนำหนังสือ / pdf ให้ฉันอ่านได้หากคำตอบนั้นละเอียดหรือไม่เน้นเฉพาะบางส่วน ขอบคุณ


คำตอบใดช่วยคุณได้บ้าง ถ้าเป็นเช่นนั้นคุณควรยอมรับคำตอบเพื่อที่คำถามจะไม่โผล่ขึ้นมาเรื่อย ๆ โดยมองหาคำตอบ หรือคุณสามารถให้และยอมรับคำตอบของคุณเอง
Ron Maupin

คำตอบ:


6

ตอนนี้จาก googling สิ่งที่ฉันได้รับเซิร์ฟเวอร์ฟังที่พอร์ต 80 สำหรับคำขอที่เข้ามา

แท้จริงแล้วมีซ็อกเก็ตชนิดพิเศษที่เรียกว่าซ็อกเก็ต "ฟัง"

โดยทั่วไปแล้วซ็อกเก็ตจะเชื่อมโยงกับการรวมกันของ IP ท้องถิ่นพอร์ตท้องถิ่น IP ระยะไกลและพอร์ตระยะไกล

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

โดยปกติแล้วเว็บเซิร์ฟเวอร์ของคุณจะมีซ็อกเก็ตการฟังที่มีพอร์ตในตัว 80

จากนั้นสมมติว่าไคลเอ็นต์ A พยายามเชื่อมต่อกับเซิร์ฟเวอร์ (ทำการเชื่อมต่อ TCP / IP) ในระหว่างที่ซ็อกเก็ตถูกสร้างขึ้นระหว่างสองคนนี้

ซ็อกเก็ตคู่หนึ่งอันจริงบนไคลเอ็นต์หนึ่งอันบนเซิร์ฟเวอร์

แอปพลิเคชันไคลเอนต์สร้างซ็อกเก็ตและขอให้ไคลเอ็นต์ระบบปฏิบัติการเชื่อมต่อกับเซิร์ฟเวอร์

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

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

หลายเธรดหรือกระบวนการอาจตรวจสอบซ็อกเก็ตรายการเดียวกัน ระบบปฏิบัติการจะตรวจสอบให้แน่ใจว่าหนึ่งในนั้นได้รับการเชื่อมต่อที่กำหนด

จากนั้นจะถูกเรียกใช้งานเป็นเธรดแยกต่างหากสำหรับการสื่อสารเพิ่มเติม

ขึ้นอยู่กับตัวดำเนินการของแอ็พพลิเคชันเซิร์ฟเวอร์ พวกเขาอาจเลือกใช้หลายเธรดหรืออาจเลือกใช้ API เช่น "select" หรือ "Poll" ที่อนุญาตให้เธรดเดียวตรวจสอบซ็อกเก็ตหลายอันสำหรับกิจกรรม

  1. เซิร์ฟเวอร์สื่อสารกับลูกค้าสองคนนี้อย่างไรพร้อมกัน
    หลังจากสร้างการเชื่อมต่อแล้ว?

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

  1. ทีนี้ลูกค้าหลายพันคนนั้นเชื่อมต่อกับเซิร์ฟเวอร์เดียวอย่างไร

    หากเราสมมติว่าไคลเอนต์ทุกตัวเชื่อมต่อกับเซิร์ฟเวอร์ผ่านทางสายมันเป็นไปไม่ได้ที่จะรักษาซ็อกเก็ตจำนวนมากบนฮาร์ดแวร์สำหรับการเชื่อมต่อ วิธีสร้างและจัดการการเชื่อมต่อหลายพันวิธี

"ซ็อกเก็ต" ในบริบทนี้ไม่ได้อ้างถึงซ็อกเก็ตทางกายภาพเพียงเพื่อโครงสร้างข้อมูลภายในระบบปฏิบัติการ

ยังคงมีข้อ จำกัด หลายพันคนที่ทำได้ง่ายบนเซิร์ฟเวอร์ที่ทันสมัยหลายล้านคนยาก

ไม่เหมือนในขณะที่นักเรียนกำลังถามคำถามกับครูคนอื่น ๆ ไม่สามารถถามได้ในเวลาเดียวกันเนื่องจากนักเรียนคนนั้นกำลังยุ่งหรือครอบครองครูในขณะนี้ดังนั้นคนอื่นควรรอซึ่งเราเปรียบเทียบกว่าลูกค้า B ควรรอ เมื่อลูกค้า A กำลังสื่อสาร

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

และแน่นอนว่าเซิร์ฟเวอร์ในปัจจุบันมีโปรเซสเซอร์หลายคอร์


มีการสร้างการเชื่อมต่อใหม่ไม่ใช่ซ็อกเก็ต ฉันคิดว่าคุณกำลังขยายความสับสนของ OP เกี่ยวกับซ็อกเก็ตคืออะไร

ดูเหมือนว่าปัญหาคือ rfc แตกต่างจากการปฏิบัติจริงในความหมายของซ็อกเก็ต

ฉันเพิ่งไปและค้นหาเอกสารสำหรับ "ยอมรับ" สำหรับระบบปฏิบัติการหลักสามระบบพวกเขาทั้งหมดพูดถึงการยอมรับการสร้างซ็อกเก็ตใหม่

http://man7.org/linux/man-pages/man2/accept.2.html

https://www.freebsd.org/cgi/man.cgi?query=accept&sektion=2

https://msdn.microsoft.com/en-us/library/windows/desktop/ms737526%28v=vs.85%29.aspx


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

2 เช่นกันฉันหมายถึงพอร์ตเช่นพอร์ตจริงเมื่อคุณต้องการเชื่อมต่อกับเครือข่ายเช่นใน LAN ฉันอาจตีความคำศัพท์ที่นี่ผิด บอกว่าฉันเชื่อมต่อกับ google อีกครั้ง และเหมือนคนอื่น ๆ นับล้านกำลังเชื่อมต่อกับเซิร์ฟเวอร์ google เดียวนั้น ฉันเชื่อมต่อกับ google แบบไร้สายจากที่บ้านของฉันและในทำนองเดียวกันกับคนหลายล้านคน เซิร์ฟเวอร์มีการจัดการการเชื่อมต่อเหล่านี้อย่างไร เช่นเดียวกับคอมพิวเตอร์ของฉันที่จะใช้อินเทอร์เน็ตฉันจำเป็นต้องเชื่อมต่อกับพอร์ตบนเราเตอร์หรือไร้สาย พวกเขามีพอร์ตหลายล้านพอร์ตดังกล่าวหรือไม่? ตอนนี้ฉันคิดว่ามันไม่เกี่ยวกับเซิร์ฟเวอร์ แต่การเชื่อมต่อไร้สายใช่ไหม
Sagaryal

" โดยทั่วไปซ็อกเก็ตจะเชื่อมโยงกับการรวมกันของ IP ท้องถิ่นพอร์ตท้องถิ่น IP ระยะไกลและพอร์ตระยะไกล " ซ็อกเก็ตโดยนิยามของ RFC เป็นที่อยู่ IP ท้องถิ่นและพอร์ต TCP และมันไม่มีส่วนเกี่ยวข้องกับที่อยู่ระยะไกล . การเชื่อมต่อคือการรวมกันของซ็อกเก็ตท้องถิ่นและระยะไกลดังนั้นที่อยู่ IP ในท้องถิ่นพอร์ต TCP ท้องถิ่นที่อยู่ IP ระยะไกลและพอร์ต TCP ระยะไกล คุณสับสนปัญหา
Ron Maupin

2
" แจ้งเซิร์ฟเวอร์ OS ถือซ็อกเก็ตฟังที่เชื่อมต่อใหม่ที่กำลังจะมาใน. แอพลิเคชันเซิร์ฟเวอร์ยอมรับการเชื่อมต่อและซ็อกเก็ตใหม่จะถูกสร้างขึ้นเพื่อจัดการกับมัน. " ใหม่เชื่อมต่อไม่ซ็อกเก็ตได้รับการสร้างขึ้น ฉันคิดว่าคุณกำลังขยายความสับสนของ OP เกี่ยวกับซ็อกเก็ตคืออะไร
Ron Maupin

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