09 · เครือข่าย
ชั้นนี้ละลายขอบเขตของเครื่องเดี่ยวทิ้ง — ทุกอย่างที่อยู่เหนือขึ้นไปอ้างถึงสิ่งที่ไม่ใช่ตัวมันเองได้
เครื่องที่ไม่มีอะไรร่วมกันเลย ตกลงกันจนคุยกันได้อย่างไร
ในเดือนตุลาคม 1986 สองสถานที่ที่ห่างกันสี่ร้อยหลาคุยกันไม่ได้อีกต่อไป Van Jacobson บันทึกตัวเลขไว้: ระหว่าง Lawrence Berkeley Laboratory กับ University of California ที่ Berkeley — "ห่างกัน 400 หลา และสองช่วง IMP hop" ("separated by 400 yards and two IMP hops") — ปริมาณงานต่อเวลา (throughput) ตกจาก 32 Kbps เหลือ 40 bps (Jacobson & Karels, SIGCOMM '88) ต่างกันพันเท่า บนระยะที่คนเดินถึงในสี่นาที ไม่มีอะไรพัง ไม่มีสายถูกตัด ไม่มีเครื่องล่ม ไม่มีผู้โจมตี เครือข่ายแค่ยุ่งกับการส่งซ้ำ (retransmission) แพ็กเก็ต (packet) ที่มันส่งไม่สำเร็จอยู่แล้ว จนไม่เหลือที่ว่างให้ส่งอะไรได้อีก มันกินตัวเอง และจะกินตัวเองซ้ำไปอีกสองปี
เหตุการณ์นั้นคือบทนำที่ดีที่สุดของชั้นนี้ เพราะมันบอกว่าเครือข่าย (network) เป็นของแบบไหน ไม่ใช่สายไฟ แต่เป็นข้อตกลง — ที่ไม่มีอำนาจใดบังคับให้ทำตาม
ข้อตกลงนี้เริ่มจากการตัดสินใจที่เกิดขึ้นสองครั้งแยกจากกัน ในช่วงต้นทศวรรษ 1960 ระบบโทรศัพท์ทำงานด้วย circuit switching: จองเส้นทางไว้ทั้งสาย ยึดไว้ตลอดการสนทนา บทสนทนาก็ได้สายส่วนตัวไปใช้ Paul Baran ที่ RAND กำลังออกแบบระบบสื่อสารที่รอดได้แม้ตัวมันเองจะถูกทำลายไปเป็นส่วนใหญ่ เขาเสนอตรงข้าม: สับข้อความเป็นก้อนมาตรฐาน ให้แต่ละก้อนหาทางไปเอง แล้วประกอบกลับที่ปลายทาง (On Distributed Communications, RM-3420-PR, 1964) Donald Davies ที่ National Physical Laboratory ของอังกฤษ มาถึงแบบเดียวกันด้วยเหตุผลคนละอย่าง — ทราฟฟิกของคอมพิวเตอร์มาเป็นห้วงๆ (bursty) และวงจรที่จองไว้ก็ว่างเปล่าเกือบตลอดเวลา — และเขาคือคนตั้งชื่อก้อนพวกนี้จนติดปากมาถึงทุกวันนี้ว่า แพ็กเก็ต (packet) packet switching แลกการรับประกันด้วยค่าสถิติ: ไม่มีบทสนทนาไหนได้รับสัญญาว่าจะมีเส้นทาง ทุกบทสนทนาใช้ทุกเส้นทางร่วมกัน และใช้ร่วมกันได้ดีเพราะไม่มีใครพูดต่อเนื่องตลอดเวลา ข้อความแรกบน ARPANET ที่โตขึ้นมาจากทั้งหมดนี้ ถูกส่งจาก UCLA ไปยัง Stanford Research Institute เมื่อวันที่ 29 ตุลาคม 1969 ผู้ควบคุมพิมพ์อักษรสองตัวแรกของ "LOGIN" ปลายทางก็ล่ม (Kleinrock's account)
การตัดสินใจเชิงโครงสร้างข้อที่สองคือ การแบ่งชั้น (layering) — หอคอย (tower) ทั้งใบย่อลงมาอยู่ในบทเดียว แต่ละชั้นรับงานจากชั้นบน ทำแค่ส่วนของตัวเอง ส่งที่เหลือลงข้างล่าง โดยไม่รู้อะไรเลยเกี่ยวกับการ implement ที่อยู่ข้างใต้ เวอร์ชันทางการคือ OSI Basic Reference Model เจ็ดชั้น เป็นมาตรฐานในปี 1984 (ISO/IEC 7498-1) เวอร์ชันที่โลกจริงใช้อยู่เล็กกว่าและรกกว่า มีสี่ชั้น เขียนขึ้นหลังจากมันเกิดขึ้นจริงไปแล้วใน RFC 1122 (1989) จำความน่าอายนี้ไว้ให้ดี: โมเดลที่คณะกรรมการออกแบบคือโมเดลที่ถูกสอนในห้องเรียน โมเดลที่งอกขึ้นจากมือคนที่ implement จริงคือตัวที่กำลังพาประโยคนี้มาถึงคุณ
สิ่งที่ทำให้เวอร์ชันที่งอกขึ้นมาใช้งานได้คือรูปทรงของส่วนกลาง Internet Protocol ให้อะไรแทบไม่ได้เลย: มันจะพยายามส่งแพ็กเก็ตไปยังที่อยู่หนึ่ง และมันอาจทำหาย ทำซ้ำ หน่วงเวลา หรือส่งถึงผิดลำดับ โดยไม่ขอโทษใคร เทคโนโลยีเครือข่ายข้างล่างต่างกันได้หมด — ไฟเบอร์ วิทยุ ดาวเทียม สายทองแดง — แอปพลิเคชันข้างบนก็ต่างกันได้หมด ทั้งสองฝั่งมาเจอกันที่ชั้นเดียวที่จนใจโดยตั้งใจ Jerome Saltzer, David Reed และ David Clark ตั้งชื่อหลักการเบื้องหลังความจนใจนั้น: ฟังก์ชันหนึ่งจะถูก implement ได้อย่างสมบูรณ์และถูกต้องก็ต่อเมื่อมีความรู้และความช่วยเหลือจากแอปพลิเคชันที่ยืนอยู่ที่จุดปลายทางทั้งสองฝั่งเท่านั้น การทำให้ฟังก์ชันที่ถูกตั้งคำถามนั้นเป็นฟีเจอร์ของระบบสื่อสารเองจึงเป็นไปไม่ได้ (end-to-end arguments, 1981/1984) วางความฉลาดไว้ที่ขอบ เครือข่ายที่พยายามรับประกันการส่งถึงก็ยังไม่ปลดแอปพลิเคชันจากการต้องตรวจสอบเองอยู่ดี แถมเก็บภาษีจากทุกแอปพลิเคชันที่ไม่สนใจเรื่องนี้ด้วย
ความน่าเชื่อถือจึงถูกสร้าง ซ้อนทับ ความไม่น่าเชื่อถือ โดยจุดปลายทางทั้งสองฝั่ง และนั่นคือ TCP การออกแบบของ Vint Cerf กับ Robert Kahn ในปี 1974 (IEEE Trans. Comm. COM-22(5): 637–648) ใส่หมายเลขให้ทุกไบต์ ยืนยันสิ่งที่มาถึง ส่งซ้ำสิ่งที่ไม่มาถึง ปั้นสตรีมที่เรียงลำดับและไม่มีช่องว่างขึ้นจากตัวกลางที่ไม่สัญญาสักอย่างเดียวในนั้น ARPANET เปลี่ยนมาใช้มันทั้งระบบในวันที่ 1 มกราคม 1983 วันที่กำหนดไว้ล่วงหน้าสองปีใน RFC 801 — ครั้งสุดท้ายที่เครือข่ายยังเล็กพอจะเปลี่ยนได้ในวันเดียว
เรากลับมาที่ปี 1986 ได้ตรงนี้ เพราะการส่งซ้ำ (retransmission) คือพฤติกรรมที่กินเครือข่ายไปนั่นเอง ผู้ส่งที่ตอบสนองต่อความแออัด (congestion) ด้วยการพยายามหนักขึ้น ทำให้ความแออัดแย่ลง ผู้ส่งหนึ่งหมื่นรายทำแบบนั้นพร้อมกันก็พังทรัพยากรส่วนรวมทั้งผืน ไม่มีหน่วยงานกลางไหนห้ามได้ — ไม่มีใครเป็นเจ้าของอินเทอร์เน็ต และไม่มีใครถูกสั่งให้ช้าลงได้ ทางแก้ของ Jacobson ยังฝังอยู่ในกระดูกของทุกการเชื่อมต่อที่คุณสร้างทุกวันนี้: ให้ผู้ส่งแต่ละรายอนุมานสถานะ (state) ของทั้งระบบจากสิ่งที่ตัวเองมองเห็นในพื้นที่ มองแพ็กเก็ตที่หายไปเป็นหลักฐานของความแออัด ตัดอัตราการส่งลงอย่างแรง ค่อยๆ ไต่ขึ้นใหม่อย่างนุ่มนวล congestion control คือการยับยั้งชั่งใจโดยสมัครใจของฝ่ายที่มองไม่เห็นกันและกัน และมันอยู่ได้เพราะทางเลือกอื่นคือไม่มีใครได้อะไรเลย มันคือชิ้นส่วนของความสุภาพแบบกระจายศูนย์ที่ส่งผลสำคัญที่สุดเท่าที่เคยถูกนำไปใช้จริง
โครงสร้างเดียวกัน — ไม่มีอำนาจ มีแต่ข้อตกลง — คุมว่าจะหาของเจอได้อย่างไร Domain Name System ที่ Paul Mockapetris เขียนสเปกไว้ในปี 1983 และปรับปรุงใน RFCs 1034 และ 1035 (1987) แปลงชื่อเป็นที่อยู่ด้วยการมอบอำนาจ (delegation): แต่ละโซนได้รับความไว้ใจให้ตอบแทนชื่อที่อยู่ใต้มัน การจัดเส้นทาง (routing) ระหว่างเครือข่ายวิ่งบน BGP (RFC 4271) แต่ละเครือข่ายประกาศว่าตัวเองไปถึงที่อยู่ไหนได้บ้าง เพื่อนบ้านก็เชื่อ เมื่อวันที่ 24 กุมภาพันธ์ 2008 Pakistan Telecom ทำตามคำสั่งให้บล็อก YouTube ในประเทศ ด้วยการประกาศเส้นทางไปยังที่อยู่ส่วนหนึ่งของ YouTube ที่จำเพาะกว่าของ YouTube เอง — เส้นทางที่จำเพาะกว่าชนะเสมอ และผู้ให้บริการต้นทางของมันส่งต่อคำประกาศนั้นออกไป ทราฟฟิกทั้งโลกที่มุ่งหา YouTube จึงวิ่งไปปากีสถานอยู่ราวสองชั่วโมง (RIPE NCC) ไม่มีอะไรถูกแฮ็ก ระบบทำงานตามที่ออกแบบไว้ทุกอย่าง และการออกแบบนั้นตั้งอยู่บนสมมติฐานว่าทุกฝ่ายซื่อสัตย์
บนสุดของทั้งหมดนี้คือแอปพลิเคชันหนึ่งในหลายๆ ตัว เสนอขึ้นที่ CERN ในเดือนมีนาคม 1989 เพื่อใช้ติดตามเอกสาร (Berners-Lee) และปล่อยสู่สาธารณสมบัติในวันที่ 30 เมษายน 1993 สำหรับคนส่วนใหญ่ เว็บ (the Web) คือ เครือข่าย (network) — นั่นแหละคือหน้าตาของชั้นที่สร้างมาดี เมื่อมองจากด้านบน
เชื่อมโยง
ด้านล่าง: บทที่ 03 กำหนดเพดานทางกายภาพของช่องสัญญาณ (channel) ใดๆ และให้รหัสตรวจจับข้อผิดพลาด (error-detecting code) ที่ทุกชั้นใช้ บทที่ 04 กับ 05 ให้เครื่องและระบบปฏิบัติการที่ลงมือขยับไบต์จริงๆ ด้านบน: บทที่ 10 เอาเครื่องที่เชื่อมต่อกันในบทนี้ไปถามว่าการที่พวกมันตกลงอะไรกันสักอย่างแปลว่าอะไร คำถามนี้ยากกว่าการทำให้พวกมันคุยกันได้มาก บทที่ 08 มักอยู่อีกฟากหนึ่งของการเชื่อมต่อแบบนี้ บทที่ 11 คือบทที่ชั้นนี้ต้องพึ่งอยู่ตลอด เพราะ DNS กับ BGP ถูกสร้างมาสำหรับเครือข่ายของคนที่รู้จักกันเป็นเพื่อนร่วมงาน
คำถามที่ยังเปิดอยู่
end-to-end argument ถูกกดดันอยู่ตลอด: firewall, address translator และ content delivery network ต่างพาความฉลาดกลับเข้าไปไว้ตรงกลาง ส่วน QUIC ย้าย transport ออกจาก kernel เพื่อหนีเงื้อมมือของตรงกลางนั้น เอวคอดแคบ (narrow waist) ยังเป็นสถาปัตยกรรมจริง หรือเป็นแค่ความทรงจำถึงมันแล้ว ข้อสอง: ปัญหาความไว้ใจของ BGP มีคำตอบทางเทคนิคมาหลายปีแล้ว — การตรวจสอบแหล่งที่มาของเส้นทางด้วยวิทยาการรหัสลับ (cryptographic validation) — แต่การใช้งานจริงยังทำได้แค่บางส่วน มันจึงไม่ใช่คำถามวิจัยเท่ากับเป็นกรณีศึกษาว่าทำไมการประสานงานถึงล้มเหลวเมื่อไม่มีใครถูกบังคับได้ ข้อสาม: congestion control ตอนนี้รันหลายอัลกอริทึมพร้อมกัน บางตัวก้าวร้าวกว่าตัวอื่นมาก บนทรัพยากรส่วนรวมที่ออกแบบมาโดยสมมติว่าทุกฝ่ายยับยั้งชั่งใจเท่าๆ กัน อะไรจะยึดข้อตกลงไว้ได้ เมื่อฝ่ายต่างๆ ไม่เห็นตรงกันอีกต่อไป
อ่านต่อ
- J. H. Saltzer, D. P. Reed & D. D. Clark, "End-to-End Arguments in System Design," ACM TOCS 2, no. 4 (1984): 277–288 — เส้นทางสั้นที่สุดที่จะเข้าใจว่าทำไมอินเทอร์เน็ตถึงมีรูปทรงแบบที่เป็นอยู่; MIT PDF.
- Van Jacobson & Michael J. Karels, "Congestion Avoidance and Control," SIGCOMM '88 — PDF.
- Larry Peterson & Bruce Davie, Computer Networks: A Systems Approach — ตำราที่เริ่มจากมุมมองระบบ ปรับปรุงต่อเนื่องและอ่านฟรีที่ systemsapproach.org. ถ้าต้องการแนวทางแบบคอร์สคลาสสิก ดู Kurose & Ross, Computer Networking: A Top-Down Approach, 9th ed., 2025.