由於專案需要,基於socket寫了乙個伺服器與客戶端的程式,越寫越體會到tcp協議的厲害之處,因此特地學習了一下,做下筆記
tcp俗稱傳輸控制協議,它是為應用層提供服務的,儘管tcp和udp都使用相同的網路層(ip),tcp卻向應用層提供與udp完全不同的服務,tcp提供一種面向連線的,可靠的位元組流而服務
面向連線意味著兩個都使用tcp的應用(通常是乙個客戶和乙個伺服器)在彼此交換資料之前必須先建立乙個tcp連線.這一過程與打**很相似,顯示撥號振鈴,等待對方接通說"喂",然後才說明是誰,以及當一方通訊結束後斷開連線也是如此
tcp通過下列方式來提供可靠性:
應用資料被分割成tcp認為最適合傳送的資料塊
當tcp發出乙個段之後,它啟動乙個定時器,等待目的端確認收到這個報文段,如果不能及時收到乙個確認,將重發這個報文段
當tcp收到發自tcp連線另一端的資料,他將傳送乙個確認,這個確認不是立即傳送,通常將推遲幾分之一秒
tcp將保持它首部和資料的檢驗和,這是乙個端到端的檢驗和,目的是檢測資料在傳輸過程中的任何變化,如果收到段的檢驗和有差錯,tcp將丟棄這個報文段和不確認收到此報文段(希望傳送端超時並重發)
既然tcp報文段作為ip資料報來傳輸,而ip資料報的到達可能會失序,因此tcp報文段的到達也可能會失序,如果必要,tcp將會對收到的資料進行重新排序,將受到的資料以正確的順序交給應用層
既然tcp資料報會發生重複,tcp的接收端必須丟棄重複的資料
tcp還能提供流量控制,tcp連線的每乙個都有固定大小的緩衝空間,tcp的接收端只允許另一端傳送自己接受緩衝區所能接納的資料,浙江防止較快主機致使較慢主機的緩衝區溢位
tcp對位元組流的內容不作任何解釋,tcp不知道傳輸的資料字節流是二進位制資料還是ascii字元或者其他型別資料,對位元組流的解釋由tcp連線雙方的應用程式解釋,這種對位元組流的處理方式與unix作業系統對檔案的處理方式很相似,unix核心對乙個應用讀或寫的內容不作任何解釋,而是交給應用程式處理,對unix的內個來說它無法區分乙個二進位制檔案與乙個文字檔案
小結一下:
tcp提供了一種可靠的面向連線的位元組流運輸層服務
tcp將使用者資料打包構成報文段;它傳送資料後啟動乙個定時器;另一端對收到的資料進行確認,對收到的資料重新排序,丟棄重複資料;tcp提供端到端的流量,並計算和驗證乙個強制性的端到端檢驗和
TCP的服務簡單介紹
1 引言 儘管t c p和u d p都使用相同的網路層 i p t c p卻向應用層提供與u d p完全不同的服務。t c p提供一種面向連線的 可靠的位元組流服務。面向連線意味著兩個使用 t c p的應用 通常是乙個客戶和乙個伺服器 在彼此交換資料 之前必須先建立乙個 t c p連線。這一過程與打...
TCP超時和重傳的簡單介紹
本人剛學不久水平有限,如有錯誤,萬望指出。1.tcp為什麼需要超時和重傳 這是因為tcp協議是一種可靠資料傳輸服務,而實現這一點的正是tcp的超時和重傳功能。也是因為網路層和鏈路層不實現可靠資料傳輸服務,只能依靠傳輸層或應用層來實現可靠資料傳輸服務。2.超時重傳和快速重傳 tcp在傳送資料時會設定乙...
TCP 簡單記錄
tcp 是面向連線的協議,可靠地,基於位元組流的傳輸層通訊協議 可靠性 滑動視窗協議,定時器 nagle為了避免傳送過多的小資料塊,傳送資料時如果資料的的大小沒有達到mss,並且連線上有資料還沒有ack,則不允許此次傳送。或者資料報在本地等待超過200ms時仍然沒有達到mss則立即傳送,可以理解為用...