成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

堅(jiān)持苦學(xué) TCP,終于把 TCP 協(xié)議給學(xué)明白了

網(wǎng)絡(luò) 通信技術(shù)
下面會(huì)通過介紹 TCP 的首部格式進(jìn)行展開,一一闡述 TCP 三次握手、四次揮手、滑動(dòng)窗口、擁塞控制、流量控制和 UDP 協(xié)議。

TCP 是面向連接的、可靠的流協(xié)議。流就相當(dāng)于不間斷的數(shù)據(jù)結(jié)構(gòu)。

TCP 之所以能夠提供可靠傳輸就在于 通過 校驗(yàn)和、序列號(hào)、確認(rèn)應(yīng)答、重發(fā)控制、連接管理以及窗口控制等機(jī)制去實(shí)現(xiàn)的。

下面會(huì)通過介紹 TCP 的首部格式進(jìn)行展開,一一闡述 TCP 三次握手、四次揮手、滑動(dòng)窗口、擁塞控制、流量控制和 UDP 協(xié)議。

TCP首部格式

  • 源端口號(hào):表示發(fā)送端的端口號(hào),字段長 16 位。
  • 目標(biāo)端口號(hào):表示接收端端口號(hào),字段長度 16 位。
  • 序列號(hào):字段長 32 位。序列號(hào)是指發(fā)送數(shù)據(jù)的位置。每發(fā)送一次數(shù)據(jù),就累加一次該數(shù)據(jù)字節(jié)數(shù)的大小。序列號(hào)不會(huì)從0開始,是在建立連接的時(shí)候由計(jì)算機(jī)隨機(jī)生成一個(gè)數(shù)作為初始值,通過 SYN 包傳給接收端主機(jī)。
  • 確認(rèn)應(yīng)答號(hào):長度是 32 位。是指下一次應(yīng)該收到的數(shù)據(jù)的序列號(hào)。發(fā)送端收到這個(gè)確認(rèn)應(yīng)答以后可以認(rèn)定這個(gè)序號(hào)之前的數(shù)據(jù)都已經(jīng)被正常接收。
  • 數(shù)據(jù)偏移:表示數(shù)據(jù)開始的地方離 TCP 起始處有多遠(yuǎn)。實(shí)際上也就是表示 TCP 首部的長度。
  • 保留: 該字段是為了以后擴(kuò)展時(shí)使用,長度是 4 位。
  • 控制位:長度為 8 位。每一位從左到右分別是 CWR、ECE、URG、ACK、PSH、RST、SYN、FIN。具體我會(huì)在講解 TCP 三次握手和四次揮手再重點(diǎn)說明。
  • 窗口大小:該字段用于通知相同 TCP 首部的確認(rèn)應(yīng)答所指位置開始能接受的數(shù)據(jù)大小。TCP不允許發(fā)送超過該大小的數(shù)據(jù)。
  • 校驗(yàn)和:由發(fā)送端填充,接收端對TCP報(bào)文段執(zhí)行CRC算法以檢驗(yàn)TCP報(bào)文段在傳輸過程中是否損壞。注意,這個(gè)校驗(yàn)不僅包括TCP頭部,也包括數(shù)據(jù)部分。這也是TCP可靠傳輸?shù)囊粋€(gè)重要保障。
  • 緊急指針:該字段表示本報(bào)文中緊急數(shù)據(jù)的指針。從數(shù)據(jù)部分的首位到緊急指針?biāo)肝恢脼橹篂榫o急數(shù)據(jù)。
  • 選項(xiàng):用于提高 TCP 的傳輸性能,是可變長的可選信息。最多包含 40 字節(jié)。

TCP 三次握手

三次握手

三次握手說明:

  1. 由客戶端發(fā)送建立 TCP 連接的請求報(bào)文,報(bào)文中包含 seq 序列號(hào),是由發(fā)送端隨機(jī)生成的,并且將報(bào)文中的 SYN 字段 設(shè)置為 1,表示需要建立 TCP 連接,客戶端進(jìn)入 SYN_SEND 狀態(tài)。(SYN=1.seq=x,x代表隨機(jī)生成的數(shù)值)
  2. 由服務(wù)器端回復(fù)客戶端發(fā)送的 TCP 連接請求報(bào)文,其中包含 seq 序列號(hào),是由回復(fù)端隨機(jī)生成的,并且將 SYN 設(shè)置為 1,也會(huì)產(chǎn)生一個(gè) ACK 字段,字段值是在客戶端發(fā)送過來的序列號(hào) seq 基礎(chǔ)上加 1,以便客戶端收到信息時(shí),知道自己的 TCP 建立請求已經(jīng)得到驗(yàn)證,服務(wù)端進(jìn)行 SYN_SEND 狀態(tài)。(SYN =1,ACK = x+1,seq=y,y為隨機(jī)生成數(shù)值)
  3. 客戶端收到服務(wù)端發(fā)送的 TCP 建立驗(yàn)證請求后,會(huì)使自己的序列號(hào)加 1 表示,并且再次回復(fù) ACK 驗(yàn)證請求,在服務(wù)端發(fā)過來的 seq 上加 1 進(jìn)行回復(fù),客戶端進(jìn)入 ESTABLISHED 狀態(tài),當(dāng)服務(wù)端接收到請求,也進(jìn)入 ESTABLISHED 狀態(tài),TCP 握手結(jié)束。(SYN = 1,ACK = y+1,seq = x+1)

為什么三次握手?

1.檢查雙方是否都具備發(fā)送和接收數(shù)據(jù)的能力

TCP 是基于全雙工的可信傳輸協(xié)議,也就意味著數(shù)據(jù)可以同時(shí)在兩個(gè)方向上傳輸。在建立三次握手的過程中也就是在檢驗(yàn)雙方發(fā)送和接收數(shù)據(jù)的能力是否具備。

第一次握手,這時(shí)候客戶端知道自己具備了發(fā)送數(shù)據(jù)的能力,但還不知道服務(wù)端是否有接收和發(fā)送數(shù)據(jù)的能力。

第二次握手,當(dāng)服務(wù)端接收到報(bào)文后,回復(fù)確認(rèn)報(bào)文,此時(shí)服務(wù)端知道客戶端具有發(fā)送報(bào)文的能力,并且知道自己具有接收和發(fā)送數(shù)據(jù)的能力,但還不知道客戶端是否具有接收數(shù)據(jù)的能力。

第三次握手,當(dāng)客戶端收到服務(wù)端的確認(rèn)報(bào)文后,知道服務(wù)端具備接收和發(fā)送數(shù)據(jù)的能力,因?yàn)榉?wù)端還不知道客戶端具備接收數(shù)據(jù)的能力,所以還需要發(fā)送一個(gè)確認(rèn)報(bào)文,告知服務(wù)端自己是具有接收能力的。

2.防止重復(fù)連接

在網(wǎng)絡(luò)狀況比較復(fù)雜或比較差的情況下,發(fā)送方可能會(huì)連續(xù)發(fā)送多次建立連接的請求。如果 TCP 握手的次數(shù)只有兩次,那么接收方只能選擇接受請求或者拒絕連接請求,但并不清楚這次的請求是否是正常的請求。

如果是三次握手的話,客戶端在接收到服務(wù)端 seq+1 的消息之后,通過對比,就可以判斷當(dāng)前連接是否是歷史連接,如果是的話就會(huì)發(fā)送終止報(bào)文給服務(wù)端終止連接。如果不是歷史連接就發(fā)送確認(rèn)報(bào)文建立連接。

四次揮手

建立一個(gè) TCP 連接需要三次握手,而終止一個(gè) TCP 連接需要經(jīng)過四次揮手,這是由于 TCP 的半關(guān)閉特性造成的,TCP 提供了連接的一端在結(jié)束它的發(fā)送后還能接收來自另一端數(shù)據(jù)的能力。

四次揮手

第一次揮手:客戶端發(fā)送一個(gè) FIN 報(bào)文(請求連接終止:FIN = 1),報(bào)文中會(huì)指定一個(gè)序列號(hào) seq = u。并停止再發(fā)送數(shù)據(jù),但依然能夠接收數(shù)據(jù),主動(dòng)關(guān)閉 TCP 連接。此時(shí)客戶端處于 FIN_WAIT-1 狀態(tài),等待服務(wù)端確認(rèn)。

第二次揮手:服務(wù)端收到 FIN 之后,會(huì)發(fā)送一個(gè) ACK 報(bào)文,且把客戶端的序號(hào)值 +1 作為 ACK 報(bào)文的序列號(hào)值,表明已經(jīng)收到客戶端的報(bào)文了,此時(shí)服務(wù)端處于 CLOSE_WAIT 狀態(tài)。客戶端收到服務(wù)端的確認(rèn)后,進(jìn)入 FIN-WAIT-2 狀態(tài),等待服務(wù)端發(fā)出的連接釋放報(bào)文段。

前兩次揮手 既讓服務(wù)端知道了客戶端想釋放連接,也讓客戶端知道了服務(wù)端了解了自己想要釋放連接的請求。于是,可以確認(rèn)關(guān)閉客戶端到服務(wù)端方向上的連接的。

第三次揮手:如果服務(wù)端也想斷開連接,會(huì)發(fā)送 FIN 報(bào)文,且指定一個(gè)序列號(hào)。此時(shí)服務(wù)端處于 LAST_ACK 狀態(tài),等待客戶端的確認(rèn),并停止向客戶端發(fā)送數(shù)據(jù),但服務(wù)端仍能夠接收從客戶端傳輸過來的數(shù)據(jù)。

第四次揮手:客戶端收到 FIN 之后,一樣發(fā)送一個(gè) ACK 報(bào)文作為應(yīng)答(ack = w+1),且把服務(wù)端的序列值 +1 作為自己 ACK 報(bào)文的序號(hào)值(seq=u+1),此時(shí)客戶端處于 TIME_WAIT 狀態(tài),并在這個(gè)狀態(tài)等待 2MSL。服務(wù)端收到從客戶端發(fā)出的 TCP 報(bào)文之后結(jié)束 LAST-ACK 階段,進(jìn)入 CLOSED 階段。

客戶端等待完 2MSL 之后,結(jié)束 TIME-WAIT 階段,進(jìn)入 CLOSED 階段,由此完成四次揮手。

為什么客戶端在 TIME-WAIT 階段要等 2MSL?

為的是確認(rèn)服務(wù)端是否收到客戶端發(fā)出的 ACK 確認(rèn)報(bào)文。

當(dāng)客戶端發(fā)出最后的 ACK 確認(rèn)報(bào)文后,并不能確定服務(wù)端能夠接收到,所以在發(fā)完之后,等待 2MSL,服務(wù)端在 1MSL 內(nèi)沒有收到客戶端發(fā)出的 ACK 確認(rèn)報(bào)文,就會(huì)再次向客戶端發(fā)出 FIN 報(bào)文。

窗口滑動(dòng)

TCP 以 1 個(gè)段為單位,每發(fā)一個(gè)段就要進(jìn)行一次確認(rèn)應(yīng)答的處理。這種傳輸方式有個(gè)缺點(diǎn),包往返時(shí)間越長通信性能越低。

為了解決這個(gè)問題,引入了窗口這個(gè)概念。確認(rèn)應(yīng)答不再是以一個(gè)分段,而是以更大的單位進(jìn)行確認(rèn),發(fā)送端發(fā)了一個(gè)段后不需要一直等待確認(rèn)應(yīng)答,而是能夠繼續(xù)發(fā)送。

窗口大小就是指無需等待確認(rèn)應(yīng)答而可以繼續(xù)發(fā)送數(shù)據(jù)的最大值,窗口大小分為四個(gè)段。

如上圖所示,白色部分就是窗口,窗口內(nèi)的數(shù)據(jù)即便沒有收到確認(rèn)應(yīng)答也可以發(fā)送出去。

滑動(dòng)窗口以外的部分包括尚未發(fā)送的數(shù)據(jù)和已經(jīng)確認(rèn)對端收到的數(shù)據(jù)。收到確認(rèn)應(yīng)答后,會(huì)將窗口滑動(dòng)到確認(rèn)應(yīng)答中的

序列號(hào)的位置。這樣就可以順序的將多個(gè)段同時(shí)發(fā)送提高通信性能。這種機(jī)制就是窗口滑動(dòng)機(jī)制。

窗口滑動(dòng)機(jī)制下重發(fā)處理

在使用窗口控制時(shí),可能會(huì)遇到段丟失。在沒有使用窗口控制,沒有收到確認(rèn)應(yīng)答的數(shù)據(jù)會(huì)被重發(fā),使用了窗口滑動(dòng),默寫應(yīng)答即使丟失也不需要進(jìn)行重發(fā)。

結(jié)合下圖所示,當(dāng)某段報(bào)文丟失后,發(fā)送端會(huì)一直收到序號(hào) 1001 的確認(rèn)應(yīng)答,這個(gè)確認(rèn)應(yīng)答就像在提醒發(fā)送端"我想接收的是從 1001 開始的數(shù)據(jù)"。

出現(xiàn)報(bào)文丟失的情況下,同一個(gè)序號(hào)的確認(rèn)應(yīng)答會(huì)重復(fù)發(fā)送。當(dāng)發(fā)送端連續(xù)三次收到同一個(gè)應(yīng)答,就會(huì)將所對應(yīng)的數(shù)據(jù)進(jìn)行重發(fā),這種重發(fā)機(jī)制叫做高速重發(fā)機(jī)制。

流量控制

TCP 提供了一種機(jī)制可以讓發(fā)送端根據(jù)接收端的實(shí)際接收能力控制發(fā)送的數(shù)據(jù)量。

接收端主機(jī)向發(fā)送端主機(jī)通知自己可以接收的數(shù)據(jù)大小,發(fā)送端就會(huì)發(fā)送不超過這個(gè)限度的數(shù)據(jù)。其實(shí)這個(gè)大小就是窗口大小,窗口大小的值是由接收端決定的。

擁塞控制

因?yàn)橛?jì)算機(jī)是個(gè)共享的環(huán)境,也有可能會(huì)因?yàn)槠渌鳈C(jī)之間的通信造成網(wǎng)絡(luò)擁堵。在網(wǎng)絡(luò)出現(xiàn)擁堵時(shí),突然發(fā)送一個(gè)較大量的數(shù)據(jù)可能會(huì)導(dǎo)致網(wǎng)絡(luò)癱瘓,如果在通信一開始就發(fā)送大量數(shù)據(jù),也會(huì)引發(fā)一些問題。

TCP 為了防止這個(gè)問題,會(huì)利用一個(gè)慢啟動(dòng)的算法,對發(fā)送數(shù)據(jù)量進(jìn)行控制。

為了調(diào)節(jié)發(fā)送的量,定義了一個(gè)叫做擁塞窗口的概念。

在慢啟動(dòng)的時(shí)候,將擁塞窗口大小設(shè)置為 1 個(gè)數(shù)據(jù)段(1 MSS)大小。之后每收到一個(gè)確認(rèn)應(yīng)答,就將窗口值加 1。

在發(fā)送數(shù)據(jù)包的時(shí)候,將擁塞窗口大小與接收端主機(jī)通知的窗口大小做對比,按它們中較小的值,發(fā)送比其還要小的數(shù)據(jù)量。

TCP 與 UDP 區(qū)分

UDP是面向無連接的協(xié)議, 是一個(gè)不具有可靠性的數(shù)據(jù)報(bào)協(xié)議。不確保消息一定會(huì)到達(dá)。

UDP 主要用于對高速傳輸和實(shí)時(shí)性有較高要求的通信或廣播通信。例如打電話,如果使用 TCP ,數(shù)據(jù)在傳輸過程如果有丟失就會(huì)被重發(fā),但這樣就無法流暢的傳輸人的聲音,會(huì)造成聲音大幅度延遲。

UDP 適用范圍:

  • 包總量較少的通信
  • 視頻、音頻等多媒體通信
  • 限定于 LAN 等特定網(wǎng)絡(luò)中的應(yīng)用通信
  • 廣播通信
責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2021-10-11 10:41:14

TCP傳輸層協(xié)議網(wǎng)絡(luò)

2019-06-17 08:30:09

TCPIP通信協(xié)議

2022-03-27 20:32:28

Knative容器事件模型

2021-10-09 00:02:04

DevOps敏捷開發(fā)

2021-06-13 12:03:46

SaaS軟件即服務(wù)

2021-10-17 20:38:30

微服務(wù)內(nèi)存組件

2021-03-25 11:24:25

爬蟲技術(shù)開發(fā)

2020-11-03 07:04:39

云計(jì)算公有云私有云

2022-04-27 18:25:02

數(shù)據(jù)采集維度

2021-12-03 18:25:56

數(shù)據(jù)指標(biāo)本質(zhì)

2021-10-12 18:31:40

流量運(yùn)營前端

2019-09-06 09:05:25

TCP協(xié)議通信

2020-02-10 19:42:01

CPIP 協(xié)議,

2021-04-10 10:37:04

OSITCP互聯(lián)網(wǎng)

2021-02-14 00:21:37

區(qū)塊鏈數(shù)字貨幣金融

2022-04-12 18:29:41

元數(shù)據(jù)系統(tǒng)架構(gòu)

2021-06-29 11:21:41

數(shù)據(jù)安全網(wǎng)絡(luò)安全黑客

2020-11-30 08:34:44

大數(shù)據(jù)數(shù)據(jù)分析技術(shù)

2022-07-31 20:29:28

日志系統(tǒng)

2021-03-03 21:31:24

量化投資利潤
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品美女一区二区 | 国产真实乱全部视频 | 成人一区二区在线 | 亚洲欧美中文日韩在线v日本 | 亚洲欧美日韩在线 | 一区二区日韩 | 日韩高清一区二区 | 99日韩 | 日韩一区二区在线视频 | 91免费小视频 | 亚洲91精品 | 久久青视频| 欧美成视频在线观看 | 一区二区av | 久久久久久成人 | 一本久久a久久精品亚洲 | 免费日本视频 | 中文字幕 国产精品 | 欧美精品网| 国内久久 | 亚洲女人天堂网 | 国产在线麻豆精品入口 | 美女视频久久 | 精品一区国产 | 亚洲精品68久久久一区 | 久久9视频 | 亚洲精品福利视频 | 天天天操操操 | 国产96在线 | 日韩精品一区中文字幕 | 国产精品中文字幕在线播放 | 91视频播放 | 天堂网av在线 | 亚洲国产精品一区二区第一页 | 日本天天操 | 看片一区| 99在线精品视频 | 精品伊人久久 | 国产亚洲一区二区在线观看 | 久久亚洲一区二区三区四区 | 亚洲精品欧美 |