筆記
Java Network Programming 筆記
n5
一 網路基本概念
Chapter2 Basic Network Concepts
2.1 Networks
keywords: network, node, host, address, name, packet-switched, protocol
網路是可以或多或少即時地相互發送和接收資料的電腦和其他裝置的集合。
網路上的每台機器被稱作結點(node),大多數結點是電腦,但是印表機,路由器,橋,網關,啞終端和可口可樂機都可以是結點,但你通常只和其他電腦會話。
功能齊全的電腦結點被稱作主機(host)。
每個網路結點有一個地址(address):唯一標識它的一系列位元組。在不同的網路中地址分配方法同。乙太網路地址是附加在物理的乙太網路硬體上的。裝置廠商要保證這些硬體的地址不重複。一台電腦的Internet地址通常由專門負責分配地址的組織分配。而這些組織可以分配的地址又是由該組織的ISP(Internet Service Provider)提供的。ISP從三個Internet地區性登錄授權單位之一獲得IP地址(Internet Protocol地址)。比如美洲和非洲的登錄授權單位為ARIN(the American Registry for Internet Numbers)。地區性登錄授權單位的地址又是由IANA(Internet Assigned Numbers Authority)分配的。
某些種類的網路中,結點可使用人類易辨認的名字。名字和地址的對應不是不變的。名字變了,地址可不變;地址變了,名字可不變。一個地址通常可有多個名字,一個名字也可以對應多個地址(雖然這樣的情況很少)
所有現代電腦網路是包交換(packet-switched)網路。在網路上傳輸的資料被分成包,每個包都被獨立處理。每個包都含有"誰發送了我"和"我要去哪兒"的資訊。包交換的最大優點是可以同時進行很多交換,若干電腦可以共用一條電纜。
協議(protocol)是一組精確的規則集合,它定義了電腦之間如何通訊,包括:地址格式,資料如何分包等。公開發布的協議允許不同廠商的軟體和裝置相互連訊。比如web瀏覽器不用關心伺服器是Unix工作站還是Windows box或者Mac機,因為伺服器和瀏覽器都使用同樣的平台無關的http協議交談。
2.2 The Layers of a Network
標準TCP/IP四層模型:
Application Layer
Transport Layer (TCP,UDP)
InternetLayer (IP)
The Host-To-Network Layer (Ethernet,LocalTalk,FDDI...)
90%的Java網路編程處於應用程式層,只須同傳輸層對話。剩下的10%處於傳輸層,同應用程式層和網間網層對話。
應用程式層看起來是直接同其他host的應用程式層對話的,網路在兩個應用程式層之間建立了一條邏輯鏈路。
2.2.1 The Host-to-Network Layer
(也稱作link layer,data link layer, network-interface layer)
這一層定義了某個特定的網路介面,例如乙太網路卡,如何通過它的物理串連向本網或世界發送IP資料包。
物理層對Java是透明的。資料連結層對Java程式員沒有直接影響。然而,你在應用程式層發送的資料可以最佳化以適應特定的資料連結層的當地套件大小(the native packet size of a particular data link layer),這樣效能上會有所提升。不過,不最佳化程式也正常運行。
2.2.2 The Internet Layer
在OSI模型中,Internet Layer對應於更一般化的名字network layer。一個network layer協議定義bits和bytes如何組織為packets,也定義了不同機器如何找到彼此的地址方案。Internet Protocol(IP)是應用最廣泛的network layer協議,也是Java唯一理解的network layer協議。其他的network layer協議有NetWare網路上的IPX協議,Mac機上的AppleTalk協議,Windows上的NetBEUI協議。各種network layer協議對於底層是獨立的,AppleTalk,IP,IPX和NetBEUI都可以被用於乙太網路,令牌環網或使用其他資料連結層協議的網路,而這些資料連結層協議本身也是可以運行在不同種類的物理層之上的。
internet layer傳輸的包稱作datagrams,每個IP datagram包括一個20~60位元組的頭和最大65515位元組的資料。(實際上多數IP datagram非常小)
IP資料包頭的內容為:
4-bit版本號碼
4-bit頭長度
1-byte type of service
2-byte datagram長度:包括頭的長度
2-byte 標識號
3-bit flags
13-bit fragment offset
1-byte time-to-live(TTL)
1-byte protocol:TCP為6,UDP為17 (都是上一層傳輸層的協議)
2-byte 頭校正和
4-byte 源地址
4-byte 目的地址
2.2.3 The Transport Layer
傳輸層負責保證所有的包正確的被收到,順序正確,資料也正確。如果包丟失了,傳輸層要求寄件者重發丟失的包。
傳輸層有兩種協議,TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)。TCP保證包不丟失,內容和順序都正確;UDP只保證接受到的包正確,不管是否有包丟失了或到達的包順序是否正確。
2.2.4 The Application Layer
應用程式層向使用者傳送資料。下面三層一起解決了資料如何從一個電腦到達另一個;而應用程式層決定資料到達後如何處理。Java網路編程主要是在應用程式層。常見的應用程式層協議有:HTTP,SMTP,POP,FTP等。你的程式可以定義自己的應用程式層協議。
Domain Names: 網域名稱系統(DNS:Domain Name System)將主機名稱解析為數位Internet地址。Java程式使用java.net.InetAddress類