1. 程式人生 > >計算機網路之TCP

計算機網路之TCP

TCP是傳輸層協議,乙太網(Ethernet)規定了電子訊號如何組成資料包的,解決了子網內部的點對點協議,但是不能解決多個區域網之間的互通,這是由IP協議解決,IP協議定義了一套自己的地址規則,成為IP地址。它實現了路由功能,允許某個區域網A主機向另一個區域網B主機傳輸資訊。路由器基於IP地址,區域網之間靠路由器連線,路由器有路由表,會有一篇文章專門來說路由器。IP協議可以看作是一個地址協議,並不能保證資料包的完整性,比如資料包在快取滿的時候丟失,需要去發現哪個包,以及如何去重新發送這個包,這就是TCP協議。 TCP協議的作用 保證資料通訊的完整性和可靠性,防止丟包。 TCP資料包的編號SEQ

第一個包編號隨機數,一個數據包有兩個編號,一個是本包編號,一個是下一個包編號,差值是本包的負載長度。 TCP資料包的組裝 資料包組裝還原是依靠作業系統的,組裝好之後給應用系統。 網路層和運輸層的區別 網路層是主機之間的邏輯通訊。 運輸層是為應用程序之間提供端對端的邏輯通訊。 TCP的特點 TCP提供面向連線的服務,傳輸資料前先建立連線,資料傳輸結束後釋放連線。 使用TCP協議的各種應用和應用層協議:電子郵件(SMTP簡單郵件傳送協議),遠端終端接入(TELNET遠端終端協議),全球資訊網(HTTP超文字傳送協議),檔案傳送(FTP檔案傳送協議)。 TCP傳輸控制協議概述
a:)面向連線。 b:)每一個TCP協議只能有兩個斷點,每一條TCP協議只能是點對點的。 c:)TCP提供可靠的交付服務。(通過TCP連線傳送的資料,無差錯,不丟失,不重複,並且按順序到達) d:)提供全雙工通訊。 e:)面向位元組流。 TCP連線 TCP把連線作為最基本的抽象。(TCP有很多特點都跟著東西有關) TCP連線的埠叫做套接字或者插口。 官方定義是:埠號拼接到IP地址。 例子:ip地址是(192.3.4.5),埠號(80) 那麼套接字就是192.3.4.5:80 TCP連線是兩個套接字。 TCP連線的埠是一個很抽象的套接字。 現如今socket有很多意思
允許應用程式訪問聯網協議的應用程式設計介面API,即運輸層和應用層之間的一種介面socket API,簡稱socket。 socket API之中也有一個函式叫做socket。 可靠傳輸的原理 TCP傳送的報文是交給IP層傳送,但是IP層只能提供盡最大努力的服務,也就是說TCP下面的網路都是不可靠的。 TCP必須採取適當的措施才能使得兩個運輸層之間的通訊變得可靠。 理想的傳輸條件有兩個特點: a:傳輸通道不產生差錯 b:壺關傳送方多快傳送資料,接收方都來得及處理 然而現實生活中是不存在的,所以我們用一些可靠協議來讓傳輸條件變得貼近理想。 停止等待協議 全雙工通訊的雙方既是傳送方也是接收方。 a:)無差錯情況:傳送方傳送資料單元,等待接收方確認,接收方向傳送方傳送確認,傳送方繼續傳送下一組。 b:)出現差錯:接收方接受資料單元的時候發生了差錯,就丟失資料,接收方不傳送任何資訊。可靠傳輸協議是這麼規定的,傳送方如果一段時間沒有收到確認資訊,那麼就認為傳送的分組丟失了,從而重傳前面傳送過的資料,這就是超時重傳。 c:)確認丟失和確認遲到: 確認丟失:就是收到了,但是確認資訊沒發到傳送方,傳送方重新傳輸資料,接收方會丟棄資料但是會重傳確認。 確認遲到:就是確認資訊不知為什麼沒及時傳送到傳送方,導致傳送方已經重傳並且確認了,然後傳送方又收到了姍姍來遲的確認,這時候傳送方收到確認但是什麼也不做。 d:)通道利用率:停止等待協議的優點是很簡單,但是缺點是通道利用率太低,計算公式等於傳送方傳送資料時間/(傳送方傳送資料時間+往返時間+傳送方接收確認資料時間) 為了解決通道利用率低的方法 連續的ARQ協議和滑動視窗協議 連續的ARQ協議 連續的多個數據組成一個視窗,一個視窗內的資料是不需要接收到確認再發的,連續ARQ協議規定傳送方接收到一個確認,就把視窗向前滑動一個位置。 接收方一般是累計確認,就是說接收到多個數據一起傳送確認資訊。 累計確認的優點:容易實現,即使確認丟失也並不比重傳。 累計確認的缺點:不可以向傳送方反應接收方已經正確收到資料的資訊。 例子:傳送方發六個資料,第五個丟了,那麼接收方只對前四個發出確認,後邊三個只能重傳一次。 如果線路訊號不好,那麼就會導致很多重傳問題。 TCP報文格式 TCP雖然是面向位元組流的,但是傳送的資料是報文段,一個TCP報文段分為首部和資料兩部分。 源埠和目的埠。 序號:用來到時候表示字串順序的。 確認號:想要的下一個資料的第一個資料的序號,也是用來表明字串順序的。 視窗:視窗值經常動態變化。 檢驗和:檢查機關,檢查首部和資料的範圍。 TCP可靠傳輸的實現 首先是滑動視窗增加效率,然後TCP的自適應演算法來計算超時重傳的時間。 TCP的流量控制 簡單來說就是別讓傳送方傳輸資料過快,讓接收方來不及接受,導致資料丟失。 TCP的擁塞控制 什麼是擁塞? 在某段時間內,網路中的某一資源的需求超過了該資源所提供的可用部分,網路效能變壞,這就叫做擁塞。 從大的方面可以看有兩種方法來進行擁塞控制,分別是開環控制(措施在前)和閉環控制(措施在後)。 擁塞控制方法? 四種演算法:慢開始,擁塞避免,快重傳,快恢復。 慢開始:以2的倍數增加,增加到門限值。 擁塞避免:門限值到擁塞視窗期間,一個一個增加,增加到擁塞視窗的時候,超時判斷網路擁塞,調整門限值為原來一半,然後重新慢開始。 快重傳:傳送方接收到三個重複確認,那麼就立即進行重傳,因為只是丟失個別,所以不啟動慢開始,而是快恢復,同時限制門限值為原來一半,直接進行擁塞避免演算法。 TCP的運輸連線管理 運輸連線有三個階段:連線建立,資料傳輸,連結釋放。 TCP建立連線的過程叫做握手,握手需要在客戶端和伺服器之間交換三個TCP報文段,所以也叫做三次握手。 三次握手過程(A作為主動連線方,B是被動開啟連線方): 一開始,B的TCP伺服器程序首先建立傳輸控制塊TCP,準備接受客戶程序的連線請求然後進入listen狀態。 A的TCP也是先建立傳輸控制模組TCB,然後打算建立連線的時候,向B傳送請求報文段,這時候首部的同步位SYN=1,同時選擇序號seq=x。(TCP規定,SYN報文段不可以攜帶資料,但是要消耗一個序號,這時候A進入了SYN-sent(已傳送狀態))。 B收到連線請求,如果同意連結,那麼向A傳送確認。(把確認報文段的SYN和ACK都置1,確認號ack=x+1,給自己一個初始序列seq=y,也要消耗一個序列,這時候B就進入SYN-rcvd(同步收到)狀態)。 A收到B的確認後,還要向B確認,確認ACK報文段置1,確認號ack=y+1,自己序號seq=x+1,同時也為自己選擇一個。(TCP標準規定,ACK可以攜帶資料,如果不攜帶資料則會不消耗序列,A進入及建立連線狀態)。 B收到A的確認後也進入已建立連線狀態。 為什麼最後A還要傳送一次確認?這是因為防止已失效的連線請求報文有傳送到了B,因而產生錯誤。 四次揮手,釋放連線 四次揮手圖