Java的產(chǎn)生與發(fā)展與網(wǎng)絡(luò)有著密切的關(guān)系。所以我們在學習java的同時,應(yīng)該對網(wǎng)絡(luò)體系結(jié)構(gòu)和網(wǎng)絡(luò)協(xié)議有一個大概的認識和了解。這樣才能有助于我們做出更好的應(yīng)用程序。
在對以下內(nèi)容進行學習之前,要求你對TCP/IP協(xié)議棧有一個簡單的了解。要知道網(wǎng)絡(luò)分層的結(jié)構(gòu);層與層之間完成相對獨立的功能;在上層產(chǎn)生的數(shù)據(jù)包,會傳遞給下層,并加上下層的數(shù)據(jù)包頭(header);上層從下層獲取數(shù)據(jù)的過程相反。圖1是TCP/IP的體系結(jié)構(gòu)圖,注意圖中對TCP/IP協(xié)議棧的協(xié)議描述并不完全。之所以會稱之為TCP/IP協(xié)議,是因為他們是這個協(xié)議棧中最為重要的兩個協(xié)議。
以下根據(jù)馬薩諸塞州大學計算機科學系Don Towsley在2004年秋季的網(wǎng)絡(luò)課程錄像中節(jié)選的一小段的內(nèi)容加以翻譯和整理。對我們用http(超文本傳輸協(xié)議)向一個web服務(wù)器發(fā)出一個GET請求時網(wǎng)絡(luò)所做的工作、以及都使用了哪些協(xié)議加以描述。如果大家對這個課程有興趣,可以在http://www-net.cs.umass.edu/cs653/下載,不過總的視頻文件大小有1.88G,網(wǎng)速慢的就不要下載了:)。
1. 用戶在web瀏覽器(如IE)地址欄輸入URL(統(tǒng)一資源定位符),比如http://www-net.cs.umass.edu/cs653/。前面的http是協(xié)議類型,后面的www-net.cs.umass.edu指被訪問的服務(wù)器的域名,沒有加冒號和端口號表示訪問的是默認的端口號80。
2. 由于所發(fā)出的數(shù)據(jù)要通過被訪問主機的IP地址進行傳輸和路由,所以要先通過DNS(域名服務(wù)器)服務(wù)器將域名解析為IP地址(假設(shè)DNS和我們的主機在一個網(wǎng)段):
a) 主機產(chǎn)生一個DNS請求;
i. 傳遞給傳輸層,通過UDP(User Datagram Protocol, 用戶數(shù)據(jù)報協(xié)議)產(chǎn)生一個UDP 報文(Segment);
ii. 傳遞給網(wǎng)絡(luò)層產(chǎn)生一個IP報文(Packet),目的地址是DNS服務(wù)器的IP地址(這個地址可能是手工設(shè)置的,也可能是通過DHCP(動態(tài)主機配置協(xié)議)協(xié)議自動獲得的);
iii. 在數(shù)據(jù)鏈路層通過ARP(Address Resolution Protocol,地址解析協(xié)議)協(xié)議得到DNS服務(wù)器的MAC(媒體訪問控制子層)地址
iv. 把數(shù)據(jù)幀(frame)通過以太網(wǎng)傳輸給DNS服務(wù)器
v. DNS服務(wù)器將收到的幀向上傳給傳輸層,得到UDP報文。通過UDP報文中指定的端口號傳給DNS應(yīng)用程序。為了表述簡單,我們假設(shè)要解析的域名在當前的DNS服務(wù)器中有相應(yīng)的表項(如果不在當?shù)兀镜?/i>DNS服務(wù)器還要向上級的DNS服務(wù)器發(fā)出DNS查詢請求,如此遞歸直到查到要解析的域名的IP地址)。
b) DNS把通過DNS應(yīng)答將得到的IP地址返回給請求的主機。(終于知道對方的IP地址了,呵呵)
3. 現(xiàn)在,瀏覽器得到對方的IP地址了?,F(xiàn)在可以發(fā)出GET請求嗎?不!
a) 首先要和對方服務(wù)器建立一個TCP(傳輸控制協(xié)議,TCP和UDP同屬傳輸層,但是TCP協(xié)議時個可靠的面向連接的協(xié)議,要比UDP復(fù)雜的多。TCP更適合要求可靠傳輸?shù)膽?yīng)用)連接。建立連接通過三次握手方法。
b) 這里和以下發(fā)送的TCP報文同樣要傳給下一層:網(wǎng)絡(luò)層。在Internet中也就是我們說的IP層。同樣的,IP層給TCP報文加上IP報頭,發(fā)送給路由器(假設(shè)我們的主機和web服務(wù)器不在同一個網(wǎng)內(nèi)),路由器根據(jù)報文中的目的IP地址決定下一跳(Next Hop)的IP地址和端口。這個決定需要查詢(lookup)它自身的路由表(而路由表的維護需要路由協(xié)議,比如OSPF(開放最短路徑優(yōu)先)等)。IP報文可能通過多個路由器的轉(zhuǎn)發(fā),終于到達了對方的服務(wù)器。再剝掉IP報頭遞交給上層。
c) 建立好了TCP連接,以后發(fā)送的數(shù)據(jù)都可以這條可靠的連接傳輸了。
4. 和WEB服務(wù)器之間的TCP連接建立成功。就可以發(fā)送GET請求啦。
5. WEB服務(wù)器收到請求,就可以將響應(yīng)信息通過剛才建立好的TCP連接送回給請求方。
6. 如果是一個html文件,瀏覽器就可以解釋并將它顯示在我們的顯示器上面了。
注意到這個過程里面的三個重要的地址:域名、IP地址和MAC地址。它們是網(wǎng)絡(luò)中不同的層,不同的協(xié)議所需要的地址。它們之間的關(guān)系有點像電話系統(tǒng)中的概念,域名對應(yīng)人名(不過域名不能重復(fù)),IP地址對應(yīng)電話號碼,MAC地址對應(yīng)程控交換機中這路電話所在的物理位置號。我們打電話首先通過人名找電話,這時電話本就像DNS一樣;然后我們拿起電話撥號,程控交換機根據(jù)你撥的號碼找到其電路所在位置(概念上);在兩部電話之間建立一個連接;然后就可以通話了。
聯(lián)系客服