TCP傳輸控制協(xié)議
今天跟大家來聊一聊傳輸層眾多協(xié)議中的比較重要的TCP傳輸控制協(xié)議。
TCP(傳輸控制協(xié)議)面向連接,配合高層用于程序做數(shù)據(jù)發(fā)送,只提供封裝報(bào)頭的設(shè)計(jì),和 SD 端口號(hào)信息。
一、TCP端口號(hào)?
端口號(hào)主要用來區(qū)分不同的網(wǎng)絡(luò)服務(wù),大小為16bit,范圍是:0-65535 。其中分為知名端口和非知名端口,如下所述:
(1)1-1023為知名端口,一對(duì)一精確對(duì)應(yīng),知名應(yīng)用和知名端口的映射,telnet 對(duì)應(yīng) TCP 23 ;
(2)1024-65535為非知名端口,他是隨機(jī)對(duì)應(yīng)的,不固定的由應(yīng)用程序和操作系統(tǒng)絕定;
具體的TCP端口號(hào)如下圖所示:

二、TCP三次握手?
當(dāng)主動(dòng)方發(fā)出 SYN 連接請(qǐng)求后,等待對(duì)方回復(fù) SYN+ACK,最終對(duì)對(duì)方 SYN 執(zhí)行 ACK 確認(rèn),TCP建立連接的過程如下圖:

TCP關(guān)閉連接如下圖:

?
主機(jī)在關(guān)閉連接前,要確認(rèn)收到來敵對(duì)方的ack。
三、TCP頭部

我們可以看到TCP報(bào)頭中包含以下內(nèi)容:
Source port (源端口號(hào)) 16 源應(yīng)用程序時(shí)什么程序?
Destination port (目的端口號(hào))16 目的應(yīng)用程序是什么程序?
Sequence number(序列號(hào))32 數(shù)據(jù)分段的時(shí)候每個(gè)段的號(hào),用于重組,防止亂序?
Acknowledge number(確認(rèn)號(hào))32 確認(rèn)收到數(shù)據(jù),發(fā)送方發(fā)送最大序列號(hào)的值+1,?
Header length(首部長度)4?
Resv(保留)6 全部為 0?
URG :緊急指針 致為 1 表示緊急處理該數(shù)據(jù)?
ACK :確認(rèn)的意思?
PSH?
RST :重置
SYN :同步的意思?
FIN :結(jié)束?
Window(窗口)16 想收到的每個(gè) TCP 數(shù)據(jù)段的大小,可以協(xié)商流控。發(fā)送端移送一段數(shù)據(jù),等,目的段收到一段數(shù)據(jù)后,發(fā)送一個(gè) ACK 給發(fā)送端,然后發(fā)送段接著發(fā)送,沒有收到確認(rèn),重傳。?
Checksum(校驗(yàn)和)16 不單單校驗(yàn)頭部,數(shù)據(jù)內(nèi)容也校驗(yàn)。?
Urgent pointer(緊急指針)16 結(jié)合 URG 優(yōu)先處理某個(gè)應(yīng)用,?
Options(選項(xiàng))?
Padding(填充)
因?yàn)門CP是面向連接的,所以包括 一下功能:
(1) 流量控制:限速,通過窗口字段去協(xié)商速率,滑動(dòng)窗口每次傳輸前都會(huì)協(xié)商窗口大小。?
(2) 防止亂序:處理延遲、串行化延遲、傳輸延遲、隊(duì)列延遲、抖動(dòng)的問題先發(fā)后到或者后發(fā)先到 ,通過序列號(hào)字段完成,?
(3)防止丟包:通過確認(rèn)號(hào)來實(shí)現(xiàn)。如:發(fā)送 1 2 3 對(duì)端回復(fù) ACK 4 給發(fā)送端,源就知道?
1 2 3 都收到了,我從 4 開始發(fā)送,4 5 6 如果 6 丟失,回復(fù) ACK 6 , 源就知道 6 丟失了 ,從 6 開始重傳。?
(4) 完整性檢查,防止數(shù)據(jù)篡改:通過校驗(yàn)和字段 。
(5) 數(shù)據(jù)重傳:本身就支持。
(6)點(diǎn)到點(diǎn)應(yīng)用,只支持單播數(shù)據(jù)發(fā)送,不支持組播、廣播。
四、TCP傳輸過程

五、TCP控制流量
