天天看點

三、TCP協定

TCP(Transmission Control Protocol)傳輸控制協定:顧名思義就是對資料的傳輸進行控制

TCP報頭

序号:相當于編号,當TCP資料包過大的時候會進行分段,分段之後按序号順序重組,複原資料 seq=1

确認号:存在于第一次确認消息裡的,希望伺服器能夠回應,确認号跟序号有聯系 ack(确認号)=1+seq=2,表示我希望收到下一個包的序号為2

狀态控制碼:信号燈 1---亮 0---暗

  1. ACK -acknowledge(确認标志)=1那麼代表這是一個确認消息,對方已确認
  2. RST -RESET(重置标志)=1 ,表示這個消息釋放連接配接,TCP連接配接錯誤,請重新連接配接
  3. SYN -synchoronous(同步标志)=1,表示這個消息是:1.一個發起的連接配接 2.确認接受連接配接
  4. FIN -Final(中止标志)=1,表示發送封包完畢了,要釋放連接配接,TCP四次揮手要開始了

用戶端向百度伺服器發起請求:首先是向TCP發起請求,實作的過程就是TCP三向交握

TCP四次揮手就是斷開連接配接的過程

TCP三向交握

首先連接配接都是關閉的

  1. 第一次握手:Client将标志位SYN置為1,随機産生一個序号值seq=J,并将該資料包發送給Server,Client進入SYN_SENT狀态,等待Server确認。
  2. 第二次握手:Server收到資料包後由标志位SYN=1知道Client請求建立連接配接,Server将标志位SYN和确認位ACK都置為1,并且确認号加1表示我希望收到的下一個包是ack=J+1,随機産生一個序号值seq=K,并将該資料包發送給Client以确認連接配接請求,Server進入SYN_RCVD狀态。
  3. 第三次握手:Client收到确認後,檢查ack是否為J+1,ACK是否為1,如果正确則将确認位ACK置為1,并且将之前的序号K加1,确認号ack=K+1,并将該資料包發送給Server,Server檢查ack是否為K+1,ACK是否為1,如果正确則連接配接建立成功,Client和Server進入ESTABLISHED狀态,完成三次握手,随後Client與Server之間可以開始傳輸資料了。

TCP四次揮手

  1. 第一次揮手:Client發送一個FIN,用來關閉Client到Server的資料傳送,Client進入FIN_WAIT_1狀态。
  2. 第二次揮手:Server收到FIN後,發送一個ACK給Client,确認序号為收到序号+1(與SYN相同,一個FIN占用一個序号),Server進入CLOSE_WAIT狀态。
  3. 第三次揮手:Server發送一個FIN,用來關閉Server到Client的資料傳送,Server進入LAST_ACK狀态。
  4. 第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀态,接着發送一個ACK給Server,确認序号為收到序号+1,Server進入CLOSED狀态,完成四次揮手。