1. 程式人生 > >TCP協議簡單講解

TCP協議簡單講解

TCP協議

TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議。 

TCP包頭格式

 

  • 首先,源埠號和目標埠號是不可少的,埠號的存在,資料就知道應該發給哪個應用。
  • 接下來是包的序號,編號是為了解決資料傳送亂序問題,不編號確認不了哪個先來,哪個後到。
  • 還有就是確認序號,發出去的包應該有確認,如果沒有收到就應該重新發送,直到送達,這個可以解決不丟包的問題。
  • 接下來狀態位的標識,SYN為發起一個連線,ACK是回覆,RST是重新連線,FIN是結束連線。
  • 還有一個重要的就是視窗大小,TCP 要做流量控制,通訊雙方各宣告一個視窗,標識自己當前能夠的處理能力。

TCP 的三次握手

TCP 的連線建立,我們常常稱為三次握手,簡單描述即下。

A:您好,我是 A。

B:您好 A,我是 B。

A:您好 B。

三次握手的過程

  • 第一次握手:建立連線。客戶端傳送連線請求報文段,將SYN位置為1,Sequence Number為x;然後,客戶端進入SYN_SEND狀態,等待伺服器的確認;
  • 第二次握手:伺服器收到SYN報文段。伺服器收到客戶端的SYN報文段,需要對這個SYN報文段進行確認,設定Acknowledgment Number為x+1(Sequence Number+1);同時,自己自己還要傳送SYN請求資訊,將SYN位置為1,Sequence Number為y;伺服器端將上述所有資訊放到一個報文段(即SYN+ACK報文段)中,一併傳送給客戶端,此時伺服器進入SYN_RECV狀態;
  • 第三次握手:客戶端收到伺服器的SYN+ACK報文段。然後將Acknowledgment Number設定為y+1,向伺服器傳送ACK報文段,這個報文段傳送完畢以後,客戶端和伺服器端都進入ESTABLISHED狀態,完成TCP三次握手。

TCP 四次揮手

 TCP 的連線關閉,我們常常稱為四次揮手,簡單描述即下。

A:B 啊,我不想玩了。

B:哦,你不想玩了啊,我知道了。(很大可能 B 還沒做完自己的事情,還是可以傳送資料的)

B:A 啊,好吧,我也不玩了,拜拜。

A:好的,拜拜。

四次揮手

  • 第一次分手:主機1(可以使客戶端,也可以是伺服器端),設定Sequence Number和Acknowledgment Number,向主機2傳送一個FIN報文段;此時,主機1進入FIN_WAIT_1狀態;這表示主機1沒有資料要傳送給主機2了;
  • 第二次分手:主機2收到了主機1傳送的FIN報文段,向主機1回一個ACK報文段,Acknowledgment Number為Sequence Number加1;主機1進入FIN_WAIT_2狀態;主機2告訴主機1,我“同意”你的關閉請求;
  • 第三次分手:主機2向主機1傳送FIN報文段,請求關閉連線,同時主機2進入LAST_ACK狀態;
  • 第四次分手:主機1收到主機2傳送的FIN報文段,向主機2傳送ACK報文段,然後主機1進入TIME_WAIT狀態;主機2收到主機1的ACK報文段以後,就關閉連線;此時,主機1等待2MSL後依然沒有收到回覆,則證明Server端已正常關閉,那好,主機1也可以關閉連線了。

流量控制和擁塞控制 

所謂流量控制,主要是接收方傳遞資訊給傳送方,使其不要傳送資料太快,是一種端到端的控制。滑動視窗協議,是TCP使用的一種流量控制方法。該協議允許傳送方在停止並等待確認前可以連續傳送多個分組。由於傳送方不必每發一個分組就停下來等待確認,因此該協議可以加速資料的傳輸。 

所謂擁塞控制,指當網路中的鏈路容量和交換結點中的快取和處理機都有著工作的極限,當網路的需求超過它們的工作極限時,就出現了擁塞時,為了防止過多的資料注入到網路中,使網路中的路由器或鏈路不致過載採取的一種控制。常用的方法就是:
1. 慢開始、擁塞控制
2. 快重傳、快恢復