JAVA基礎知識|TCP/IP協議


雖然寫代碼也有一定的年頭了,但是對於一些基礎概念,還是很模糊。這在后來的學習過程中,帶來了很大的痛苦,所以痛定思痛,決心重新學習這些概念。並把自己的理解和查詢的資料做一些整合,便於以后查閱!

一、什么是TCP/IP?

TCP/IP協議是一個協議集合,包括我們常見的HTTP協議、IP協議、TCP協議、DNS協議等,都屬於TCP/IP協議。

要想知道TCP/IP是什么,我們首先要知道為什么要有這個協議?拿一個生活中簡單的例子來說,如果我們想做一個櫃子,那我們就要告訴木匠,櫃子要多高、多寬、多長,樣式是什么樣的、材質是什么樣的等等,這樣最后做出的櫃子才能和我們想要的櫃子一致,那么這些規則就可以理解為一種口頭協議。同樣的,兩台電腦想要在全球億萬台計算機中完成准確、無誤的通信,大量的協議支持是必不可少的。

TCP/IP協議中有一個重要的概念是分層,每個層級完成不同的功能。TCP/IP協議按照層次分為以下四層:應用層、傳輸層、網絡層、數據鏈路層。為什么要分層?分層的目的就是為了層級之間的功能相對獨立,互不影響。

                    

 TCP/IP通信數據流

                             

二、HTTP、TCP、IP、DNS協議

2.1、HTTP協議(HyperText Transfer Protocol),超文本傳輸協議

HTTP 是基於 TCP/IP 協議的應用層協議。它不涉及數據包(packet)傳輸,主要規定了客戶端和服務器之間的通信格式,默認使用80端口。

請查看JAVA基礎知識|IP協議

2.2、IP協議(Internet protocol)

IP協議的作用在於把各種數據包准確無誤的傳遞給對方,其中兩個重要的條件是IP地址,和MAC地址。由於IP地址是稀有資源,不可能每個人都擁有一個IP地址,所以我們通常的IP地址是路由器給我們生成的IP地址,路由器里面會記錄我們的MAC地址。而MAC地址是全球唯一的,除去人為因素外不可能重復。

IP實現兩個基本功能:尋址和分段

尋址功能就是在源地址與目標地址之間建立連接,這個過程需要使用ARP協議(Address Resolution Protocol)。舉一個現實生活中的例子,如果你想從北京的家里到上海迪士尼樂園玩,那么首先你需要走到地鐵站,然后坐車到高鐵站,再坐高鐵到上海火車站,然后再轉地鐵到上海迪士尼樂園。IP協議完成的工作就是在兩台電腦之間找到一條這樣的路徑,從而完成數據的交互。

地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取物理地址的一個TCP/IP協議。IP 間的通信依賴 MAC 地址。在網絡上,通信的雙方在同一局域網(LAN)內的情況是很少的,通常是經過多台計算機和網絡設備中轉才能連接到對方。而在進行中轉時,會利用下一站中轉設備的 MAC 地址來搜索下一個中轉目標。這時,會采用 ARP 協議,並根據通信方的 IP 地址就可以反查出對應的 MAC 地址,從而進行精確定位,完成尋址的功能。

分段功能是為了適應不同網絡對包大小的要求,對數據進行重新組裝。

以下是圖示:

                            

2.3、TCP協議(Transmission Control Protocol),傳輸控制協議

如果說IP協議是找到對方的詳細地址。那么TCP協議就是安全的把東西帶給對方。各有分工,互不沖突。

      按層次分,TCP屬於傳輸層,提供可靠的字節流服務。什么叫字節流服務呢?這個名字聽起來讓人不知所以然,下面聽下我通俗的解釋。所謂的字節流,其實就類似於信息切割。比如你是一個賣自行車的,你要去送貨。安裝好的自行車,太過龐大,又不穩定,容易損傷。不如直接把自行車拆開來,每個零件上都貼上收貨人的姓名。最后送到后按照把屬於同一個人的自行車再組裝起來,這個拆解、運輸、拼裝的過程其實就是TCP字節流的過程。

     我們看下嚴謹的學術表達是怎樣的:

     所謂的字節流服務(Byte Stream Service)是指,為了方便傳輸,將大塊數據分割成以報文段(segment)為單位的數據包進行管理。而可靠的傳輸服務是指,能夠把數據准確可靠地傳給對方。一言以蔽之,TCP 協議為了更容易傳送大數據才把數據分割,而且 TCP 協議能夠確認數據最終是否送達到對方。

     為了確保信息能夠確保准確無誤的到達,TCP采用了著名的三次握手策略(three-way handshaking)。

 

TCP在建立連接的時候需要三次握手,在關閉連接的時候,還需要四次揮手。

為什么要三次握手,四次揮手?

最重要的原因當然是為了連接的安全可靠,因為可能由於網絡延遲等緣故,第一次握手時,在時間已經超時后客戶端的syn才到達服務器端;這個時候盡管客戶端知道已經超時失效了,而服務器端還不知道,以為是剛剛發過來的,會回復一個ACK,統一建立連接。如果不采用三次握手,則此時服務器端發出確認后,連接就正式建立,但是因為客戶端並沒有發出建立連接的請求,也就不會回應服務器端的ACK,也不會向服務器端發數據。所以服務器端就會一直處於等待狀態,浪費了大量的資源。采用三次握手后,由於服務器向客戶端發了SYN后得不到確認,就知道客戶端並沒有要求建立連接。

關於斷開時需要采用的四次揮手,過程和三次握手比較類似,就是在客戶端第一次發關閉連接的FIN時,服務器端先發送ACK確認已經收到,然后等服務器自身完成之前所有報文發送后,再向客戶端發送FIN,告知可以關閉了,最后客戶端收到后再向服務器端發送一個ACK進行關閉。

2.4、DNS協議(Domain names System)

和HTTP協議一樣是處於應用層的服務,提供域名到IP地址之間的解析服務。

互聯網之間是通過IP地址通信的,但是IP地址並不符合認得記憶習慣,人喜歡記憶有意義的字詞。所以DNS服務就為了解決這個問題而生了。其實很好理解,形如我們電腦中host文件。

192.168.1.11       roverliang.com  

當我們訪問roverliang.com 的時候,電腦便不會去外網服務器上查詢了,直接去訪問192.168.1.111。這是一個簡單的域名劫持,足以說明DNS的涵義了。

下面是我們訪問一個網頁,各種協議在里面起的作用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM