在傳輸層中有UDP和TCP兩個(gè)重要的協(xié)議,下面將針對TCP數(shù)據(jù)報(bào)的結(jié)構(gòu)進(jìn)行分析
關(guān)于UDP數(shù)據(jù)報(bào)的結(jié)構(gòu)分析推薦看UDP數(shù)據(jù)報(bào)結(jié)構(gòu)分析(面試重點(diǎn))
TCP結(jié)構(gòu)圖示
TCP報(bào)頭結(jié)構(gòu)的分析
? ? ? ? 一.16位源端口號(hào)
? ? ? ? 源端口表示發(fā)送數(shù)據(jù)時(shí),發(fā)送方的端口號(hào),由于占16位2個(gè)字節(jié),所以取值范圍是0-65535,所以一個(gè)合法的端口號(hào),有效范圍就是0-65535不能再大了(實(shí)際上0是不使用的),
?知名端口號(hào)
? ? ? ? ? ? ? ? ? ? ? ? 在1-1024這個(gè)范圍的端口號(hào),系統(tǒng)賦予了特定的含義,一般也不建議使用,這些端口號(hào)已經(jīng)給一些名氣比較大的服務(wù)器提前安排好了(坐飛機(jī)的頭等艙一樣)
????????二.16位目的端口號(hào)
????????目的端口號(hào)表示發(fā)送數(shù)據(jù)時(shí),接收方的端口號(hào),其余的特點(diǎn)和源端口號(hào)相同
? ? ? ? 三.32位序號(hào)
? ? ? ? 維持TCP可靠性的結(jié)構(gòu),序號(hào)表示在網(wǎng)絡(luò)傳輸數(shù)據(jù)時(shí),第一個(gè)字節(jié)的序號(hào),引入了序號(hào)的概念,在進(jìn)行網(wǎng)絡(luò)傳輸數(shù)據(jù)時(shí),知道了傳輸數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào),已經(jīng)傳輸數(shù)據(jù)的長度,便知道了傳輸?shù)臄?shù)據(jù)中每一個(gè)字節(jié)的序號(hào)(TCP將每個(gè)字節(jié)的數(shù)據(jù)都進(jìn)行了編號(hào),即為序列號(hào))
? ? ? ? 四.32位確認(rèn)序號(hào)
? ? ? ? 維持TCP可靠性的結(jié)構(gòu),確認(rèn)序號(hào)表示的是接收方接收到網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)后,最后一個(gè)字節(jié)的序號(hào)再加1,就表示在這個(gè)序號(hào)之前的數(shù)據(jù)都成功接收到了,而在這個(gè)序號(hào)之后的數(shù)據(jù)沒有接收到。
? ? ? ? 當(dāng)接收到數(shù)據(jù)了以后,得到了確認(rèn)序號(hào),確認(rèn)序號(hào)將作為應(yīng)答報(bào)文傳遞給發(fā)送方,發(fā)送方能根據(jù)確認(rèn)序號(hào)判斷數(shù)據(jù)有沒有被成功發(fā)送(確認(rèn)應(yīng)答),要是沒有被成功發(fā)送的話就要進(jìn)行重發(fā)(這就體現(xiàn)了TCP協(xié)議的可靠性)確認(rèn)應(yīng)答是TCP保證可靠性的最核心機(jī)制
? ? ? ? 五.4位首部長度
? ? ? ? 首部長度表示的是TCP報(bào)頭的長度,TCP報(bào)頭是變長的,4bit表示的范圍是0-15,要是單位是字節(jié)的話很明顯是不夠TCP報(bào)頭所占用的長度的,所以這里的單位是4字節(jié),0-60才是真正的TCP報(bào)頭的取值范圍
????????TCP報(bào)頭的變長性體現(xiàn)在選項(xiàng)這個(gè)結(jié)構(gòu)上,選項(xiàng)可以沒有,也可以有多個(gè),所以正確來說,TCP報(bào)頭最小占20個(gè)字節(jié),最多占60個(gè)字節(jié)
? ? ? ? 保留6位
????????保留6位應(yīng)該是吸取了UDP有長度限制的教訓(xùn),因?yàn)楫?dāng)前我們用4位首部長度來表示TCP數(shù)據(jù)報(bào)報(bào)頭的長度已經(jīng)夠用了,但不一定未來會(huì)夠用,所以這里保留6位,就是給未來留下了可以升級和擴(kuò)展的空間
? ? ? ? 六.6個(gè)標(biāo)志位
? ? ? ? 這6個(gè)標(biāo)志位表示當(dāng)前信息的類別
? ? ? ? 七.16位窗口大小
? ? ? ? 這個(gè)字段,只是對ACK應(yīng)答報(bào)文有意義,這個(gè)數(shù)字就表示了當(dāng)前接收方緩沖區(qū)的剩余空間大小,這個(gè)數(shù)字返回給發(fā)送方,發(fā)送方就知道下一輪發(fā)送多少數(shù)據(jù),接收方才處理得過來,所以可以作為發(fā)送方下一輪發(fā)送的依據(jù)。
? ? ? ? 八.16位校驗(yàn)和
? ? ? ? TCP中的校驗(yàn)和與UDP中的校驗(yàn)和作用相同,在發(fā)送方計(jì)算一下發(fā)送的二進(jìn)制數(shù)據(jù)的總和(校驗(yàn)和),然后將二進(jìn)制數(shù)據(jù)已經(jīng)計(jì)算的校驗(yàn)和一起發(fā)送給接收方,接收方接收到數(shù)據(jù)以后再根據(jù)接收到的二進(jìn)制數(shù)據(jù)計(jì)算一次總和(新校驗(yàn)和),將接收到的校驗(yàn)和與新校驗(yàn)和進(jìn)行比較,要是相同就表明接收到的數(shù)據(jù)正確,要是不同就表示錯(cuò)誤
? ? ? ? 九.選項(xiàng)
? ? ? ? TCP中提供了很多選項(xiàng)來進(jìn)行一些特殊操作,比如擴(kuò)充TCP報(bào)頭的長度,這里就不一一介紹了
? ? ? ? 十.數(shù)據(jù)
? ? ? ? 數(shù)據(jù)就是要傳遞信息的具體內(nèi)容,這里才是具體要傳輸?shù)臄?shù)據(jù),之前的結(jié)構(gòu)都是TCP報(bào)頭的結(jié)構(gòu)
? ? ? ??
????????文章來源地址http://www.zghlxwxcb.cn/news/detail-692880.html文章來源:http://www.zghlxwxcb.cn/news/detail-692880.html
????????
到了這里,關(guān)于TCP數(shù)據(jù)報(bào)結(jié)構(gòu)分析(面試重點(diǎn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!