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