前面複習了一遍五層網路模型及一些相關的協議,了解了網路通訊的大致樣子
網路通訊協議(1)網路通訊
tcp協議
seq、ack
重傳機制
三次握手
四次揮手
總結傳輸控制協議(tcp,transmission control protocol)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議
tcp協議的主要功能是完成對資料報的確認、流量控制和網路擁塞;自動檢測資料報,並提供錯誤重發的功能;將多條路徑傳送的資料報按照原來的順序進行排列,並對重複資料進行擇取;控制超時重發,自動調整超時值;提供自動恢復丟失資料的功能
tcp/ip協議族的一些歷史:
技術往事:改變世界的tcp/ip協議
網際網路的快速發展基本是基於tcp/ip協議族
2015世界網際網路連線圖(基於真實的世界網際網路真實路由節點繪製出來的):
tcp資料報放在ip資料裡,ip資料報又放在乙太網資料幀中
tcp傳輸實體接受本地程序的使用者資料流,將它們分割成不超過64kb(幀1522位元組,其中標頭22位元組,ip標頭最少20位元組,tcp標頭最少20位元組,最後data段最多1460位元組,實際還要少)
對於使用者程式傳送的資料流,通常超過1460位元組,即要切割成段,分不同的資料幀傳送,就需要編號seq
seqtcp 資料報的編號(seq):第乙個包的編號seq是隨機的,後面的編號是 編號+負載長度
每個資料報都包含本包的編號及下乙個資料報的編號
當前包編號為45943,下乙個包編號為46183,可知包的負載為240位元組
當對方接受了tcp資料報,作業系統就會根據seq組裝,傳輸層僅負責組裝,檔案的資訊由應用層規定,例http協議的content-length規定資訊的大小,組裝好資料報就傳送給應用程式,tcp資料報中有埠引數(port),交給指定程式
ack(acknowledgement):確認訊息
現實中常說的丟包就是傳輸層的事
伺服器傳送的資料報常因為速度問題、線路問題導致丟包
慢啟動:開始的時候,傳送得較慢,然後根據丟包的情況,調整速率:如果不丟包,就加快傳送速度;如果丟包,就降低傳送速度
client與server通訊:
ack 攜帶兩個資訊:
client每次傳送資訊:seq num資料報編號,length資料報大小
server傳送確認資訊:ack num期待下乙個包的編號,window接收視窗大小
tcp是全雙工通道,可能收發資訊是同時的,ack只是幾個簡單字段,通常和資料放一起
1:左機傳送編號為1,長度為100位元的資料報,並請求編號為1的資料報
2:右機接收訊息,傳送編號為1長度為200位元的資料報,並請求編號為101的資料報
。。。tcp是可靠的通訊,有自己的處理丟包的機制:重傳機制
超時重傳機制
每當傳送乙個資料報時,就啟動乙個定時器, 而定時器溢位了,傳送方還沒接收到接收方返回的ack時,確定重傳
seq與ack是以位元組為單位,即需要連續的包,如果中間丟了包,接收方就會重**出丟包的ack請求
缺陷:接收方會死等資料報11,對於後面接收的包即使收到了,傳送方也可能無法確認,導致超過rto即會重複的傳送包(而等待rto的時間也會浪費)
快速重傳機制
因為超時重傳機制的缺陷,tcp引進了fast retransmit 的演算法,不以時間驅動,而以資料驅動重傳,即快速重傳機制
快速重傳機制是傳送方在接收端的反饋資訊後引發重傳,而不是定時器超時重傳。快速重傳機制要求當接收到失序報文段時,tcp需要立即生成確認資訊(重複ack),並且失序情況表明在後續資料到達前出現了丟包,傳送端的工作即為盡快填補丟包帶來的資料段空缺
與超時重傳的區別在與沒有了rto,接收到丟包資訊就立刻重傳,但和超時重傳一樣,可能會出現不知道後續的包接收端有沒有接收到(實際上有些tcp確實會重新傳送後面的包)
sack選項
selective acknowledgment (sack),在tcp頭裡加乙個sack,ack還是fast retransmit的ack,sack則是匯報收到的資料碎版
這樣傳送端就知道哪些資料到了哪些沒到
對於sack的使用:
tcp 選擇性應答的效能權衡
tcp為了準確的將資料報傳送到目的地,tcp協議採用三次握手策略建立連線
client傳送syn(seq=x)連線請求給伺服器,進入syn_send狀態
server接收到syn資料報,回應乙個syn(seq=y)、ack(ack=x+1)資料報,進入syn_recv狀態
client接收到syn資料報,回應ack(ack=y+1)資料報,然後就可以傳資料了
三次握手連線策略可以防止很多錯誤連線
終止連線需要四次揮手,由tcp的半關閉(half-close)造成的
(1) client首先呼叫close,稱該端執行「主動關閉」(active close)。該端的tcp於是傳送乙個fin分節,表示資料傳送完畢,client進入fin_wait_1狀態
(2) server接收到這個fin資料報,對端執行 「被動關閉」(passive close),這個fin由tcp確認。server收到fin後,傳送乙個ack給client,確認序號為收到序號+1(與syn相同,乙個fin占用乙個序號),server進入close_wait狀態
注意:fin的接收也作為乙個檔案結束符(end-of-file)傳遞給接收端應用程序,放在已排隊等候該應用程序接收的任何其他資料之後,因為,fin的接收意味著接收端應用程序在相應連線上再無額外資料可接收。
(3) 接收到這個檔案結束符的應用程序將呼叫close關閉它的套接字,server傳送乙個fin,用來關閉server到client的資料傳送,server進入last_ack狀態。
(4) client收到fin後,client進入time_wait狀態,接著傳送乙個ack給server,確認序號為收到序號+1,server進入closed狀態,完成四次揮手
當然,client或者server都可以主動提出關閉連線
網路通訊協議
網路協議是構成網路的基本元件之一,協議是若干規則和協定的組合,一般指機器1的第n 層與機器2的第 n層的對話,這種對話中所使用的若干規則和約束便稱為第 n層網路協議。tcp ip 網路體系結構模型就是遵循 tcp ip 協議進行通訊的一種分層體系,現今,internet 和intranet 所使用的...
網路通訊協議
通過計算機網路可以使多台計算機實現連線,位於同乙個網路中的計算機在進行連線和通訊時需要遵守一定的規則,這就好比在道路中行駛的汽車一定要遵守交通規則一樣。在計算機網路中,這些連線和通訊的規則被稱為網路通訊協議,它對資料的傳輸格式 傳輸速率 傳輸步驟等做了統一規定,通訊雙方必須同時遵守才能完成資料交換。...
網路通訊協議
一 osi模型 名稱 層次 功能 物理層 1 實現計算機系統與網路間的物理連線 資料鏈路層 2 進行資料打包與解包,形成資訊幀 網路層 3 提供資料通過的路由 傳輸層 4 提供傳輸順序資訊與響應 會話層 5 建立和中止連線 表示層 6 資料轉換 確認資料格式 應用層 7 提供使用者程式介面 二 協議...