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

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

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

如何解釋TCP報(bào)文的內(nèi)容

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-08-31 09:12 ? 次閱讀

TCP報(bào)文格式

TCP協(xié)議有著自己的數(shù)據(jù)包格式,這里把TCP的數(shù)據(jù)包稱為報(bào)文段(segment),TCP報(bào)文段封裝在IP數(shù)據(jù)報(bào)中發(fā)送,TCP報(bào)文段由TCP首部和TCP數(shù)據(jù)區(qū)組成,首部區(qū)域包含了連接建立與斷開、數(shù)據(jù)確認(rèn)、窗口大小通告、數(shù)據(jù)發(fā)送相關(guān)的所有標(biāo)志和控制信息。如下圖:

d0e7bfa2-28c3-11ed-ba43-dac502259ad0.png

首部的大小為20~60字節(jié),在沒有任何選項(xiàng)的情況下,首部大小為20字節(jié),與不含選項(xiàng)字段的IP報(bào)首部大小相同。TCP報(bào)文中的數(shù)據(jù)部分可以為空,例如在一個(gè)連接建立或斷開時(shí),雙方交換的報(bào)文段僅有TCP首部;又如當(dāng)一方?jīng)]有任何數(shù)據(jù)需要發(fā)送,則它需要使用不包含任何數(shù)據(jù)的報(bào)文段來發(fā)送確認(rèn)信息。

1、源端口號(hào)和目的端口號(hào)兩個(gè)字段用于標(biāo)識(shí)發(fā)送端和接收端應(yīng)用進(jìn)程分別綁定的端口號(hào)。這兩個(gè)值加上IP數(shù)據(jù)報(bào)首部中的源IP地址和目的IP地址就能唯一確定一個(gè)TCP連接

2、32位序號(hào)字段標(biāo)識(shí)了從TCP發(fā)送端到TCP接收端的數(shù)據(jù)字節(jié)編號(hào),它的值為當(dāng)前報(bào)文段中第一個(gè)數(shù)據(jù)的字節(jié)序號(hào)。在接收方,先計(jì)算出數(shù)據(jù)區(qū)數(shù)據(jù)的長(zhǎng)度,然后使用首部中的序號(hào)字段,就能計(jì)算出報(bào)文最后一個(gè)字節(jié)數(shù)據(jù)的序號(hào)。當(dāng)建立一個(gè)新連接時(shí),握手報(bào)文首部中的SYN標(biāo)志置1,此時(shí),序號(hào)字段包含由發(fā)送方隨機(jī)選擇的初始序號(hào)ISN(Initial Sequence Number)。建立連接的報(bào)文(SYN)將占用一個(gè)數(shù)據(jù)編號(hào),因此發(fā)送方隨后將要發(fā)送數(shù)據(jù)的第一個(gè)字節(jié)序號(hào)為ISN+1

3、32位確認(rèn)序號(hào)只有ACK標(biāo)志為1時(shí)才有效,它包含了本機(jī)所期望收到的下一個(gè)數(shù)據(jù)序號(hào),確認(rèn)常常和反向數(shù)據(jù)一起捎帶發(fā)送

4、4位首部長(zhǎng)度指出了TCP首部的長(zhǎng)度,以4字節(jié)為單位。需要這個(gè)值是因?yàn)檫x項(xiàng)字段的長(zhǎng)度是可變的。由于這個(gè)字段有4bit,因此TCP最多有60字節(jié)的首部,如果沒有任何選項(xiàng)字段,首部長(zhǎng)度應(yīng)該為5(20字節(jié))

5、在TCP首部中有6個(gè)標(biāo)志bit,它們中的多個(gè)可同時(shí)被設(shè)置為1,它們告訴了接收端應(yīng)該如何解釋報(bào)文的內(nèi)容,比如一些報(bào)文段攜帶了確認(rèn)信息、一些報(bào)文段攜帶了緊急數(shù)據(jù)、一些報(bào)文包含建立或關(guān)閉連接的請(qǐng)求。6個(gè)標(biāo)志位的意義如下圖:

d1072b12-28c3-11ed-ba43-dac502259ad0.png

6、窗口大小字段可看作捎帶的另一個(gè)例子,窗口通告可以附加在任何報(bào)文段中發(fā)送。在TCP發(fā)送一個(gè)報(bào)文時(shí),可在窗口字段中填寫相應(yīng)值以通知對(duì)方自己的可用緩沖區(qū)大?。ㄒ宰止?jié)為單位),報(bào)文接收方需要根據(jù)這個(gè)值來調(diào)整發(fā)送窗口的大小。這個(gè)字段是16bit的,所以通告窗口的最大值為65535字節(jié)。窗口字段是實(shí)現(xiàn)流量控制的關(guān)鍵字段,當(dāng)接收方向發(fā)送方通知一個(gè)大小為0的窗口時(shí),將完全阻止發(fā)送方的數(shù)據(jù)發(fā)送

7、16位的緊急指針只有當(dāng)緊急標(biāo)志位URG置位時(shí)才有效,此時(shí)報(bào)文中包含了緊急數(shù)據(jù),緊急數(shù)據(jù)始終放在報(bào)文段數(shù)據(jù)開始的地方,而緊急指針定義出了緊急數(shù)據(jù)在數(shù)據(jù)區(qū)中的結(jié)束處,用這個(gè)值加上序號(hào)字段值就得到了最后一個(gè)緊急數(shù)據(jù)的序號(hào)

構(gòu)造TCP報(bào)文段

接下來,我們使用結(jié)構(gòu)體來定義TCP報(bào)文,該結(jié)構(gòu)體定義在level-ip的include/tcp.h文件中:

struct tcphdr {    uint16_t sport;    uint16_t dport;    uint32_t seq;    uint32_t ack_seq;    uint8_t rsvd : 4;    uint8_t hl : 4;    uint8_t fin : 1,            syn : 1,            rst : 1,            psh : 1,            ack : 1,            urg : 1,            ece : 1,            cwr : 1;    uint16_t win;    uint16_t csum;    uint16_t urp;    uint8_t data[];} __attribute__((packed));

這個(gè)結(jié)構(gòu)體的成員變量,與我們剛才介紹的TCP報(bào)文格式的每個(gè)字段是一一對(duì)應(yīng)的,這里不再重復(fù)解析。

tcp報(bào)文發(fā)送接口

tcp數(shù)據(jù)的發(fā)送接口tcp_transmit_skb,會(huì)在tcp建立可靠連接和數(shù)據(jù)發(fā)送時(shí)被多次調(diào)用,如三次握手、write()、read()等。在level-ip中,該接口函數(shù)保存在src cp_output.c文件中。如下圖:

static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, uint32_t seq){    struct tcp_sock *tsk = tcp_sk(sk);    struct tcb *tcb = &tsk->tcb;    struct tcphdr *thdr = tcp_hdr(skb);
    /* No options were previously set */    if (thdr->hl == 0) thdr->hl = TCP_DOFFSET;
    skb_push(skb, thdr->hl * 4);
    thdr->sport = sk->sport;    thdr->dport = sk->dport;    thdr->seq = seq;    thdr->ack_seq = tcb->rcv_nxt;    thdr->rsvd = 0;    thdr->win = tcb->rcv_wnd;    thdr->csum = 0;    thdr->urp = 0;
    if (thdr->hl > 5) {        tcp_write_options(tsk, thdr);    }
    tcp_out_dbg(thdr, sk, skb);
    thdr->sport = htons(thdr->sport);    thdr->dport = htons(thdr->dport);    thdr->seq = htonl(thdr->seq);    thdr->ack_seq = htonl(thdr->ack_seq);    thdr->win = htons(thdr->win);    thdr->csum = htons(thdr->csum);    thdr->urp = htons(thdr->urp);    thdr->csum = tcp_v4_checksum(skb, htonl(sk->saddr), htonl(sk->daddr));        return ip_output(sk, skb);}

第12行:設(shè)置源端口號(hào)

第13行:設(shè)置目標(biāo)端口號(hào)

第14行:自己發(fā)送的數(shù)據(jù)的起始序號(hào)

第15行:通知對(duì)方期望接收的下一字節(jié)的序號(hào)

在IP協(xié)議中,會(huì)對(duì)每個(gè)數(shù)據(jù)報(bào)進(jìn)行編號(hào),而在TCP中沒有報(bào)文編號(hào)的概念,因?yàn)樗哪繕?biāo)是數(shù)據(jù)流傳輸,數(shù)據(jù)流由連續(xù)的字節(jié)流組成,盡管在上層可能用各種各樣的數(shù)據(jù)結(jié)構(gòu)和格式來描述數(shù)據(jù),但在TCP看來,數(shù)據(jù)都是字節(jié)流。TCP把一個(gè)連接中的所有數(shù)據(jù)字節(jié)都進(jìn)行了編號(hào),當(dāng)然兩個(gè)方向上的編號(hào)是彼此獨(dú)立的,編號(hào)的初始值由發(fā)送數(shù)據(jù)的一方隨機(jī)選取,編號(hào)取值是0~2^32-1,比如發(fā)送方選擇的起始編號(hào)為20,且將要發(fā)送的數(shù)據(jù)長(zhǎng)度為800字節(jié),那么字節(jié)編號(hào)將覆蓋20到819的范圍。當(dāng)所有字節(jié)被編上號(hào)后,字節(jié)流會(huì)被分裝在若干個(gè)TCP報(bào)文中發(fā)送,此時(shí)TCP報(bào)文首部的字段能夠記錄它所運(yùn)載數(shù)據(jù)的起始編號(hào)以及運(yùn)載數(shù)據(jù)的長(zhǎng)度。在接收端,可以根據(jù)這些信息對(duì)報(bào)文中數(shù)據(jù)進(jìn)行排序和確認(rèn)。例如,將上述的800字節(jié)放在三個(gè)報(bào)文段中來發(fā)送,前兩個(gè)報(bào)文段各裝載了300字節(jié)的數(shù)據(jù),最后一個(gè)報(bào)文裝載了200字節(jié)的數(shù)據(jù),則三個(gè)報(bào)文段攜帶的數(shù)據(jù)情況如下:

報(bào)文段1:起始序號(hào):20,數(shù)據(jù)長(zhǎng)度:300,序號(hào)范圍:20~319

報(bào)文段2:起始序號(hào):320,數(shù)據(jù)長(zhǎng)度:300,序號(hào)范圍:320~619

報(bào)文段3:起始序號(hào):620,數(shù)據(jù)長(zhǎng)度:200,序號(hào)范圍:620~819

接收方通過確認(rèn)的機(jī)制來告訴發(fā)送方數(shù)據(jù)的接收狀況,這是通過向發(fā)送方返回一個(gè)確認(rèn)號(hào)來完成的,確認(rèn)號(hào)標(biāo)識(shí)出自己期望接收到的下一個(gè)字節(jié)的編號(hào),例如在上面的例子中,如果接收方接收到了報(bào)文段1,則它返回給發(fā)送方的確認(rèn)號(hào)為320,表示自己期望收到數(shù)據(jù)編號(hào)為320的數(shù)據(jù);確認(rèn)號(hào)是累計(jì)的,即如果發(fā)送方接收到確認(rèn)號(hào)的值為620,說明接收方已經(jīng)正確接收了620編號(hào)以前的所有數(shù)據(jù),接收方可能是在收到兩個(gè)報(bào)文段后才發(fā)送的一個(gè)確認(rèn);還有一種情況,如果接收方只收到報(bào)文段1和3,那么它返回的確認(rèn)號(hào)仍然是320,確認(rèn)號(hào)始終表示接收方期望的下一字節(jié)數(shù)據(jù),盡管可能已有更高編號(hào)的數(shù)據(jù)被收到

第16行:保留位

第17行:設(shè)置滑動(dòng)窗口大小

在數(shù)據(jù)發(fā)送端,所有數(shù)據(jù)流按照順序被組織在發(fā)送緩存中,什么時(shí)候發(fā)送數(shù)據(jù)以及發(fā)送的多少是由滑動(dòng)窗口決定的,使用窗口滑動(dòng)的概念可以達(dá)到很好的流量控制效果和擁塞控制效果。如下圖所示,滑動(dòng)窗口可以看成定義在數(shù)據(jù)緩沖上的一個(gè)窗口,緩沖中存放了從應(yīng)用程序傳遞過來的待發(fā)送數(shù)據(jù),窗口能在緩沖上滑動(dòng),滑動(dòng)窗口狀態(tài)決定了TCP能發(fā)送哪些數(shù)據(jù)。滑動(dòng)窗口較大時(shí), TCP可以在收到確認(rèn)之前一次性地發(fā)送幾個(gè)報(bào)文段,這樣,可以使得網(wǎng)絡(luò)總是處于忙碌狀態(tài),提高網(wǎng)絡(luò)的吞吐率。當(dāng)發(fā)送窗口較小時(shí),能夠被發(fā)送的報(bào)文很少,在極端情況下,當(dāng)發(fā)送窗口為0時(shí),沒有任何報(bào)文能被發(fā)送,減少報(bào)文的發(fā)送是進(jìn)行擁塞控制的最直接手段。因此,流量控制和擁塞控制的本質(zhì)在于對(duì)發(fā)送窗口的合理調(diào)節(jié)

第18行:校驗(yàn)和設(shè)置為0

第19行:緊急指針設(shè)置為0,

TCP采用了緩沖機(jī)制來保證協(xié)議的高效性,在數(shù)據(jù)發(fā)送時(shí),TCP內(nèi)核將延遲小分組數(shù)據(jù)的交付,它將等待足夠長(zhǎng)的時(shí)間,以期待接收更多的應(yīng)用數(shù)據(jù),最后再一起發(fā)送;在接收數(shù)據(jù)時(shí),TCP首先是先將數(shù)據(jù)放在接收緩沖中,只有在應(yīng)用程序準(zhǔn)備就緒或者TCP協(xié)議認(rèn)為時(shí)機(jī)恰當(dāng)?shù)臅r(shí)候,數(shù)據(jù)才會(huì)被交付給應(yīng)用程序。上述緩沖機(jī)制是出于對(duì)網(wǎng)絡(luò)性能提升的考慮,但是它可能會(huì)妨礙某些應(yīng)用程序的使用。例如,兩個(gè)應(yīng)用程序進(jìn)行交互式通信,一端應(yīng)用程序打算把用戶鍵入的字符發(fā)送給另一端應(yīng)用程序,并且期望對(duì)方立即響應(yīng)。在這種情況下,TCP的數(shù)據(jù)收集與延遲發(fā)送、緩沖遞交會(huì)給用戶帶來很不好的體驗(yàn)。為了滿足交互式應(yīng)用場(chǎng)合的需求,TCP可以采用下面的方式解決這個(gè)問題。發(fā)送方應(yīng)用程序向TCP傳遞數(shù)據(jù)時(shí),請(qǐng)求推送(push)操作,這時(shí),TCP協(xié)議不會(huì)等待發(fā)送緩沖區(qū)被填滿,而是直接將報(bào)文發(fā)送出去。同時(shí),被推送出去的報(bào)文首部中推送位(PSH)將被置1,接收端在收到這類報(bào)文時(shí),會(huì)盡快將數(shù)據(jù)遞交給應(yīng)用程序,而不必緩沖更多的數(shù)據(jù)再遞交

tcp接收接口

tcp數(shù)據(jù)接收接口為tcp_in()函數(shù)。該函數(shù)在ip數(shù)據(jù)幀讀取接口ip_rcv()函數(shù)中調(diào)用。該函數(shù)保存在srcip_input.c文件中,我們來了解一下這個(gè)函數(shù),如下圖:

void tcp_in(struct sk_buff *skb){    struct sock *sk;    struct iphdr *iph;    struct tcphdr *th;
    iph = ip_hdr(skb);    th = (struct tcphdr*) iph->data;
    tcp_init_segment(th, iph, skb);        sk = inet_lookup(skb, th->sport, th->dport);
    if (sk == NULL) {        print_err("No TCP socket for sport %d dport %d
",                  th->sport, th->dport);        free_skb(skb);        return;    }    socket_wr_acquire(sk->sock);
    tcp_in_dbg(th, sk, skb);    /* if (tcp_checksum(iph, th) != 0) { */    /*     goto discard; */    /* } */    tcp_input_state(sk, th, skb);
    socket_release(sk->sock);}

第7行:從sk_buff中讀取ip首部信息

第8行:從ip數(shù)據(jù)包的data區(qū)域中讀取tcp數(shù)據(jù)信息

第10行:進(jìn)行關(guān)鍵字段的大小端變換和計(jì)算應(yīng)答序號(hào)等

第12行:根據(jù)通信端口,查找管理該次tcp連接的結(jié)構(gòu)體sock

第20行:獲取該結(jié)構(gòu)體的讀寫鎖

第26行:數(shù)據(jù)遞交給tcp_input_state()函數(shù)處理,該函數(shù)會(huì)進(jìn)行tcp通信狀態(tài)的變化,以及獲取把整理好的有序報(bào)文遞交給應(yīng)用程序。

總結(jié)

在對(duì)可靠性要求很高的場(chǎng)合下,使用TCP提供的傳輸性能是很合適的,TCP將兩個(gè)進(jìn)程間傳遞的數(shù)據(jù)看作數(shù)據(jù)流的形式,兩個(gè)先后發(fā)出的TCP報(bào)文雖然在網(wǎng)絡(luò)中也是互不相關(guān)的傳輸,但是它們攜帶的數(shù)據(jù)之間卻具有關(guān)聯(lián)關(guān)系,因?yàn)門CP給傳輸?shù)拿總€(gè)字節(jié)數(shù)據(jù)一個(gè)唯一的編號(hào)。在接收端,所有數(shù)據(jù)將按照編號(hào)被順序組織起來,當(dāng)所有數(shù)據(jù)接收成功后,TCP才把數(shù)據(jù)遞交給應(yīng)用層。應(yīng)用層不必?fù)?dān)心報(bào)文的亂序、重復(fù)、丟失等問題,TCP采用正面確認(rèn)以及超時(shí)重傳等機(jī)制保證數(shù)據(jù)流能全部正確到達(dá)。

但是,我們這篇文章還沒涉及到這部分的內(nèi)容,但是我們已經(jīng)找到分析的突破口,那就是上面所提到的tcp_input_state()函數(shù),以后我們將在該函數(shù)里面剖析tcp種種可靠性機(jī)制。

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

    關(guān)注

    33

    文章

    8360

    瀏覽量

    150523
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6760

    瀏覽量

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

    關(guān)注

    8

    文章

    1337

    瀏覽量

    78863

原文標(biāo)題:level-ip之tcp數(shù)據(jù)包接口封裝

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Modbus TCP通信報(bào)文解析

    Modbus TCP是在TCP/IP網(wǎng)絡(luò)上運(yùn)行的Modbus的實(shí)現(xiàn),旨在允許Modbus ASCII/RTU協(xié)議在基于TCP/IP的網(wǎng)絡(luò)上傳輸。
    發(fā)表于 09-20 15:55 ?2.6w次閱讀
    Modbus <b class='flag-5'>TCP</b>通信<b class='flag-5'>報(bào)文</b>解析

    TC387模塊CAN0的節(jié)點(diǎn)2作為CANA使用,CANA既收不到報(bào)文也發(fā)不出報(bào)文何解決?

    的節(jié)點(diǎn)2寄存器TX->TRP和TX->BRP在第一次發(fā)送報(bào)文時(shí)被置為1,后續(xù)報(bào)文無法繼續(xù)發(fā)送。請(qǐng)問如何解決?
    發(fā)表于 02-19 06:43

    ESP8266怎樣實(shí)現(xiàn)TCP數(shù)據(jù)報(bào)文的異步處理?

    我的TCP報(bào)文都在TCP 接收報(bào)文espconn_regist_recvcb(user_contype.pCon, _we_link_client_rcv_cb)中處理的,我的
    發(fā)表于 07-12 11:40

    LWIP TCP報(bào)文基礎(chǔ)知識(shí)及其LWIP中TCP協(xié)議的實(shí)現(xiàn)

    LWIP TCP報(bào)文基礎(chǔ)TCP協(xié)議(Transmission Control Protocol)傳輸控制協(xié)議在LWIP協(xié)議棧中占據(jù)了大半的代碼,它是最常見的傳輸層協(xié)議,也是最穩(wěn)定的傳輸層協(xié)議,很多
    發(fā)表于 10-18 14:54

    TCP/IP協(xié)議,TCP/IP協(xié)議內(nèi)容和作用是什么?

    TCP/IP協(xié)議,TCP/IP協(xié)議內(nèi)容和作用是什么? TCP/IP是一組協(xié)議的代名詞,它還包括許多別的協(xié)議,組成了TCP/IP協(xié)議簇。一般
    發(fā)表于 03-19 13:55 ?5784次閱讀

    ICMP控制報(bào)文協(xié)議

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

    Modbus/TCP通訊配置

    MODBUSTCP 是簡(jiǎn)單的、中立廠商的用于管理和控制自動(dòng)化設(shè)備的MODBUS 系列通訊協(xié)議的派生產(chǎn)品,它覆蓋了使用TCP/IP 協(xié)議的Intranet和Internet環(huán)境中MODBUS 報(bào)文
    發(fā)表于 09-30 09:13 ?38次下載
    Modbus/<b class='flag-5'>TCP</b>通訊配置

    icmp報(bào)文和ip報(bào)文分析

    . ICMP允許主機(jī)或路由報(bào)告差錯(cuò)情況和提供有關(guān)異常情況。ICMP是因特網(wǎng)的標(biāo)準(zhǔn)協(xié)議,但I(xiàn)CMP不是高層協(xié)議,而是IP層的協(xié)議。通常ICMP報(bào)文被IP層或更高層協(xié)議(TCP或UDP)使用。一些ICMP報(bào)文把差錯(cuò)
    發(fā)表于 11-03 09:09 ?9822次閱讀
    icmp<b class='flag-5'>報(bào)文</b>和ip<b class='flag-5'>報(bào)文</b>分析

    tcp報(bào)文格式詳解

    TCP(Transmission ControProtocol)傳輸控制協(xié)議是一種面向連接的、可靠的、基于字節(jié)流的傳輸層協(xié)議。TCP報(bào)文TCP層傳輸?shù)臄?shù)據(jù)單元,也稱為
    發(fā)表于 12-08 11:11 ?3.2w次閱讀
    <b class='flag-5'>tcp</b><b class='flag-5'>報(bào)文</b>格式詳解

    TCP IP相關(guān)知識(shí)的詳細(xì)資料說明免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是TCP IP相關(guān)知識(shí)的詳細(xì)資料說明免費(fèi)下載。主要內(nèi)容包括了:TCP報(bào)文格式,
    發(fā)表于 12-05 11:19 ?19次下載
    <b class='flag-5'>TCP</b> IP相關(guān)知識(shí)的詳細(xì)資料說明免費(fèi)下載

    tcp數(shù)據(jù)包接口封裝的介紹

    TCP報(bào)文格式 TCP協(xié)議有著自己的數(shù)據(jù)包格式,這里把TCP的數(shù)據(jù)包稱為報(bào)文段(segment),TCP
    的頭像 發(fā)表于 03-22 09:39 ?3343次閱讀
    <b class='flag-5'>tcp</b>數(shù)據(jù)包接口封裝的介紹

    詳解TCP報(bào)文的頭部結(jié)構(gòu)

    和兩個(gè)端口號(hào)。一個(gè)TCP連接通常分為三個(gè)階段:連接、數(shù)據(jù)傳輸、退出(關(guān)閉)。通過三次握手建立一個(gè)鏈接,通過四次揮手來關(guān)閉一個(gè)連接。當(dāng)一個(gè)連接被建立或被終止時(shí),交換的報(bào)文段只包含TCP頭部,而沒有數(shù)據(jù)。
    的頭像 發(fā)表于 05-05 15:08 ?6548次閱讀

    tcp報(bào)文段首部的結(jié)構(gòu)分析

    `TCP`報(bào)文段如`APR`報(bào)文、`IP`數(shù)據(jù)報(bào)一樣,也是由`首部`與`數(shù)據(jù)區(qū)域`組成,`TCP首部`內(nèi)容很豐富,各個(gè)字段都有特定的含義,一
    的頭像 發(fā)表于 02-14 10:32 ?2124次閱讀
    <b class='flag-5'>tcp</b><b class='flag-5'>報(bào)文</b>段首部的結(jié)構(gòu)分析

    接收UDP報(bào)文的過程

    最近工作中遇到某個(gè)服務(wù)器應(yīng)用程序 UDP 丟包,在排查過程中查閱了很多資料,總結(jié)出來這篇文章,供更多人參考。 在開始之前,我們先用一張圖解釋 linux 系統(tǒng)接收網(wǎng)絡(luò)報(bào)文的過程。 首先網(wǎng)絡(luò)報(bào)文通過
    的頭像 發(fā)表于 11-11 11:22 ?806次閱讀
    接收UDP<b class='flag-5'>報(bào)文</b>的過程

    CCLink轉(zhuǎn)Modbus TCP網(wǎng)關(guān)_MODBUS報(bào)文配置

    興達(dá)易控CCLink轉(zhuǎn)Modbus TCP網(wǎng)關(guān)是一種功能強(qiáng)大的設(shè)備,可實(shí)現(xiàn)兩個(gè)不同通信協(xié)議之間的無縫對(duì)接。它能夠?qū)CLink協(xié)議轉(zhuǎn)換為Modbus TCP協(xié)議,并通過報(bào)文配置實(shí)現(xiàn)靈活的通信設(shè)置。興
    的頭像 發(fā)表于 11-15 09:05 ?477次閱讀
    CCLink轉(zhuǎn)Modbus <b class='flag-5'>TCP</b>網(wǎng)關(guān)_MODBUS<b class='flag-5'>報(bào)文</b>配置