Bear's House |
網路如何連通 |
![]() |
|
中研院計算中心 曾士熊 2003/9/4 大家都有打電話的經驗,可是大概沒幾個人真正知道電話是怎麼接通的。假設你正要打電話給美國的親友,拿起話筒首先聽到的是連續的“嗡”聲,這是撥號音(dial tone),表示本地的電話交換機已經準備好要為你服務。你開始撥號“002-1-202-362-xxxx”[註1],本地交換機收到信號,開始啟動一連串的動作:
現今的全球性電腦網路,起源於1960年代美國國防部先進研究計畫局(ARPA, the Advanced Research Projects Agency)所主導的網路研發計畫,其目的在建立一套即使遭受蘇聯核彈攻擊仍可維持暢通的軍事指揮系統。ARPANet以1969年的四個節點[註5]肇始,到1980年代中葉已發展成超過一千部電腦和十多萬名使用者的網路。ARPANet雖然名義上是軍用網路,但連網單位卻以大學和研究機構居多,可說是實質的學術教育網路。ARPA因此另外建立軍事網路MILNET,同時停止資助ARPANet。美國國家科學基金會(NFS, National Science Foundation)隨後出資在全美幾個地區設立學術教育網路,並以骨幹網路連接這些地區性網路,形成著名的NFSNet。進入1990年代,以NFSNet為基礎的全球性網路Internet[註6]逐漸形成、茁壯,成為今日網路涵蓋全球的局面。 雖然電腦網路的連線設施和電信線路兩者的重複性極高,尤其機構間的網路連線大都是向電信公司租用的,但是電腦網路的通訊方式其實比較像是郵政系統,而與電話系統大不相同。換句話說,當你透過電腦網路,無論是利用Communicator或I.E.讀取某個網站的WWW網頁、利用telnet簽入遠方的電腦主機、利用ftp從某個網站下載程式或資料,或是寄送電子信件(Email)給朋友時,相關的網路軟體都會自動的幫你「寫信」,把你要做的事和相關資訊告訴對方,而對方的電腦也會以「郵件」寄回處理結果或你要的資訊(包括程式、文字、影像、語音、動畫等)。或許你會奇怪,為什麼最先進的電腦網路竟然會採用這麼古老的「郵寄」作業方式?可別忘了,電腦和網路設備是以接近光的速度來處理及遞送網路郵件,遠遠快過人工作業的速度。就是這種驚人的高速,讓作業需求和資訊瞬息間跨越千、萬公里的距離,讓你覺得千萬里外的電腦如在眼前,同時還有足夠的餘裕增添許多傳統郵寄作業所做不到的功能。 網路通訊用的郵件統稱為“封包”(packet),有其特定格式和大小限制。封包主要包含TCP、IP、資料和序號等部分。封包的大小係由區域網路系統或網路連線設施所決定的,例如Ethernet規定封包大小的上限為1,500Byte、FDDI為4,500Byte、T1為736Byte等。當需要傳送的資料很長,超過上述的限制時,網路軟體會自動的把資料切割成好幾段,每一段分別裝入一個封包裡,並且在封包裡加上序號。網路軟體把資料分段裝入幾個封包之後,會將封包逐一經由網路連線發送出去,每一個封包所走的路線可能不同,因此路程遠近不一,難免發生先發後到的情形。序號的作用就是讓收信端的網路軟體收到封包後,可以檢查是否遺漏了某個封包,以便通知發信端重送遺失的封包。收齊封包以後,收信端的網路軟體會依據序號,逐一拆讀封包的資料,並且依序串接、還原成資料的原始模樣。 如同信封需寫明收信人和寄信人地址,封包上也有收件與寄件雙方的地址,這就是IP位址。IP(Internet Protocol)可說是建構整個網際網路,以及決定封包如何遞送,最重要也最基本的一套規範。簡單的說,網際網路上每一個節點都必須賦予一個全球唯一的IP位址,才能互相通訊。IP位址是一個32bit的數字,習慣上表現成四節數字,例如本院gate主機的IP位址為140.109.14.2。由於IP位址不容易記憶,因此總是轉換成有意義和比較容易記憶的FQDN(Fully Qualified Domain Name)。FQDN由主機名稱(host name)[註7]和網域名稱(domain name)兩部份所組成,例如本院網域名稱為sinica.edu.tw,而gate主機的FQDN則是gate.sinica.edu.tw。至於電子信箱地址(Email address)則是由帳號名稱(user name)、中介的@符號(讀做at)和FQDN三部份所組成,例如計算中心的服務電子信箱為service@gate.sinica.edu.tw。利用gate上的帳號收取電子郵件,可類比為利用本院地址通信,gate主機上有個電子信件軟體負責收取信件並轉存到個別帳號之下,有如本院的總收發室和各所(處)收發人員協助將信件送達個人一般。 對使用者而言,網路作業大多以FQDN為之,例如http://www.sinica.edu.tw、telnet gate.sinica.edu.tw、ftp ftp.sinica.edu.tw等。FQDN雖然對人很方便,但封包的遞送卻是依賴固定長度的IP位址而非長度不固定的FQDN。電子信箱地址和FQDN在封包裡,其實是被當作資料傳送的。假設你剛打完一封電子信件,按下「送出」的命令寄到朋友的信箱“abc@cs.caltech.edu”。Email軟體首先透過作業系統裡的TCP/IP軟體,向事先預設的本地網域名稱伺服器(DNS, Domain Name Server)[註8]查詢收件端FQDN的IP位址。本地DNS若未曾記錄“cc.caltech.edu”的資料,會自動的向自己預設的其它DNS查詢,就這樣你問我、我問他的一路詢問下去,直到某一個DNS查出“cs.caltech.edu”的IP位址(131.215.131.131),並一路回報給你的網路軟體為止。萬一最後還是查不到IP位址的話,你就會收到「查無此地址」(host unknown)的信件。必須等到查出IP位址131.215.131.131之後,Email軟體才會真正把你的電子信件打包成一或多個封包(依信件長短和封包大小限制而定),附上你和朋友的IP位址,然後透過網路連線把封包傳送出去。IP位址必須向主管單位申請方能取得,申請IP位址時需一併登記網域名稱,至於主機名稱則只需在本地DNS上登載即可。任何FQDN都必須經過這樣的申請登記程序,才能在網際網路的世界裡被認可,也才可以和其它的網路節點通訊。IP位址的作用類似郵遞區號,差別之一是信封上的郵遞區號你要自行填寫,而封包上的IP位址則是由網路軟體代為填寫。差別之二是信封上有收信人地址沒郵遞區號,郵局還是會把信送達,封包上沒有IP位址保證出不了家門。 當你寄信給遠方的朋友時,不論是在中研院郵局交寄的掛號信件,或是投入郵局前郵筒的其它信件,都是由南港郵局派人收取。南港郵局收集信件之後,會將信件區分為本地[註9]或外埠,本地郵件由南港郵局直接派人投遞,而所有外埠(包括國外)信件則全數轉送台北市的郵件處理中心郵局處理。處理中心郵局將來自台北市各郵遞區的信件集中之後,會依據郵遞區號或收信人地區將郵件分類、打包。打包之後的郵件,台北市的郵件直接以郵車分送各區郵局,市外郵件則藉助各種交通工具分別送往各個區域中心郵局或國外。所謂區域中心郵局係指郵遞區號尾數為0的郵局,例如南投縣各鄉鎮當中只有南投郵局的郵遞區號尾數為0,因此寄往南投縣各鄉鎮的郵件全數送往南投郵局。區域中心郵局收到郵包之後,屬當地者直接派郵差投遞,非當地者則再分送各鄉鎮郵局,由鄉鎮郵局負責投遞。封包在網路裡的傳送過程與此類似,只是寄信人和收信人換成電腦,載送郵件的交通工具改為網路連線,而郵局的角色則是由“路由器”(router)扮演。 接續前述電子信件的例子,封包從你的PC經院區網路傳送到本院的路由器。本院路由器裡建有一組“通路表”(routing table),記載了通往全球各個網域的通路。路由器收到封包之後,會先儲存起來,再從通路表裡找出IP位址131.215.131.131的最優先通路WorldNet,接著把封包傳送給下一站WorldNet的路由器。必須等到WorldNet回覆封包安然抵達之後,本院路由器才會把封包清除掉。如果WorldNet超過預定時間沒有回音,本院路由器會重送封包。萬一接連多次傳送失敗,路由器會再從通路表找出第二條通路,依此類推,直到封包傳送出去或是遍試所有通路都不成功為止。若是最後者,你就會收到「信件無法寄出」的回信。下一站的路由器也是以相同做法將封包一路傳送下去,直到封包送抵收信端為止。最後,收信端的電腦cs.caltech.edu會檢查是否有abc這個使用者帳號,若有則將電子信件存入該帳號的電子信件檔,否則你會收到對方電腦「查無此人」(user unknown)的回信。其它網路作業(包括http、telnet、ftp等)的封包遞送過程,也全都相同。這就是“封包交換”,有時候又稱為“存轉作業”(store and forward)。路由器不只是存轉封包而已,遇到封包長度超過送出端網路連線的封包大小限制時,還得把封包裡的資料拿出來,進一步分割成適當大小、重新打包成幾個封包才傳送出去。例如,封包從Ethernet(封包長度≦1,500Byte)傳送進來而要經T1(封包長度≦763Byte)傳送出去時,就必須這麼做。 路由器通常會在通路表中設定一個“最後通路”(default gateway),當某些封包的收件端IP位址在通路表中遍尋不到可傳送的通路時,路由器就會把這些封包經由最後通路傳送出去。不過本院路由器並沒有設定最後通路,因此傳送進來的封包一旦查不到可送出的通路時,路由器就會回信對方「查無此地址」。目前在網際網路上的節點數多達千萬以上,節點彼此間的通路總數,可想而知非常龐大。這麼多通路當中,經常會有些通路因為電腦或路由器當機而發生「此路不通」現象,或是網路上新增節點而跟隨著產生新的通路,因此路由器裡的通路表必須隨時更新,以掌握最新的網路交通動態,據估計全世界每天的通路更新超過五千萬次。更新通路的資訊來自兩方面,最直接的來源就是路由器本身發現某個通路不通或壅塞,因而改變相關目標網域的通路或調整通路的優先次序,另一個來源則是和伙伴網域交換通路更新資訊。網際網路是由全世界超過一萬個自治網域(autonomous zone)所組成的,本院網路(ASNet)、TANet、HiNet和SeedNet是台灣四個主要的自治網域。當封包在自治網域內傳送時,如同信件在國境內遞送般的沒有限制。但是跨自治網域的封包,就有如寄往國外的郵件一般,需要特別處理。如果兩國的郵政單位簽有郵務協議,當然可以直接通郵,否則就必須經由第三國遞送郵件。自治網域間的關係也是如此,當兩個自治網域簽約,同意互相接受並轉送對方的封包和彼此交換通路更新資訊時,就成為“伙伴網域”。換句話說,各個自治網域只接受來自伙伴網域的封包,而且封包也只能傳送往伙伴網域。本院路由器的通路表已經完整記錄所有伙伴網域所能接受和處理的IP位址,任何通路表中未記載的IP位址都無法傳送出去,因此設定最後通路變成沒有意義,這正是本院路由器的通路表不設最後通路的理由。 如果不壅塞的話,網路可說是相當的便捷、可靠。舉例來說,大家幾乎不會收到斷簡殘篇的電子信件,幾乎不會看到殘缺不全的WWW網頁,下載檔案也不用擔心檔案內容有錯或是不完整。這是因為TCP(Transmission Control Protocol)規範了一套極為嚴謹的機制,藉以防止資料錯誤和封包遺失。簡單的說,所有的TCP封包都是「雙掛號」外帶「信件檢查」的。雙掛號機制有二,首先是逐站進行的「回執作業」:當某個網路節點送出封包之後,必須把封包保留一段時間,等候下一站節點送回封包正確送達的訊息封包(相當於「回執」),如果時限內沒收到對方的回執,會自動重送封包,重送次數由網路軟體決定。其次是寄件端與收件端的回執作業:寄件端電腦的網路軟體會保留封包更長久的時間,等待收件端電腦的回執。TCP的信件檢查主要包括:封包內容是否錯誤,以及有無遺失封包兩項。封包在儲存、複製過程中,以及在網路連線的傳送過程中,都可能因為電訊干擾或電路的短暫瑕疵而產生某幾個bit錯誤。電腦或路由器可藉由檢查和(check sum)、同位檢測(parity check)等技術發現任何bit錯誤,一旦發現封包內容有錯,就會通知上一站節點重送封包。至於是否遺失封包,則是由收件端電腦逐一檢查封包序號是否連續,若有跳號即通知寄件端重送遺失的封包。IP的多重通路機制和TCP的錯誤防止機制互相配合,正是網路通訊品質的最重要保證。除了錯誤防止機制之外,TCP還能指示封包的性質,類似郵件標示包裹、快捷、存證信函等。TCP規定了一個名為port number的欄位以表示網路服務的種類,例如21表示ftp封包、23為telnet封包、25為Email封包、80為http封包等。收件端的TCP/IP軟體收到封包後,會依據port number的值將封包送給負責該項服務軟體,完成整個網路作業。 尋找通路和確保封包安全送達,雖是網路的基本功能,但已經是相當複雜的專門學問與技術,本文只簡單的做個入門式的粗淺介紹,希望能讓大家對於網路如何運作有個初步的認識。 附註:
|