日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 默认站点!

默认站点

當前位置: 首頁 >

网络编程-TCP/IP协议栈-TCP协议

發布時間:2023/12/4 49 豆豆
默认站点 收集整理的這篇文章主要介紹了 网络编程-TCP/IP协议栈-TCP协议 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

TCP協議

TCP協議作用
  • TCP協議位于協議棧的傳輸層。當應用層向TCP層發送用于網間傳輸的,用8字節表示的數據流,TCP則吧數據流分割成適當長度的報文段,最大傳輸段大小(MSS)通常受到改計算機連接的網絡數據鏈路層的最大傳送單元(MTU)限制(例如路由器每次傳輸數據的大小是固定的,并且是可以設置的,這個傳輸值就是MTU)。之后TCP吧數據包床底給IP層,由他來通過網絡將包傳送給接收端實體的TCP層。

  • TCP為了保證報文傳輸的可靠性,就給每個包一個序號,同時序號也保證傳送到接收端實體的包的按順序接收,然后,接收端實體對已成功收到的字節發回一個相應的確認(ACK);如果發送端實體在合理的往返時延(RTT)內未收到確認,那么對應的數據(假設丟失)將會重傳。

    • 在數據正確性與合法性上,TCP用一個 “校驗和函數” 來檢驗數據是否有錯誤,在發送和接收時都要計算校驗和;同時可以使用md5認證對數據進行加密
    • 在保證可靠性上,采用超時重傳和捎帶確認的機制
    • 在流量控制上,采用滑動窗口協議,協議中規定,對窗口內未經確認的分組需要重傳
  • 在阻塞控制上,采用TCP擁塞控制算法,也稱為AIMD算法。改算法主要包括三個主要部分:

    • 加性增,乘性減
    • 慢啟動
    • 對超時事件做出反應
TCP的報頭
  • 和協議一樣,TCP協議也有他的報頭部分。一下圖表示
  • 源端口:發送方的端口號
  • 目的端口:接受方的端口號
  • 序號:發送方的序號
  • 確認序號:接收方得到序號后回復的確認序號(ACK需要)
  • TCP首部長度:4bit,以32-bit字為單位。TCP首部長度,也是TCP報文數據部分的偏移量范圍5~15,即20bytes ~50bytes,可選項部分最多允許40bytes
  • 標志位,主要用于標記該報文當前狀態
    • URG:指示報文中有緊急數據,應該盡快傳送,(相當于高優先級的數據)
    • ACK:確認序號(AN)有效
    • PSH:接到后盡快交付給接收的應用進程
    • RST:TCP鏈接中出現嚴重差錯(例如服務器宕機),必須釋放鏈接,在重新建立連接
    • SYN:處于TCP鏈接建立過程
    • FIN:發送端已經完成數據傳輸,請求釋放鏈接

TCP協議連接三次握手

  • TCP是一個面向連接的協議,在每一層傳輸數據前,客戶端和服務端需要進行連接,這個鏈接就是三次握手過程。

    • 第一次:客戶端向服務器發送一個SYN(SEQ = x 客戶端序號)報文給服務器端,進入SYN_SEND狀態
    • 第二次:服務器端收到SYN報文,回應一個SYN(SEQ = y 服務端序號)ACK(ACK = x+1 確認號 = 客戶端序號 + 1)報文,進入SYN_RECV狀態
    • 第三次:客戶端收到服務器端的SYN報文,回應一個ACK(ACK = y+1)報文,進入Established狀態。
  • 如下圖

  • 三次握手的意義,為啥不是兩次,因為兩次通信后,客戶端與服務器端都處于準備好狀態,第三次是不是多余了?

  • 答案是:兩次握手時,服務器提前進入準備狀態之后,如果中途遇到網絡中斷,消息沒有回傳給客戶端,客戶端將永遠借不到服務器的給入狀態,那么服務端將資源浪費在一個不存在的連接上。

  • 三次握手并不保證絕對安全: 在三次握手過程中,Server發送SYN-ACK后,收到Client的ACK之前的TCP鏈接稱為半連接(half-open connect),此時Server處于SYN_RCVD狀態,當收到ACK后,Server轉入ESABLISHED狀態。SYN攻擊就是在Client在短時間內偽造大量不存在IP地址,并向Server端不斷發送SYN包,Server回復確認包,并等待Client的確認,由于源地址是不存在的,因此,Server需要不斷重新發送直到超時,這些偽造的SYN包將長時間占用服務端未連接隊列,導致正常SYN請求因為隊列滿無法進入而被丟棄,從而引起完了阻塞甚至系統癱瘓。SYN攻擊時一種典型的DDOS攻擊,檢查SYN攻擊的方式非常簡單,即當Server上有大量半連接狀態,并且IP地址是隨機地址,則可以斷定遭到SYN攻擊,可以用如下命令查看:

#netstat -nap | grep SYN_RECV
TCP協議斷開連接時候四次揮手
  • 既然TCP面向連接,那么肯定也有斷開連接的操作,一個TCP完整的斷開需要進行四次揮手。

    • 第一次:客戶端向服務器發送FIN + ACK 報文,同時攜帶序號為 X,客戶端進入FIN-WAIT1
    • 第二次:服務器端回復ACK報文。附帶序號Z和確認序號X+1,表示服務器已經接收到客戶端的報文。但是由于服務器可能還在處理事務,因此,報文并不會攜帶FIN標志。狀態CLOSE WAIT
    • 第三次:在一段時間后,服務器已經處理完畢,發送帶有FIN和ACK的報文,序號為Y,確認序號為X + 1.狀態:ACK-LAST
    • 第四次:客戶端發送ACK報文,序號X+1,確認序號Y+1。客戶端進入:TIME_WAIT。服務端進入CLOSE(初始狀態)。
  • 如上圖所示,我們關閉連接是四次揮手過程,但是建立連接是三次握手,斷開多了一個過程:

    • 這是因為在連接過程中,服務器在LISTEN狀態下,收到建立連接請求的SYN報文后,把ACK和SYN放再一個報文給客戶端了。
    • 而關閉連接時候,當收到對方的FIN報文時候,僅僅標識對方不在發送數據了,但并不表示不在接受數據,并且服務端此時并不能保證已經將全部數據發送給對方,所以服務器方可以立即iclose,也可以發送一些數據給對方后在發送FIN報文給對方來表示現在關閉連接,因此,服務端ACK和FIN一般會分開發送,在這里就多了一個步驟
  • 在TIME_WAIT狀態需要經過2MSL(最大報文段生存時間)才能返回到CLOSE狀態,有如下兩個原因:

    • 第一保證TCP協議的全雙工連接能夠可靠關閉
    • 保證這次連接的重復數據段從網絡中消息

上一篇 網絡編程-TCP/IP協議棧-IP協議
下一篇 網絡編程-TCP/IP協議棧-UDP/HTTP協議

總結

以上是默认站点為你收集整理的网络编程-TCP/IP协议栈-TCP协议的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得默认站点網站內容還不錯,歡迎將默认站点推薦給好友。