計算機網路總結(二) TCP協議

2021-09-11 08:14:25 字數 1303 閱讀 7713

注意:tcp 並不能保證資料一定會被對方接收到,因為這是不可能的。

tcp 能夠做到的是,如果有可能,就把資料遞送到接收方,否則就(通過放棄重傳並且中斷連線這一手段)通知使用者。

因此準確說tcp也不是100%可靠的協議,它所能提供的是資料的可靠遞送或故障的可靠通知。

所謂三次握手(three-way handshake),是指建立乙個 tcp 連線時,需要客戶端和伺服器總共傳送3個包。

三次握手的目的是連線伺服器指定埠,建立 tcp 連線,並同步連線雙方的序列號和確認號,交換 tcp 視窗大小資訊。在 socket 程式設計中,客戶端執行connect()時。將觸發三次握手。

tcp 的連線的拆除需要傳送四個包,因此稱為四次揮手(four-way handshake),也叫做改進的三次握手。客戶端或伺服器均可主動發起揮手動作,在 socket 程式設計中,任何一方執行close()操作即可產生揮手操作。

tcp 的連線,實際上是一種純軟體層面的概念,在物理層面並沒有「連線」這種概念。tcp 通訊雙方建立互動的連線,但是並不是一直存在資料互動,有些連線會在資料互動完畢後,主動釋放連線,而有些不會。在長時間無資料互動的時間段內,互動雙方都有可能出現掉電、宕機、異常重啟等各種意外,當這些意外發生之後,這些 tcp 連線並未來得及正常釋放,在軟體層面上,連線的另一方並不知道對端的情況,它會一直維護這個連線,長時間的積累會導致非常多的半開啟連線,造成端系統資源的消耗和浪費,為了解決這個問題,在傳輸層可以利用 tcp 的 keepalive 機制實現來實現。主流的作業系統基本都在核心裡支援了這個特性。

tcp keepalive 的基本原理是,隔一段時間給連線對端傳送乙個探測包,如果收到對方回應的 ack,則認為連線還是存活的,在超過一定重試次數之後還是沒有收到對方的回應,則丟棄該 tcp 連線。

tcp-keepalive-howto 有對 tcp keepalive 特性的詳細介紹,有興趣的同學可以參考。這裡主要說一下,tcp keepalive 的侷限。首先 tcp keepalive 監測的方式是傳送乙個 probe 包,會給網路帶來額外的流量,另外 tcp keepalive 只能在核心層級監測連線的存活與否,而連線的存活不一定代表服務的可用。例如當乙個伺服器 cpu 程序伺服器占用達到 100%,已經卡死不能響應請求了,此時 tcp keepalive 依然會認為連線是存活的。因此 tcp keepalive 對於應用層程式的價值是相對較小的。需要做連線保活的應用層程式,例如 qq,往往會在應用層實現自己的心跳功能。

計算機網路 TCP協議

tcp 傳送的資料單元稱為報文段。乙個 tcp 報文段分為 tcp 首部和 tcp 資料兩部分,整個 tcp 報文段作為 ip 資料報的資料部分封裝在 ip 資料報中,如圖所示 各欄位意義如下 tcp 是面向連線的協議,因此每個 tcp 連線都有三個階段 建立連線 資料傳送和連線釋放。tcp 連線的...

計算機網路 TCP協議

tcp協議是面向連線的協議,把連線作為最基本的抽象。每一條tcp連線唯一的被通訊兩端的兩個端點所確定。tcp協議是點對點,而不是點對多點。端點又被稱為套接字,tcp協議規定,ip位址拼接埠號就構成套接字。1 可靠資料運輸原理 1 tcp協議傳送兩種資料報,一種資料報用來傳輸資料,一種資料報用來傳送控...

計算機網路TCP IP協議棧 TCP協議總結

tcp ip是乙個四層協議組成的協議族,自底而上分別是資料鏈路層 網路層 傳輸層 應用層。每一層有若干協議組成,每層完成不同功能,上層使用下層提供的服務。資料鏈路層 處理資料在物理媒介上的傳輸。網路層 實現資料報的選路和 傳輸層 為兩個主機上的應用程式提供端到端的通訊。兩個協議 tcp協議 udp協...