0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TCP協(xié)議原理詳解

CHANBAEK ? 來(lái)源:嵌入式攻城獅 ? 作者:安迪西 ? 2023-04-21 12:41 ? 次閱讀

1. TCP報(bào)文封裝

一個(gè)典型的使用TCP協(xié)議封裝的數(shù)據(jù)包,包括以太網(wǎng)MAC頭+網(wǎng)絡(luò)層IP數(shù)據(jù)頭+傳輸層TCP頭+要傳輸?shù)臄?shù)據(jù)。 詳見(jiàn)下圖所示:

圖片

2. TCP報(bào)文結(jié)構(gòu)

TCP(Transmission Control Protocol,傳輸控制協(xié)議)提供的是面向連接,可靠的字節(jié)流服務(wù)。 即客戶和服務(wù)器交換數(shù)據(jù)前,必須現(xiàn)在雙方之間建立一個(gè)TCP連接,之后才能傳輸數(shù)據(jù)。 并且提供超時(shí)重發(fā),丟棄重復(fù)數(shù)據(jù),檢驗(yàn)數(shù)據(jù),流量控制等功能,保證數(shù)據(jù)能從一端傳到另一端。

TCP報(bào)文結(jié)構(gòu)如下圖示:

圖片

TCP報(bào)文結(jié)構(gòu)各字段功能如下示:

端口號(hào):表示發(fā)送端端口號(hào),字段長(zhǎng)16bit

目標(biāo)端口:表示接收端端口號(hào),字段長(zhǎng)16bit

序號(hào):字段長(zhǎng)32bit,是指發(fā)送數(shù)據(jù)的位置。 每發(fā)送一次數(shù)據(jù),就累加一次該數(shù)據(jù)字節(jié)數(shù)的大小

確認(rèn)序號(hào):字段長(zhǎng)32bit,是指下一次應(yīng)該收到的數(shù)據(jù)的序列號(hào)。 實(shí)際上,它是指已收到確認(rèn)應(yīng)答號(hào)減一為止的數(shù)據(jù)。 發(fā)送端收到這個(gè)確認(rèn)應(yīng)答以后可以認(rèn)為在這個(gè)序號(hào)以前的數(shù)據(jù)都已經(jīng)被正常接收

首部長(zhǎng)度:字段長(zhǎng)4bit,它指出了 TCP 報(bào)文段首部長(zhǎng)度,以字節(jié)為單位,最大能記錄15*4=60字節(jié)的首部長(zhǎng)度

保留:字段長(zhǎng)6bit,主要是為了以后擴(kuò)展時(shí)使用。 一般設(shè)置為0

標(biāo)志字段:字段長(zhǎng)6bit,這些控制標(biāo)志也叫做控制位

  • URG:表示本報(bào)文段中發(fā)送的數(shù)據(jù)是否包含緊急數(shù)據(jù)。 URG=1,表示有緊急數(shù)據(jù)。 后面的緊急指針字段只有當(dāng)URG=1時(shí)才有效
  • ACK:表示是否前面的確認(rèn)號(hào)字段是否有效。 ACK=1,表示有效。 只有當(dāng)ACK=1時(shí),前面的確認(rèn)號(hào)字段才有效。 TCP規(guī)定,連接建立后,ACK必須為1
  • PSH:告訴對(duì)方收到該報(bào)文段后是否應(yīng)該立即把數(shù)據(jù)推送給上層。 如果為1,則表示對(duì)方應(yīng)當(dāng)立即把數(shù)據(jù)提交給上層,而不是緩存起來(lái)
  • RST:只有當(dāng)RST=1時(shí)才有用。 如果你收到一個(gè)RST=1的報(bào)文,說(shuō)明你與主機(jī)的連接出現(xiàn)了嚴(yán)重錯(cuò)誤(如主機(jī)崩潰),必須釋放連接,然后再重新建立連接。 或者說(shuō)明你上次發(fā)送給主機(jī)的數(shù)據(jù)有問(wèn)題,主機(jī)拒絕響應(yīng)
  • SYN:在建立連接時(shí)使用,用來(lái)同步序號(hào)。當(dāng)SYN=1,ACK=0時(shí),表示這是一個(gè)請(qǐng)求建立連接的報(bào)文段;當(dāng)SYN=1,ACK=1時(shí),表示對(duì)方同意建立連接。SYN=1,說(shuō)明這是一個(gè)請(qǐng)求建立連接或同意建立連接的報(bào)文。只有在前兩次握手中SYN才置為1
  • FIN:標(biāo)記數(shù)據(jù)是否發(fā)送完畢。如果FIN=1,就相當(dāng)于告訴對(duì)方:“我的數(shù)據(jù)已經(jīng)發(fā)送完畢,你可以釋放連接了”

窗口大小:字段長(zhǎng)16bit,TCP的流量控制由連接的每一端通過(guò)聲明的窗口大小來(lái)提供,窗口大小為字節(jié)數(shù),起始于確認(rèn)序號(hào)字段指明的值,這個(gè)值是接收端正期望接收的數(shù)據(jù)序號(hào),發(fā)送方根據(jù)窗口大小調(diào)整發(fā)送數(shù)據(jù),以實(shí)現(xiàn)流量控制。 窗口最大為 65535 字節(jié),當(dāng)接收方告訴發(fā)送方一個(gè)大小為 0 的窗口時(shí),將完全阻止發(fā)送方的數(shù)據(jù)發(fā)送

校驗(yàn)和:檢驗(yàn)和覆蓋了整個(gè)的 TCP 報(bào)文段(TCP 首部和 TCP 數(shù)據(jù)區(qū)域),由發(fā)送端計(jì)算和填寫(xiě),并由接收端進(jìn)行驗(yàn)證

緊急字段:只有當(dāng)URG標(biāo)志置1時(shí)緊急指針才有效,緊急指針是一個(gè)正的偏移量,和序號(hào)字段中的值相加表示緊急數(shù)據(jù)最后一個(gè)字節(jié)的序號(hào)。 簡(jiǎn)單來(lái)說(shuō),本TCP報(bào)文段的緊急數(shù)據(jù)在報(bào)文段數(shù)據(jù)區(qū)域中,從序號(hào)字段開(kāi)始,偏移緊急指針的值結(jié)束

選項(xiàng)字段:選項(xiàng)字段用于提高TCP的傳輸性能。 其最大長(zhǎng)度可根據(jù)TCP首部長(zhǎng)度進(jìn)行推算。 TCP首部長(zhǎng)度用4位表示,那么選項(xiàng)部分最長(zhǎng)為:(2^4-1)*4-20=40字節(jié)

圖片

  • kind=2,最大報(bào)文段長(zhǎng)度(MSS)選項(xiàng):MSS選項(xiàng)用于在建立連接時(shí)決定最大段長(zhǎng)度的情況,該選項(xiàng)用于大部分操作系統(tǒng)。TCP連接初始化時(shí),通信雙方使用該選項(xiàng)來(lái)協(xié)商最大報(bào)文段長(zhǎng)度。TCP模塊通常將MSS設(shè)置為(MTU-40)字節(jié)(減掉的這40字節(jié)包括20字節(jié)的TCP頭部和20字節(jié)的IP頭部)。這樣攜帶TCP報(bào)文段的IP數(shù)據(jù)報(bào)的長(zhǎng)度就不會(huì)超過(guò)MTU(假設(shè)TCP頭部和IP頭部都不包含選項(xiàng)字段,并且這也是一般情況),從而避免本機(jī)發(fā)生IP分片。對(duì)以太網(wǎng)而言,MSS值是1460(1500-40)字節(jié)
  • kind=3,窗口擴(kuò)大因子選項(xiàng):是一個(gè)用來(lái)改善TCP吞吐量的選項(xiàng)。 TCP連接初始化時(shí),通信雙方使用該選項(xiàng)來(lái)協(xié)商接收窗口的擴(kuò)大因子。 在TCP的頭部中,接收窗口大小是用16位表示的,故最大為65535字節(jié),但實(shí)際上TCP模塊允許的接收窗口大小遠(yuǎn)不止這個(gè)數(shù)(為了提高TCP通信的吞吐量)。 窗口擴(kuò)大因子解決了這個(gè)問(wèn)題。 假設(shè)TCP頭部中的接收通告窗口大小是N,窗口擴(kuò)大因子(移位數(shù))是M,那么TCP報(bào)文段的實(shí)際接收通告窗口大小是N*2M,或者說(shuō)N左移M位

3. Wireshark抓包分析

將Socket API編程模型一文中的TCP Server工程源碼下載到開(kāi)發(fā)板中,用網(wǎng)線將PC和開(kāi)發(fā)板相連接,開(kāi)啟一個(gè)TCP客戶端,打開(kāi)wireshark軟件,監(jiān)聽(tīng)I(yíng)P地址192.168.1.10

在TCP客戶端發(fā)送數(shù)據(jù)

圖片

wireshark抓取到相應(yīng)的TCP數(shù)據(jù)包,客戶機(jī)向主機(jī)發(fā)送數(shù)據(jù):ACK=1表示確認(rèn)序號(hào)字段有效,PSH=1表示接收方應(yīng)該盡快將這個(gè)報(bào)文段交給應(yīng)用層

圖片

主機(jī)收到數(shù)據(jù)后立即返回相應(yīng)數(shù)據(jù)給客戶機(jī),ACK=1表示確認(rèn)序號(hào)字段有效,PSH=1表示接收方應(yīng)該盡快將這個(gè)報(bào)文段交給應(yīng)用層

圖片

客戶機(jī)再次給出響應(yīng)到主機(jī),ACK=1表示確認(rèn)序號(hào)字段有效,PSH=0表示沒(méi)有數(shù)據(jù)傳遞

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 封裝
    +關(guān)注

    關(guān)注

    125

    文章

    7593

    瀏覽量

    142145
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1324

    瀏覽量

    78756
  • 網(wǎng)絡(luò)層
    +關(guān)注

    關(guān)注

    0

    文章

    39

    瀏覽量

    10276
  • TCP協(xié)議
    +關(guān)注

    關(guān)注

    1

    文章

    89

    瀏覽量

    12046
  • Wireshark
    +關(guān)注

    關(guān)注

    0

    文章

    47

    瀏覽量

    6473
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    TCPIP詳解卷三:TCP事務(wù)協(xié)議,HTTP,NNTP和UNIX域協(xié)議

    TCPIP詳解卷三:TCP事務(wù)協(xié)議,HTTP,NNTP和UNIX域協(xié)議
    發(fā)表于 09-28 12:45

    modbus協(xié)議講解modbus-rtu以及modbus-tcp協(xié)議詳解

    modbus協(xié)議講解modbus-rtu以及modbus-tcp協(xié)議詳解,見(jiàn)附件。
    發(fā)表于 03-01 10:14

    TCP-IP詳解_卷3_TCP事務(wù)協(xié)議,HTTP,NNTP

    TCP-IP詳解_卷3_TCP事務(wù)協(xié)議,HTTP,NNTP和UNIX域協(xié)議
    發(fā)表于 03-24 22:42 ?39次下載

    TCP-IP詳解_卷1_協(xié)議

    TCP-IP詳解_卷1_協(xié)議
    發(fā)表于 03-24 22:45 ?50次下載

    TCP/IP詳解,卷3:tcp事務(wù)協(xié)議等(pdf電子書(shū))

    TCP/IP詳解,卷3:tcp事務(wù)協(xié)議等(pdf電子書(shū)):第三卷的內(nèi)容細(xì)節(jié)覆蓋了當(dāng)今TCP/IP編程人員和網(wǎng)絡(luò)管理員必須熟練掌握的四個(gè)基本方
    發(fā)表于 08-06 08:54 ?505次下載

    tcp ip協(xié)議詳解卷三 下載

    tcp ip協(xié)議詳解卷三:第三卷的內(nèi)容細(xì)節(jié)覆蓋了當(dāng)今TCP/IP編程人員和網(wǎng)絡(luò)管理員必須熟練掌握的四個(gè)基本方面:    T/
    發(fā)表于 05-19 11:52 ?437次下載
    <b class='flag-5'>tcp</b> ip<b class='flag-5'>協(xié)議</b><b class='flag-5'>詳解</b>卷三 下載

    tcp ip協(xié)議詳解卷二

    tcp ip協(xié)議詳解卷二:第13章IGMP:Internet組管理協(xié)議13.1 引言I G M P在本地網(wǎng)絡(luò)上的主機(jī)和路由器之間傳達(dá)組成員信息。路由器定時(shí)向“所有主機(jī)組”多播I G M
    發(fā)表于 05-19 12:00 ?542次下載

    tcp ip協(xié)議詳解卷一

    tcp ip協(xié)議詳解卷一:《TCP/IP詳解,卷1:協(xié)議》是一本完整而詳細(xì)的
    發(fā)表于 05-19 12:02 ?712次下載

    tcp ip協(xié)議_什么是tcp ip協(xié)議

    什么是tcp ip協(xié)議,tcp ip協(xié)議詳解,深刻講述了tcp ip
    發(fā)表于 05-14 16:29 ?5916次閱讀
    <b class='flag-5'>tcp</b> ip<b class='flag-5'>協(xié)議</b>_什么是<b class='flag-5'>tcp</b> ip<b class='flag-5'>協(xié)議</b>

    TCP-IP詳解卷3:TCP事務(wù)協(xié)議,HTTP,NNTP和UNI

    TCP-IP詳解卷3:TCP事務(wù)協(xié)議,HTTP,NNTP和UNIX域協(xié)議,個(gè)人收集整理了很久的資料,大家根據(jù)自己情況,有選擇性的下載吧~
    發(fā)表于 10-27 14:04 ?0次下載

    TCP-IP詳解卷2_ARP:地址解析協(xié)議

    TCP-IP詳解卷2 ARP:地址解析協(xié)議,學(xué)習(xí)TCP很好的資料。歡迎下載。
    發(fā)表于 05-09 14:13 ?0次下載

    TCP:傳輸控制協(xié)議

    TCP-IP詳解卷2 TCP:傳輸控制協(xié)議,學(xué)習(xí)TCP很好的資料。歡迎下載。
    發(fā)表于 05-09 14:33 ?0次下載

    Siemens PLC TCP協(xié)議詳解

    Siemens PLC TCP 協(xié)議詳解 說(shuō)明:藍(lán)色文字表示已經(jīng)破解部分,[紅色文字] 表示對(duì)破解部分?jǐn)?shù)字的說(shuō)明,黑色文字表示對(duì)破解部分的進(jìn)一步說(shuō)明,黑色斜體加粗文字表示未破解部分,高亮文字部 分表示驅(qū)動(dòng)需要處理的部分,未標(biāo)
    發(fā)表于 04-17 11:46 ?3次下載
    Siemens PLC <b class='flag-5'>TCP</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>詳解</b>

    CCLINK IE FIELD BASIC轉(zhuǎn)MODBUS-TCP網(wǎng)關(guān)MODBUS TCP協(xié)議詳解

    協(xié)議的不同,數(shù)據(jù)讀取困難,這是很多生產(chǎn)管理系統(tǒng)的難題。但是現(xiàn)在,遠(yuǎn)創(chuàng)智控YC-CCLKIE-TCP通訊網(wǎng)關(guān),讓這個(gè)問(wèn)題變得非常簡(jiǎn)單。這款通訊網(wǎng)關(guān)可以將各種MODBUS-TCP設(shè)備接入到CCLINK
    的頭像 發(fā)表于 07-11 12:15 ?1280次閱讀
    CCLINK IE FIELD BASIC轉(zhuǎn)MODBUS-<b class='flag-5'>TCP</b>網(wǎng)關(guān)MODBUS <b class='flag-5'>TCP</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>詳解</b>

    LwIP協(xié)議棧源碼詳解TCP/IP協(xié)議的實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《LwIP協(xié)議棧源碼詳解TCP/IP協(xié)議的實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 07-03 11:22 ?1次下載