TCP的通常工做過程
寫在前面:一直以來,不少人對於TCP的工做過程感受有點難理解,我剛開始接觸TCP的時候,也有這種感受。後來通過一段時間的分析後,逐漸對它有了一點的理解。如今,我就把個人理解注入到一個實例中進行分析!
1 簡單介紹
傳輸控制協議(Transmission Control Protocol,TCP)是一種面向鏈接的、可靠的、基於字節流的運輸層通訊協議。
面向鏈接:通訊前要創建鏈接,通訊後要拆除鏈接;
可靠的:它會後續的數據包狀態進行跟蹤;
字節流:以字節爲最小單位的流服務;
2 工做過程
TCP分三個階段
第一階段:鏈接創建(三次握手)
第二階段:數據傳輸
第三階段:鏈接拆除(四次握手)
具體如何理解以上的三個階段呢?
3 理解要點
1)編號:是對TCP要傳輸的數據部分中的字節時行編號,但第一個編號並非標識第一個字節,而是在0-(2的32次方)之間產生的一個隨機數做爲第一個編號。
例如:
data=5000,ISN=10000。則編號爲10001--15000
2)Sequence Number:當前傳輸的數據中的第一個字節的編號
例如:
data=5000,ISN=10000。則編號爲10001--15000。但要分5個報文段進行傳輸,每一個報文段傳1000字節
seq爲:
段1:seq=10001(10001-11000)
段2:seq=11001(11001-12000)
段3:seq=12001(12001-13000)
段4:seq=13001(13001-14000)
段5:seq=14001(14001-15000)
3)ACKn:下一次接收到的報文的第一個字節的編號。
做用:對上已接收到的報文進行確認,而且標識但願接收到的一下報文。
例如:
A B
發:seq=10001(10001-11000)
發:ACKn=11001(11000+1但願發到下一個報文的編號從11001開始)
發:seq=11001(11001-12000)
4 實例分析(telnet)
1)簡述telnet過程
telnet是基於TCP的23端口的,它的工做過程以下:
打開cmd
輸入:telnet 172.16.1.1 //向服務器端發起telnet控制鏈接,觸發TCP鏈接的創建
三次握手創建TCP鏈接 //不帶任何數據
數據傳輸過程 //輸入telnet的數據包
四次握手斷開鏈接 //不帶任何數據
抓到的包大概以下:
//前面的3個包爲TCP的三次握手過程(SYN置位代表爲三次握手)
//而後纔開始數據的傳輸
//最後的四個包分爲四次握手斷開鏈接過程(FIN置位代表爲四次握手)
2)數據包分析過程
//三次握手過程。
//雙方都初始化一個序列號,此例中都爲0,非0也能夠的。
//第三包比較特殊,由於此包中只做確認中,既不帶數據(前三個包都不帶數據),也不帶控制信息(FIN或SYN位爲控制信息)。TCP中規定此類包不能佔用Sep號。故它能夠跟前一個包的序號或後個包的序號相同。
//第三個包也沒有SYN置位,由於它只在初始化序號的包只才置位。
//而第二個包開始的包都有ACK置位,只有第一個包纔不置位。
//此過程數據傳輸過程,只摘錄前面幾個包,後續包的規律也同樣;
//seq爲本次發送的數據中的第一個字節的標號
//ACKn爲但願下一次發送的數據中第一個字節的標號
//此處爲四次握手斷開鏈接過程