ในเว็บเบราว์เซอร์ที่รองรับการมีหลายแท็บเช่น Firefox แท็บต่าง ๆ ที่ไปยังโดเมนเว็บไซต์ต่าง ๆ ใช้พอร์ตเฉพาะสำหรับแต่ละโดเมนหรือไม่
หรือเบราว์เซอร์ใช้พอร์ตเดียวสำหรับจัดการแท็บทั้งหมดและโดเมนทั้งหมดหรือไม่
ในเว็บเบราว์เซอร์ที่รองรับการมีหลายแท็บเช่น Firefox แท็บต่าง ๆ ที่ไปยังโดเมนเว็บไซต์ต่าง ๆ ใช้พอร์ตเฉพาะสำหรับแต่ละโดเมนหรือไม่
หรือเบราว์เซอร์ใช้พอร์ตเดียวสำหรับจัดการแท็บทั้งหมดและโดเมนทั้งหมดหรือไม่
คำตอบ:
ใช่.
นี่คือตัวอย่างการแสดงการเชื่อมต่อ Firefox ปัจจุบันของฉัน (ฉันมีแท็บเปิด 9 แท็บ) ใน Windows 7:
หมายเหตุ:
คุณจะเห็นว่าพอร์ตในตัวเครื่องนั้นแตกต่างกัน
พอร์ตระยะไกลมักจะ 80 (HTTP), 443 (HTTPS) หรือ 8080 (HTTP สำรอง)
HTTP
ในรายการของหมายเลขพอร์ต TCP และ UDPสำหรับบางรายการกระบวนการแสดงผลหน้าเว็บแบบเต็มมีอธิบายไว้ด้านล่าง ดูขั้นตอนเฉพาะ 5, 6, 13 และ 15 (ซึ่งเป็นตัวหนา):
โดยทั่วไปการแสดงผลหน้าเว็บเดียวใช้การเชื่อมต่อหลายรายการซึ่งทั้งหมดนี้จะไม่สามารถใช้กับที่อยู่ระยะไกลเดียวกันได้
เนื่องจากหน้าเว็บมักจะมีทรัพยากรที่โฮสต์อยู่ที่อื่น (ไฟล์จาวาสคริปต์ ฯลฯ )
การเชื่อมต่อหลายครั้งไปยังเว็บไซต์เดียวกัน (เช่น stackoverflow.com) ก็มีพอร์ตในตัวเครื่องที่แตกต่างกัน (เพราะเป็นการเชื่อมต่อที่แยกต่างหากในแท็บต่าง ๆ ที่แสดงหน้าต่างกัน)
บันทึก:
คุณเคยคิดบ้างไหมว่าจะเกิดอะไรขึ้นเมื่อคุณท่องเว็บ มันไม่ง่ายอย่างที่คิด:
- คุณพิมพ์ URL ลงในแถบที่อยู่ในเบราว์เซอร์ที่คุณต้องการ
- เบราว์เซอร์จะแยกวิเคราะห์ URL เพื่อค้นหาโปรโตคอลโฮสต์พอร์ตและพา ธ
- มันเป็นคำขอ HTTP (ซึ่งเป็นไปได้มากที่สุดโปรโตคอล)
- ในการเข้าถึงโฮสต์ขั้นแรกจำเป็นต้องแปลโฮสต์ที่มนุษย์อ่านได้เป็นหมายเลข IP และดำเนินการนี้โดยทำการค้นหา DNS บนโฮสต์
- จากนั้นจะต้องเปิดซ็อกเก็ตจากคอมพิวเตอร์ของผู้ใช้ไปยังหมายเลข IP นั้นบนพอร์ตที่ระบุ (ส่วนใหญ่มักจะพอร์ต 80)
- เมื่อเปิดการเชื่อมต่อคำขอ HTTP จะถูกส่งไปยังโฮสต์
- โฮสต์ส่งต่อการร้องขอไปยังซอฟต์แวร์เซิร์ฟเวอร์ (ส่วนใหญ่ Apache) กำหนดค่าให้ฟังบนพอร์ตที่ระบุ
- เซิร์ฟเวอร์ตรวจสอบการร้องขอ (ส่วนใหญ่มักเป็นเพียงเส้นทาง) และเปิดตัวปลั๊กอินเซิร์ฟเวอร์ที่จำเป็นในการจัดการการร้องขอ (สอดคล้องกับภาษาเซิร์ฟเวอร์ที่คุณใช้ PHP, Java, .NET, Python?)
- ปลั๊กอินสามารถเข้าถึงการร้องขอแบบเต็มและเริ่มเตรียมการตอบกลับ HTTP
- เพื่อสร้างการตอบสนองการเข้าถึงฐานข้อมูล (น่าจะ) ทำการค้นหาฐานข้อมูลตามพารามิเตอร์ในพา ธ (หรือข้อมูล) ของคำขอ
- ข้อมูลจากฐานข้อมูลพร้อมกับข้อมูลอื่น ๆ ที่ปลั๊กอินตัดสินใจที่จะเพิ่มถูกรวมเข้ากับสตริงข้อความที่มีความยาว (อาจเป็น HTML)
- ปลั๊กอินจะรวมข้อมูลนั้นกับข้อมูลเมตาบางส่วน (ในรูปแบบของส่วนหัว HTTP) และส่งการตอบกลับ HTTP กลับไปยังเบราว์เซอร์
- เบราว์เซอร์ได้รับการตอบสนองและแยกวิเคราะห์ HTML (ซึ่งมีความน่าจะเป็น 95% เสีย) ในการตอบสนอง
- ต้นไม้ DOM สร้างขึ้นจาก HTML ที่เสียหาย
- มีการร้องขอใหม่ไปยังเซิร์ฟเวอร์สำหรับทรัพยากรใหม่แต่ละรายการที่พบในซอร์ส HTML (โดยทั่วไปคือรูปภาพ, สไตล์ชีทและไฟล์ JavaScript) กลับไปที่ขั้นตอนที่ 3 และทำซ้ำสำหรับแต่ละทรัพยากร
- สไตล์ชีตจะถูกแยกวิเคราะห์และข้อมูลการเรนเดอร์ในแต่ละไฟล์จะถูกแนบกับโหนดที่ตรงกันในทรี DOM
- จาวาสคริปต์ถูกแยกวิเคราะห์และดำเนินการและโหนด DOM จะถูกย้ายและข้อมูลสไตล์ได้รับการปรับปรุงให้สอดคล้อง
- เบราว์เซอร์แสดงผลหน้าบนหน้าจอตามต้นไม้ DOM และข้อมูลสไตล์สำหรับแต่ละโหนด
- คุณเห็นหน้าบนหน้าจอ
- คุณรู้สึกรำคาญที่กระบวนการทั้งหมดช้าเกินไป
แหล่งที่มาการแสดงผลหน้าเว็บ - ทีละขั้นตอน
แต่ละการเชื่อมต่อไปยังเว็บไซต์ใช้ซ็อกเก็ตที่แตกต่างกับพอร์ต TCP ปลายทาง 80 เริ่มต้นสำหรับ HTTP ธรรมดาและ 443 สำหรับ HTTPS เพื่อให้ซ็อกเก็ตไม่ซ้ำกันการรวมกันของที่อยู่ IP ต้นทางพอร์ต TCP ต้นทางที่อยู่ IP ปลายทางและพอร์ต TCP ปลายทางต้องแตกต่างกัน
หากคุณมีหลายการเชื่อมต่อไปยังเว็บไซต์เดียวกัน (สมมติว่าเว็บไซต์ใช้ที่อยู่ IP เดียวเท่านั้น) จากคอมพิวเตอร์เครื่องเดียวกันต้องใช้พอร์ต TCP ต้นทางอื่น วิธีนี้การเชื่อมต่อแต่ละครั้งจะไม่ซ้ำกัน
อย่างไรก็ตามควรสังเกตว่าตั้งแต่ HTTP 1.1 การเชื่อมต่อทั้งหมดจะคงอยู่ตามระยะเวลาที่กำหนด (เว้นแต่จะมีการประกาศเป็นอย่างอื่น) ซึ่งหมายความว่าเบราว์เซอร์ของคุณสามารถใช้การเชื่อมต่อเดียวกันนี้ได้หากมีการร้องขอทรัพยากรจำนวนมากจากเว็บไซต์เดียวกัน (เช่นไฟล์ css / js) นอกจากนี้ยังมีผลบังคับใช้หากคุณมีเว็บไซต์เดียวกันหลายรายการในเบราว์เซอร์ของคุณ
หากคุณใช้ Windows netstat -no -p TCP
คำสั่งจะแสดงซ็อกเก็ต TCP ที่ใช้งานอยู่ทั้งหมดและรหัสกระบวนการที่เกี่ยวข้องรวมถึงเบราว์เซอร์ของคุณ:
หากคุณใช้ Unix / Linux (Debian ในกรณีนี้) คุณสามารถใช้คำสั่งnetstat -ntp
หรือss -t
:
netstat -n
ควรทำงานในระบบปฏิบัติการส่วนใหญ่รวมถึง Linux และ Mac OS
netstat -n -o
เพื่อดูว่ากระบวนการใดที่สร้างการเชื่อมต่อ หรือคุณสามารถเรียกใช้tcpview ของ SysInternalเพื่อดูรายการใน GUI พร้อมชื่อกระบวนการและไอคอนและทั้งหมด
ในส่วนที่เกี่ยวกับแท็บไปยังเว็บไซต์ต่าง ๆ ไม่มีอะไรใน TCP ที่ต้องการให้พอร์ตในตัวเครื่องนั้นแตกต่างกันตราบใดที่ tuple {local IP, พอร์ตภายใน, IP เป้าหมาย, พอร์ตเป้าหมาย}จะไม่ซ้ำกัน สำหรับแท็บไปยังเว็บไซต์เดียวกันสถานการณ์มีความซับซ้อนมากขึ้น
เบราว์เซอร์เช่นเดียวกับซอฟต์แวร์ไคลเอ็นต์อื่น ๆ ใช้พอร์ตภายในเครื่องที่แตกต่างกันต่อการเชื่อมต่อขาออกไปยังเป้าหมายเดียวกัน โดยทั่วไปจะมีการเชื่อมต่อหลายรูปแบบกับเว็บไซต์ที่กำหนดเพื่อดึงข้อมูลทรัพยากรที่ฝังอยู่เช่นรูปภาพ, CSS, JavaScript และอื่น ๆ นอกจากนี้ยังจะรวมการเชื่อมต่อเหล่านั้นเพื่อนำไปใช้ซ้ำได้
เป็นไปไม่ได้ที่จะบอกว่าแท็บต่าง ๆ ในเว็บไซต์เดียวกันจะใช้การเชื่อมต่อที่แตกต่างกันหรือไม่เนื่องจาก (a) โดยทั่วไปจะไม่มีการเชื่อมต่อหนึ่งแท็บต่อไปหรือไม่และ (b) ขึ้นอยู่กับเวลาและการรับรองความถูกต้อง นำมาใช้ใหม่ระหว่างแท็บ; และเนื่องจากไม่สามารถระบุตัวตนการเชื่อมต่อได้ดังนั้นจึงไม่สามารถระบุพอร์ตในตัวเครื่องได้
ก่อนอื่นเบราว์เซอร์อาจใช้กลยุทธ์เหล่านี้เพื่อเชื่อมต่อ:
คุณไม่มีทางรู้ได้ว่ากลยุทธ์ใดที่เบราว์เซอร์จะใช้แม้ว่าการใช้กลุ่มการเชื่อมต่อ (และการเชื่อมต่อซ้ำ) เป็นสมมติฐานที่สมเหตุสมผล
ประการที่สองวิธีการทำงานของ TCP คุณมีพอร์ตต้นทางและพอร์ตปลายทางสำหรับทุกการเชื่อมต่อ คู่ของแหล่งที่มาและที่อยู่ปลายทาง / พอร์ตกำหนดการเชื่อมต่อ
คุณ[1]ใช้พอร์ตที่รู้จักกันดีเสมอ (เช่น 80 หรือ 443) เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ (ซึ่งฟังที่อยู่ที่โฆษณาไว้) แต่พอร์ตอื่นจะสุ่มเลือก ดังนั้นขึ้นอยู่กับด้านที่คุณดูที่การเชื่อมต่อมันอาจมีพอร์ตที่เป็นไปได้หนึ่งหรือหลายพอร์ต
ดังนั้นแท็บเดียวกันอาจ (และโดยปกติจะ) ใช้พอร์ตที่แตกต่างกันหลายตัวที่ส่วนท้าย แต่โดยหลักการแล้วแท็บที่ต่างกันอาจจะ (หากการเชื่อมต่อถูกพูลและทรัพยากรที่แตกต่างกันในแท็บที่แตกต่างกันจะถูกโหลดจากเซิร์ฟเวอร์เดียวกัน) ใช้พอร์ตเดียวกัน
ตั้งแต่คำถามอย่างชัดเจนกล่าวออกในกรณี "ปกติ" หมายเลขพอร์ตจะเหมือนกันโดยไม่คำนึงถึงแท็บที่พวกเขาอยู่ในหรือหนึ่งในสองพอร์ตที่เป็นไปได้ (80 และ 443) แม้ว่าจะเป็นไปได้ที่จะขอพอร์ตอื่น (เช่น 8080) ใน URL อย่างชัดเจน แม้ว่ามันจะเป็นของหายาก