目錄
- TCP協(xié)議和UDP協(xié)議
- TCP首部
- TCP連接管理
- UDP首部
1. TCP協(xié)議和UDP協(xié)議
- TCP協(xié)議:面向連接的、可靠的流協(xié)議,實行“順序控制”或“重發(fā)控制”機(jī)制,具備“流量控制”、“擁塞控制”、提高網(wǎng)絡(luò)利用率等功能
- UDP協(xié)議:面向無連接的、不具有可靠性的數(shù)據(jù)報協(xié)議,不保證消息一定會到達(dá)
- 端口號:用來識別同一主機(jī)中不同的應(yīng)用程序,也被稱為程序地址,通過源IP地址、目標(biāo)IP地址、協(xié)議號、源端口號、目標(biāo)端口號同時進(jìn)行通信識別
2. TCP首部
TCP首部
- 源端口:16 bit,發(fā)送數(shù)據(jù)的源進(jìn)程端口
- 目的端口:16 bit,接收數(shù)據(jù)的進(jìn)程端口
- 序號:32 bit,代表當(dāng)前TCP數(shù)據(jù)段第一個字節(jié)占整個字節(jié)流的相對位置
- 確認(rèn)號:32 bit,代表接收端希望接收的數(shù)據(jù)序號,為上次接收到數(shù)據(jù)報的序號+1,當(dāng)ACK標(biāo)志位為1時才生效
- 數(shù)據(jù)偏移:4 bit,實際代表TCP首部長度,最大為60字節(jié)
- SYN:同步標(biāo)志,用于數(shù)據(jù)同步
- ACK:確認(rèn)標(biāo)志,ACK=1時確認(rèn)號才有效
- FIN:結(jié)束標(biāo)志,用于發(fā)送端提出斷開連接
- URG:緊急標(biāo)志,URG=1是緊急指針有效
- PSH:指示接收方立即將數(shù)據(jù)提交給應(yīng)用層,而不是等待緩沖區(qū)滿
- RST:重置連接
- 窗口值:16 bit,標(biāo)識接收方可接受的數(shù)據(jù)字節(jié)數(shù)
- 校驗和:16 bit,用于檢驗數(shù)據(jù)完整性
- 緊急指針:16 bit,只有當(dāng)URG標(biāo)識位為1時,緊急指針才有效。緊急指針的值與序號的相加值為緊急數(shù)據(jù)的最后一個字節(jié)位置。用于發(fā)送緊急數(shù)據(jù)
3. TCP連接管理
- 描述:數(shù)據(jù)通信之前,通過TCP首部發(fā)送SYN包作為建立連接的請求并等待確認(rèn)應(yīng)答,在通信結(jié)束時會發(fā)送FIN包進(jìn)行斷開連接處理,一個連接的建立與斷開正常至少需要來回發(fā)送7個包才能完成
-
TCP連接的建立:三次握手
連接的建立 -
TCP連接的釋放:四次揮手
連接的釋放 - 超時重傳:在發(fā)送某一個數(shù)據(jù)以后就開啟一個計時器,在一定時間內(nèi)如果沒有得到發(fā)送的數(shù)據(jù)報的ACK報文,那么就重新發(fā)送數(shù)據(jù),直到發(fā)送成功為止。
- 滑動窗口:發(fā)送窗口只有收到對端對于本段發(fā)送窗口內(nèi)字節(jié)的ACK確認(rèn),才會移動發(fā)送窗口的左邊界。接收端可以根據(jù)自己的狀況通告窗口大小,從而控制發(fā)送端的接收,進(jìn)行流量控制。
- 擁塞控制:TCP擁塞控制4個核心算法包括慢開始、擁塞避免、快重傳、快恢復(fù)
慢開始:先探測一下網(wǎng)絡(luò)的擁塞程度,也就是說由小到大逐漸增加擁塞窗口的大小
擁塞避免:讓擁塞窗口緩慢增長,即每經(jīng)過一個往返時間RTT就把發(fā)送發(fā)的擁塞窗口cwnd加1,而不是加
倍。無論是在慢開始階段還是在擁塞避免階段,只要發(fā)送方判斷網(wǎng)絡(luò)出現(xiàn)擁塞,就把慢開始門
限設(shè)置為出現(xiàn)擁塞時的發(fā)送窗口大小的一半。然后把擁塞窗口設(shè)置為1,執(zhí)行慢開始算法。
快重傳:發(fā)送方只要一連收到3個重復(fù)確認(rèn)就應(yīng)當(dāng)立即重傳對方尚未收到的報文段,而不必繼續(xù)等待設(shè)置
的重傳計數(shù)器時間到期
快恢復(fù):把擁塞窗口大小設(shè)置為慢開始門限減半后的數(shù)值,然后開始執(zhí)行擁塞避免算法(“加法增大”),
使擁塞窗口緩慢地線性增大
4. UDP首部
UDP首部
- 端口號:用來表示發(fā)送和接受進(jìn)程。由于IP層已經(jīng)把I P數(shù)據(jù)報分配給TCP或UDP(根據(jù)IP首部中協(xié)議字段值),因此TCP端口號由TCP來查看,而UDP端口號由UDP來查看。TCP端口號與UDP端口號是相互獨立的
- 長度:UDP長度字段指的是UDP首部和UDP數(shù)據(jù)的字節(jié)長度
- 檢驗和:UDP檢驗和是一個端到端的檢驗和。它由發(fā)送端計算,然后由接收端驗證。其目的是為了發(fā)現(xiàn)UDP首部和數(shù)據(jù)在發(fā)送端到接收端之間發(fā)生的任何改動