Android網路程式設計(二) TCP IP協議詳解

2021-10-04 23:10:22 字數 3079 閱讀 3066

tcp/ip(transmission control protocol/internet protocol,傳輸控制協議/網際協議)是指能夠在多個不同網路間實現資訊傳輸的協議簇。tcp/ip協議不僅僅指的是tcp 和ip兩個協議,而是指乙個由ftp、smtp、tcp、udp、ip等協議構成的協議簇, 只是因為在tcp/ip協議中tcp協議和ip協議最具代表性,所以被稱為tcp/ip協議。

tcp/ip協議是internet最基本的協議,其中應用層的主要協議有telnet、ftp、smtp等,是用來接收來自傳輸層的資料或者按不同應用要求與方式將資料傳輸至傳輸層;傳輸層的主要協議有udp、tcp,是使用者使用平台和計算機資訊網內部資料結合的通道,可以實現資料傳輸與資料共享;網路層的主要協議有icmp、ip、igmp,主要負責網路中資料報的傳送等;而網路訪問層,也叫網路介面層或資料鏈路層,主要協議有arp、rarp,主要功能是提供鏈路管理錯誤檢測、對不同通訊媒介有關資訊細節問題進行有效處理等。

tcp/ip模型與osi模型各層的對照關係:

關於osi模型可以參考android網路程式設計:網路基礎知識

tcp/ip協議族按照層次由上到下,層層包裝。最上面的是應用層,這裡面有http,ftp,等等我們熟悉的協議。而第二層則是傳輸層,著名的tcp和udp協議就在這個層次。第三層是網路層,ip協議就在這裡,它負責對資料加上ip位址和其他的資料以確定傳輸的目標。第四層是資料鏈路層,這個層次為待傳送的資料加入乙個乙太網協議頭,並進行crc編碼,為最後的資料傳輸做準備。

物理層負責0、1位元流與物理裝置電壓高低、光的閃滅之間的互換。 資料鏈路層負責將0、1序列劃分為資料幀從乙個節點傳輸到臨近的另乙個節點,這些節點是通過mac來唯一標識的(mac,實體地址,乙個主機會有乙個mac位址)。

ip協議是tcp/ip協議的核心,所有的tcp,udp,imcp,igmp的資料都以ip資料格式傳輸。要注意的是,ip不是可靠的協議,這是說,ip協議沒有提供一種資料未傳達以後的處理機制,這被認為是上層協議:tcp或udp要做的事情。

ip所提供的服務大致可歸納為兩類:

1.1、ip資訊包傳送

ip是網路之間資訊傳送的協議,可將ip資訊包從源裝置(例如使用者的計算機)傳送到目的裝置(例如某部門的www伺服器)。為了達到這樣的目的,ip必須依賴ip位址ip路由器兩種機制來實現。

1.1.1、ip位址

ip規定網路上所有的裝置都必須有乙個獨一無二的ip位址,就好比是郵件上都必須註明收件人位址,郵遞員才能將郵件送到。同理,每個ip資訊包都必須包含有目的裝置的ip位址,資訊包才可以正確地送到目的地。同一裝置不可以擁有多個ip位址,所有使用ip的網路裝置至少有乙個唯一的ip位址。

1.1.2、ip路由

網際網路是由許多個網路連線所形成的大型網路。如果要在網際網路中傳送ip資訊包,除了確保網路上每個裝置都有乙個唯一的ip位址之外,網路之間還必須有傳送的機制,才能將ip資訊包通過乙個個的網路傳送到目的地。此種傳送機制稱為ip路由。 [2]

各個網路通過路由器相互連線。路由器的功能是為ip資訊包選擇傳送的路徑。換言之,必須依靠沿途各路由器的通力合作,才能將ip資訊包送到目的地。在ip路由的過程中,由路由器負責選擇路徑,ip資訊包則是被傳送的物件。

1.2、ip資訊包的分割與重組

為了能把乙個ip報文放在不同的物理幀中,最大ip報文的長度就只能等於這條路徑上所有物理網路的mtu的最小值。當資料報通過乙個可以傳輸長度更大的幀的網路時,把資料報的大小限制在網際網路上最小的mtu之下不經濟;如果資料報的長度超過網際網路中最小的mtu值的話,則當該資料報在穿越該子網時,就無法被封裝在乙個幀中。

ip協議在傳送ip報文時,一般選擇乙個合適的初始長度。如果這個報文要經歷的中間物理網路的mtu值比ip報文長度要小,則ip協議把這個報文的資料部分分割成若干個較小的資料片,組成較小的報文,然後放到物理幀中去傳送。每個小的報文稱為乙個分段。分段的動作一般在路由器上進行。如果路由器從某個網路介面收到了乙個ip報文,要向另外乙個網路**,而該網路的mtu比ip報文長度要小,那麼就要把該ip報文分成多個小ip分段後再分別傳送。

重組是分段的逆過程,把若干個ip分段重新組合後還原為原來的ip報文。在目的端收到乙個ip報文時,可以根據其分段偏移和mf標誌位來判斷它是否是乙個分段。如果mf位是0,並且分段偏移為0,則表明這是乙個完整的ip資料報。否則,如果分段偏移不為0,或者mf標誌位為1,則表明它是乙個分段。這時目的地端需要實行分段重組。ip協議根據ip報文頭中的識別符號欄位的值來確定哪些分段屬於同乙個原始報文,根據分段偏移來確定分段在原始報文中的位置。如果乙個ip資料報的所有分段都正確地到達目的地,則把它重新組織成乙個完整的報文後交給上層協議去處理。

arp 是根據ip位址獲取mac位址的一種協議。

arp(位址解析)協議是一種解析協議,本來主機是完全不知道這個ip對應的是哪個主機的哪個介面,當主機要傳送乙個ip包的時候,會首先查一下自己的arp快取記憶體(就是乙個ip-mac位址對應表快取)。

如果查詢的ip-mac值對不存在,那麼主機就向網路傳送乙個arp協議廣播包,這個廣播包裡面就有待查詢的ip位址,而直接收到這份廣播的包的所有主機都會查詢自己的ip位址,如果收到廣播包的某乙個主機發現自己符合條件,那麼就準備好乙個包含自己的mac位址的arp包傳送給傳送arp廣播的主機。

而廣播主機拿到arp包後會更新自己的arp快取(就是存放ip-mac對應表的地方)。傳送廣播的主機就會用新的arp快取資料準備好資料鏈路層的的資料報傳送工作。

rarp協議的工作與此相反,不做贅述。

android網路程式設計(一):網路基礎知識

android網路程式設計(三):tcp、udp協議

目錄:android網路程式設計系統性學習目錄

Android網路程式設計(二)HttpClient

1 httpget 請求包 獲取請求行物件 構造乙個預設的 httpclient 客戶端物件 定義乙個 httpresponse 響應物件 定義乙個 httpentity 響應內容實體 10 inputstream is null 11 12try 1332 獲取到的內容轉換成 gbk 編碼 33 ...

Android網路程式設計基礎 二

android學習筆記,整理給自己複習的時候看的,謝謝!android端的預設編碼是utf 8 一般在公司開發客戶端和服務端的編碼要保持一致。做url請求時需要對引數進行urlencode編碼.url url new url http 169.254.248.190 8080 jokerjohn s...

python網路程式設計 二 使用TCP

1.建立socket 對於乙個客戶端程式來說,建立乙個socket需要兩個步驟。首先,您需要建立乙個實際的socket物件。其次,您需要把它連線到遠端伺服器上。協議家族則定義資料如何被傳輸,通訊型別基本上都是 af inet 和ipv4對應 協議家族表示tcp通訊的sock stream和表示udp...