tcp/ip( transmission control protocol/internet protocol),顧名思義,就是傳輸控制協議/網際協議。它是網際網路的通訊協議,是對計算機必須遵守的規則的描述,只有遵守這些規則,計算機之間才能進行通訊。tcp/ip的工作原理,就是乙個主機的資料要經過哪些過程才能傳送到對方的主機上。 (圖1)
tcp/ip 協議採用4層結構,分別是應用層、傳輸層、網路層和鏈路層, (圖2)
每一層都呼叫它的下一層所提供的協議來完成自己的需求。
(圖3)
眾所周知,接入網路的裝置都必須安裝網路介面卡(網絡卡)。資料報必須是從一塊網絡卡傳送到另一塊網絡卡。
網絡卡位址即資料報的傳送和接收位址。有了mac位址以後,乙太網廣播資料報給該子網內所有主機,子網內每台主機在接收到這個包以後,都會讀取首部裡的目標mac位址,然後和自己的mac位址進行比對:如果相同就做下一步處理,如果不同,就丟棄這個包。
應用層
是最高層,為各種應用程式提供服務來保證通訊。(即為應用程式提供通訊服務的各種協議(應用服務元素)。
傳輸層
分割並且組裝上層提供的資料流,並且為它們提供從 端 到 端 的傳輸服務。
那麼它是怎麼區分不同應用程式的資料流的呢?
我們用埠號抽象表達應用程式和服務程式給它識別。
所以說,ip位址和埠號用來唯一地確定網路上資料的目的地。
網路層
ip協議
網路層引入了ip協議,制定了一套新位址(網路位址,也就是所謂的ip位址)。這樣做是為了讓我們能夠區分兩台主機是否同屬乙個網路。
為了判斷ip位址中的網路位址,ip協議還引入了子網掩碼,ip位址和子網掩碼通過按位與運算後就可以得到網路位址。
(圖4)
arp協議
arp,位址解析協議,是根據ip位址獲取mac位址的乙個網路層協議。
它發起請求資料報後進行圖3基本操作。
arp接收返回訊息,以此確定目標機的mac位址;與此同時,返回的mac位址與對應的ip位址存入本機arp快取,並保留一定時間,以便下次請求時可以直接查詢arp快取,節約資源。
icmp協議
ip協議並不可靠(它不保證資料被送達),故保證資料送達的工作應該由其他的模組來完成。
其中乙個重要的模組就是icmp(網路控制報文)協議。icmp是ip層的協議。當傳送ip資料報發生錯誤,icmp協議將會把錯誤資訊封包,然後傳送回給主機,給主機乙個處理錯誤的機會。
鏈路層
鏈路層的主要工作就是對電訊號進行分組並形成具有特定意義的資料幀,然後以廣播的形式通過物理介質傳送給接收
tcp通訊過程包括三個步驟:建立tcp連線通道,傳輸資料,斷開tcp連線通道。
(圖5)
用三次握手(three-way handshake)來建立tcp連線。
需要客戶端和服務端總共傳送3個包以確認連線的建立。
在socket程式設計中,這一過程由客戶端執行connect來觸發,整個流程如下圖所示:
第一次握手
:client將標誌位syn置為1,隨機產生乙個值seq=j,並將該資料報傳送給server,client進入syn_sent狀態,等待server確認。
第二次握手
:server收到資料報後由標誌位syn=1知道client請求建立連線,server將標誌位syn和ack都置為1,ack=j+1,隨機產生乙個值seq=k,並將該資料報傳送給client以確認連線請求,server進入syn_rcvd狀態。
第三次握手
:client收到確認後,檢查ack是否為j+1,ack是否為1,如果正確則將標誌位ack置為1,ack=k+1,並將該資料報傳送給server,server檢查ack是否為k+1,ack是否為1,如果正確則連線建立成功,client和server進入established狀態,完成三次握手,隨後client與server之間可以開始傳輸資料了。
第一次揮手
:主動關閉方傳送乙個fin,用來關閉主動方到被動關閉方的資料傳送,也就是主動關閉方告訴被動關閉方:我已經不會再給你發資料了(當然,在fin包之前傳送出去的資料,如果沒有收到對應的ack確認報文,主動關閉方依然會重發這些資料),但此時主動關閉方還可以接受資料。
第二次揮手
:被動關閉方收到fin包後,傳送乙個ack給對方,確認序號為收到序號+1(與syn相同,乙個fin占用乙個序號)。
第三次揮手
:被動關閉方傳送乙個fin,用來關閉被動關閉方到主動關閉方的資料傳送,也就是告訴主動關閉方,我的資料也傳送完了,不會再給你發資料了。
第四次揮手
:主動關閉方收到fin後,傳送乙個ack給被動關閉方,確認序號為收到序號+1,至此,完成四次揮手。
匿名函式 我的整理和理解
匿名函式的執行環境具有全域性性 匿名函式為什麼指向window,我自己的理解是 function的原型指向function,function初始是全域性的,如果function沒指向固定的某個物件,則指向了function,所以匿名函式裡面的this指向window 匿名函式是乙個沒有指標的全域性變...
對TCP IP和HTTP的理解
ip協議對應於網路層,tcp協議對應於傳輸層,而http協議對應於應用層。tpc ip協議是傳輸層協議,主要解決資料如何在網路中傳輸,而http是應用層協議,主要解決如何包裝資料。實際上socket是對tcp ip協議的封裝,socket本身並不是協議,而是乙個呼叫介面 api 有個比較形象的描述 ...
關於tcp ip的理解
關於tcp ip的深入理解是學習埠 socket程式設計重要依據。介面層 根據目標mac位址 實現網路內部的資料傳輸。網路層 根據目標ip位址 通過更改mac位址,實現網路間的資料通訊。通過介面層和網路層的作用,網際網路上的2臺主機連線上了。應用層 用來產出傳輸的資料。傳輸層 用埠號來標識網路上主機...