เว็บเบราว์เซอร์ใช้พอร์ตขาออกที่แตกต่างกันสำหรับแท็บต่างๆหรือไม่


58

ในเว็บเบราว์เซอร์ที่รองรับการมีหลายแท็บเช่น Firefox แท็บต่าง ๆ ที่ไปยังโดเมนเว็บไซต์ต่าง ๆ ใช้พอร์ตเฉพาะสำหรับแต่ละโดเมนหรือไม่

หรือเบราว์เซอร์ใช้พอร์ตเดียวสำหรับจัดการแท็บทั้งหมดและโดเมนทั้งหมดหรือไม่


เบราว์เซอร์ใช้ 2 พอร์ตเมื่อเชื่อมต่อกับเว็บไซต์ 80 ใช้สำหรับการเชื่อมต่อ http และ 443 ใช้สำหรับการเชื่อมต่อ https en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
Moab

7
ฉันรู้ว่าพอร์ตที่ใช้เชื่อมต่อกับเซิร์ฟเวอร์ แต่ฉันสงสัยเกี่ยวกับหมายเลขพอร์ตที่ใช้เชื่อมต่อจากไคลเอนต์ (โฮสต์คอมพิวเตอร์)
yoyo_fun

2
ฉันคิดว่าคำว่า "พอร์ตขาออก" นั้นไม่แน่ชัด พอร์ตเป็นแบบสองทิศทาง บางทีคุณสามารถพูดได้ "โลคัลพอร์ต" แทน โลคัลพอร์ตถูกใช้เป็นพอร์ตต้นทาง (ขาออก) สำหรับการส่งคำร้องขอและพอร์ตปลายทาง (ขาเข้า) สำหรับรับการตอบกลับ
Ron Maupin

6
พอร์ตได้รับมอบหมายจากระบบปฏิบัติการและการเชื่อมต่อใหม่แต่ละครั้งจะถูกกำหนดพอร์ตท้องถิ่นใหม่เพื่อให้แตกต่างจากการเชื่อมต่อที่เปิดอยู่ทั้งหมด
อดีต Umbris

1
@ExUmbris: นั่นอาจเป็นกลยุทธ์ที่เข้าใจง่าย แต่การเชื่อมต่อ TCP จะถูกระบุโดยรูปสี่เหลี่ยม {local IP, พอร์ตท้องถิ่น, IP ท้องถิ่น, ระยะไกล IP, พอร์ตระยะไกล} พอร์ตในตัวเครื่องไม่จำเป็นสำหรับความเป็นเอกลักษณ์ซึ่งเป็นสิ่งที่ดี: เว็บเซิร์ฟเวอร์ไม่สามารถใช้พอร์ตในตัวของมันได้ทั้งหมดเพื่อความเป็นเอกลักษณ์ และจากมุมมองของเว็บเซิร์ฟเวอร์ IP ระยะไกลไม่ซ้ำกันเนื่องจากผู้ใช้หลายคนอาจอยู่หลังเกตเวย์ / พร็อกซีเดียว
MSalters

คำตอบ:


55

เบราว์เซอร์ใช้พอร์ตต่าง ๆ เพื่อเชื่อมต่อกับเว็บไซต์อื่นหรือไม่?

ใช่.

นี่คือตัวอย่างการแสดงการเชื่อมต่อ Firefox ปัจจุบันของฉัน (ฉันมีแท็บเปิด 9 แท็บ) ใน Windows 7:

ป้อนคำอธิบายรูปภาพที่นี่

หมายเหตุ:

  • คุณจะเห็นว่าพอร์ตในตัวเครื่องนั้นแตกต่างกัน

  • พอร์ตระยะไกลมักจะ 80 (HTTP), 443 (HTTPS) หรือ 8080 (HTTP สำรอง)

  • กระบวนการแสดงผลหน้าเว็บแบบเต็มมีอธิบายไว้ด้านล่าง ดูขั้นตอนเฉพาะ 5, 6, 13 และ 15 (ซึ่งเป็นตัวหนา):

    • โดยทั่วไปการแสดงผลหน้าเว็บเดียวใช้การเชื่อมต่อหลายรายการซึ่งทั้งหมดนี้จะไม่สามารถใช้กับที่อยู่ระยะไกลเดียวกันได้

    • เนื่องจากหน้าเว็บมักจะมีทรัพยากรที่โฮสต์อยู่ที่อื่น (ไฟล์จาวาสคริปต์ ฯลฯ )

  • การเชื่อมต่อหลายครั้งไปยังเว็บไซต์เดียวกัน (เช่น stackoverflow.com) ก็มีพอร์ตในตัวเครื่องที่แตกต่างกัน (เพราะเป็นการเชื่อมต่อที่แยกต่างหากในแท็บต่าง ๆ ที่แสดงหน้าต่างกัน)


แสดงผลหน้าเว็บ - ทีละขั้นตอน

บันทึก:

  • ขั้นตอนที่ 5, 6, 13 และ 15 (ซึ่งเป็นตัวหนา) เกี่ยวข้องโดยตรงกับคำถาม

คุณเคยคิดบ้างไหมว่าจะเกิดอะไรขึ้นเมื่อคุณท่องเว็บ มันไม่ง่ายอย่างที่คิด:

  1. คุณพิมพ์ URL ลงในแถบที่อยู่ในเบราว์เซอร์ที่คุณต้องการ
  2. เบราว์เซอร์จะแยกวิเคราะห์ URL เพื่อค้นหาโปรโตคอลโฮสต์พอร์ตและพา ธ
  3. มันเป็นคำขอ HTTP (ซึ่งเป็นไปได้มากที่สุดโปรโตคอล)
  4. ในการเข้าถึงโฮสต์ขั้นแรกจำเป็นต้องแปลโฮสต์ที่มนุษย์อ่านได้เป็นหมายเลข IP และดำเนินการนี้โดยทำการค้นหา DNS บนโฮสต์
  5. จากนั้นจะต้องเปิดซ็อกเก็ตจากคอมพิวเตอร์ของผู้ใช้ไปยังหมายเลข IP นั้นบนพอร์ตที่ระบุ (ส่วนใหญ่มักจะพอร์ต 80)
  6. เมื่อเปิดการเชื่อมต่อคำขอ HTTP จะถูกส่งไปยังโฮสต์
  7. โฮสต์ส่งต่อการร้องขอไปยังซอฟต์แวร์เซิร์ฟเวอร์ (ส่วนใหญ่ Apache) กำหนดค่าให้ฟังบนพอร์ตที่ระบุ
  8. เซิร์ฟเวอร์ตรวจสอบการร้องขอ (ส่วนใหญ่มักเป็นเพียงเส้นทาง) และเปิดตัวปลั๊กอินเซิร์ฟเวอร์ที่จำเป็นในการจัดการการร้องขอ (สอดคล้องกับภาษาเซิร์ฟเวอร์ที่คุณใช้ PHP, Java, .NET, Python?)
  9. ปลั๊กอินสามารถเข้าถึงการร้องขอแบบเต็มและเริ่มเตรียมการตอบกลับ HTTP
  10. เพื่อสร้างการตอบสนองการเข้าถึงฐานข้อมูล (น่าจะ) ทำการค้นหาฐานข้อมูลตามพารามิเตอร์ในพา ธ (หรือข้อมูล) ของคำขอ
  11. ข้อมูลจากฐานข้อมูลพร้อมกับข้อมูลอื่น ๆ ที่ปลั๊กอินตัดสินใจที่จะเพิ่มถูกรวมเข้ากับสตริงข้อความที่มีความยาว (อาจเป็น HTML)
  12. ปลั๊กอินจะรวมข้อมูลนั้นกับข้อมูลเมตาบางส่วน (ในรูปแบบของส่วนหัว HTTP) และส่งการตอบกลับ HTTP กลับไปยังเบราว์เซอร์
  13. เบราว์เซอร์ได้รับการตอบสนองและแยกวิเคราะห์ HTML (ซึ่งมีความน่าจะเป็น 95% เสีย) ในการตอบสนอง
  14. ต้นไม้ DOM สร้างขึ้นจาก HTML ที่เสียหาย
  15. มีการร้องขอใหม่ไปยังเซิร์ฟเวอร์สำหรับทรัพยากรใหม่แต่ละรายการที่พบในซอร์ส HTML (โดยทั่วไปคือรูปภาพ, สไตล์ชีทและไฟล์ JavaScript) กลับไปที่ขั้นตอนที่ 3 และทำซ้ำสำหรับแต่ละทรัพยากร
  16. สไตล์ชีตจะถูกแยกวิเคราะห์และข้อมูลการเรนเดอร์ในแต่ละไฟล์จะถูกแนบกับโหนดที่ตรงกันในทรี DOM
  17. จาวาสคริปต์ถูกแยกวิเคราะห์และดำเนินการและโหนด DOM จะถูกย้ายและข้อมูลสไตล์ได้รับการปรับปรุงให้สอดคล้อง
  18. เบราว์เซอร์แสดงผลหน้าบนหน้าจอตามต้นไม้ DOM และข้อมูลสไตล์สำหรับแต่ละโหนด
  19. คุณเห็นหน้าบนหน้าจอ
  20. คุณรู้สึกรำคาญที่กระบวนการทั้งหมดช้าเกินไป

แหล่งที่มาการแสดงผลหน้าเว็บ - ทีละขั้นตอน


63

แต่ละการเชื่อมต่อไปยังเว็บไซต์ใช้ซ็อกเก็ตที่แตกต่างกับพอร์ต 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:

ป้อนคำอธิบายรูปภาพที่นี่


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

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

9
@ user45623: แม้ว่าภาพหน้าจอเป็นภาพหน้าจอของ Windows แต่netstat -nควรทำงานในระบบปฏิบัติการส่วนใหญ่รวมถึง Linux และ Mac OS
Heinzi

1
บน Windows (อาจเป็นระบบปฏิบัติการอื่น ๆ ด้วย) คุณสามารถใช้netstat -n -oเพื่อดูว่ากระบวนการใดที่สร้างการเชื่อมต่อ หรือคุณสามารถเรียกใช้tcpview ของ SysInternalเพื่อดูรายการใน GUI พร้อมชื่อกระบวนการและไอคอนและทั้งหมด
Jonathan

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

11

ในส่วนที่เกี่ยวกับแท็บไปยังเว็บไซต์ต่าง ๆ ไม่มีอะไรใน TCP ที่ต้องการให้พอร์ตในตัวเครื่องนั้นแตกต่างกันตราบใดที่ tuple {local IP, พอร์ตภายใน, IP เป้าหมาย, พอร์ตเป้าหมาย}จะไม่ซ้ำกัน สำหรับแท็บไปยังเว็บไซต์เดียวกันสถานการณ์มีความซับซ้อนมากขึ้น

เบราว์เซอร์เช่นเดียวกับซอฟต์แวร์ไคลเอ็นต์อื่น ๆ ใช้พอร์ตภายในเครื่องที่แตกต่างกันต่อการเชื่อมต่อขาออกไปยังเป้าหมายเดียวกัน โดยทั่วไปจะมีการเชื่อมต่อหลายรูปแบบกับเว็บไซต์ที่กำหนดเพื่อดึงข้อมูลทรัพยากรที่ฝังอยู่เช่นรูปภาพ, CSS, JavaScript และอื่น ๆ นอกจากนี้ยังจะรวมการเชื่อมต่อเหล่านั้นเพื่อนำไปใช้ซ้ำได้

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


ขอบคุณ การเชื่อมต่อหมายถึงอะไร
yoyo_fun

แทนที่จะปิดให้ส่งคืนไปยังพูลและปิดเฉพาะถ้ายังไม่มีการใช้งานสำหรับช่วงเวลาการหมดเวลา และค้นหาในกลุ่มก่อนที่จะสร้างการเชื่อมต่อใหม่ไปยังเป้าหมายนั้น นี่คือวิธีการใช้ HTTP แบบ keep-alive
user207421

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

ถูกต้องซึ่งโดยทั่วไปจะเป็นแผนที่ที่คีย์โดย IP เป้าหมาย: พอร์ต
user207421

2
@EJP: โปรดทราบว่าสำหรับ HTTPS จะไม่ปลอดภัยในการคีย์แผนที่ด้วย IP เป้าหมายและพอร์ต คุณต้องแยกความแตกต่างระหว่างการเชื่อมต่อกับชื่อโฮสต์ที่แตกต่างกันแม้ว่าจะเกิดขึ้นเพื่อแก้ไขกับ IP และพอร์ตเดียวกัน เนื้อหาที่เบราว์เซอร์ควรให้การเชื่อมต่อสำหรับแท็บที่แตกต่างกันแยกต่างหากถ้าอย่างน้อยหนึ่งแท็บที่อยู่ในโหมดไม่ระบุตัวตน
Henning Makholm

6

ใช่. ไม่แน่ มันขึ้นอยู่กับ.

ก่อนอื่นเบราว์เซอร์อาจใช้กลยุทธ์เหล่านี้เพื่อเชื่อมต่อ:

  1. การเชื่อมต่อแบบครั้งเดียว (ไม่น่าเป็นไปได้สำหรับเบราว์เซอร์ใด ๆ ที่ใหม่กว่า 1995)
  2. การเชื่อมต่อหนึ่งแท็บต่อหนึ่งแท็บ (โดยทั่วไปเหมือนกับ # 1 ดีกว่าเล็กน้อยมาก)
  3. หนึ่งการเชื่อมต่อต่อทรัพยากร (ไร้เดียงสา แต่ไม่ได้ทำงานไม่ดี)
  4. กลุ่มการเชื่อมต่อที่มีการเชื่อมต่อแบบ keep-alive การใช้งานซ้ำ
  5. สิ่งที่แตกต่าง (อ่านว่า: สิ่งแปลก ๆ )

คุณไม่มีทางรู้ได้ว่ากลยุทธ์ใดที่เบราว์เซอร์จะใช้แม้ว่าการใช้กลุ่มการเชื่อมต่อ (และการเชื่อมต่อซ้ำ) เป็นสมมติฐานที่สมเหตุสมผล

ประการที่สองวิธีการทำงานของ TCP คุณมีพอร์ตต้นทางและพอร์ตปลายทางสำหรับทุกการเชื่อมต่อ คู่ของแหล่งที่มาและที่อยู่ปลายทาง / พอร์ตกำหนดการเชื่อมต่อ
คุณ[1]ใช้พอร์ตที่รู้จักกันดีเสมอ (เช่น 80 หรือ 443) เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ (ซึ่งฟังที่อยู่ที่โฆษณาไว้) แต่พอร์ตอื่นจะสุ่มเลือก ดังนั้นขึ้นอยู่กับด้านที่คุณดูที่การเชื่อมต่อมันอาจมีพอร์ตที่เป็นไปได้หนึ่งหรือหลายพอร์ต

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

ตั้งแต่คำถามอย่างชัดเจนกล่าวออกในกรณี "ปกติ" หมายเลขพอร์ตจะเหมือนกันโดยไม่คำนึงถึงแท็บที่พวกเขาอยู่ในหรือหนึ่งในสองพอร์ตที่เป็นไปได้ (80 และ 443) แม้ว่าจะเป็นไปได้ที่จะขอพอร์ตอื่น (เช่น 8080) ใน URL อย่างชัดเจน แม้ว่ามันจะเป็นของหายาก


[1]ก็ไม่เสมอไป ... แต่อย่าซับซ้อนเกินไป


อีกหนึ่งปัจจัย ... พอร์ตฝั่งไคลเอ็นต์มักได้รับเลือกจากระบบปฏิบัติการไม่ใช่เบราว์เซอร์ และพอร์ตฝั่งไคลเอ็นต์ที่เซิร์ฟเวอร์มองเห็นอาจแตกต่างจากที่เบราว์เซอร์เห็นหากการเชื่อมต่อผ่านอุปกรณ์ NAT ระบบปฏิบัติการส่วนใหญ่จัดสรรทั้งแบบเชิงเส้นหรือแบบสุ่มภายในช่วงพอร์ตชั่วคราว (กำหนดค่าได้) แต่เบราว์เซอร์สามารถร้องขอซอร์ส - พอร์ตเดียวกันในหลาย ๆ การเชื่อมต่อไปยังเซิร์ฟเวอร์ที่แตกต่างกัน (และ OP กำลังถามเกี่ยวกับพอร์ตไคลเอนต์ไม่ใช่พอร์ตเซิร์ฟเวอร์)
david

@david: มันยากที่จะบอกว่าอันไหนที่ถูกต้อง (หรืออะไรจะตอบ) เนื่องจาก Q นั้นเป็นอาหารอันโอชะที่คลุมเครือดังนั้นฉันจึงค่อนข้างยาว OP กำลังถามเกี่ยวกับพอร์ตขาออกของลูกค้า "ลูกค้า" แนะนำว่าเรากำลังพูดถึงพอร์ตต้นทาง (ในแง่ TCP) ซึ่งเป็นพอร์ตที่เลือกได้อย่างอิสระหรือแบบสุ่ม (โดยการนำไปใช้) แต่ "ขาออก" แนะนำว่าเป็นพอร์ตปลายทางจริง ๆ ที่เรากำลังพูดถึง ซึ่งอธิบายได้ดีกว่าว่าเป็น "พอร์ตบนเซิร์ฟเวอร์" ในคำพูดของคนธรรมดา ความคิดเห็นของคุณเกี่ยวกับ NAT นั้นถูกต้องตามที่เห็นจากเซิร์ฟเวอร์ แต่ไม่มีผลกับลูกค้า
Damon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.