在线tcp连接(tcp连接是什么意思)

      最后更新:2023-09-25 23:30

      怎么使用TCP向远端SERVER传输数据

      如何使用TCP向远端SERVER传输数据 (发送与接收) 1. 如何使用TCP向远端SERVER传输数据先要建立一个TCP连接.模块作为CLIENT向远程的SERVER发起一个TCP连接,要成功建立连接需要SERVER端为连接到INTERNET的一台PC,而且该PC的IP地址是公网的IP地址(可以用拨号的方式获得,如在PC局域网内部则无法建立连接),然后该PC运行我们的SERVER软件,这时就可以在模块端用AT命令与SERVER建立TCP连接(AT+CIPSTART="TCP","SERVER的IP地址","SERVER的端口号"),连接成功后会返回CONNECTOK.然后就可以用AT+CIPSEND发送数据到SERVER,若SERVER有数据,模块自动通过串口接收.要关闭TCP连接可用AT+CIPCLOSE命令.2. 如何使用UDP向远端SERVER传输数据先要注册一个UDP端口(AT+CIPSTART="UDP","SERVER的IP地址","SERVER的端口号"),成功后返回CONNECT OK.然后用AT+CIPSEND发送UDP包到SERVER,若SERVER有数据,模块自动接收,从串口送出.3. 如何发送数据要发送数据必须先要建立TCP连接或注册一个UDP连接.有3种方式发送数据.可变长度的数据发送可以用AT+CIPSEND命令,返回"$amp;>amp;$quot;后输入发送的数据,ctrl+z(0x1a)启动发送.固定长度的数据发送用AT+CIPSEND=LENGTH命令,返回"> "后输入发送的数据,当输入的数据长度等于LENGTH的时候自动发送,不需结束符.还有一种自动发送方式,先用AT+CIPATS=,命令设定自动发送的时间,然后用AT+CIPSEND返回"$amp;>amp;$quot;输入要发送的数据,等定时到了之后自动发送输入的数据.发送完成之后返回SEND OK.此时处于命令态,若有数据发送再重复以上的步骤就可以了.注意:每次发送的数据长度应小于1024bytes.4. 如何接收数据接收数据为自动接收,若有远端数据则自动接收.可以用AT+CIPHEAD=1在接收的数据前面自动加上标识.SIMCOM Application Note for SIM100 TCP/IP AT Commands45. 如何使用SIM100TCP的SERVER功能模块可以配置为TCPSERVER,接收来自远端的TCP数据.具体的操作如下:AT+CIPCSGP=1,"cmnet"(GPRS方式)AT+CLPORT="TCP","PORT" (设定侦听的TCP的端口号)AT+CIPSERVER (启动SERVER功能,成功后返回SERVER OK,这时候已经启动了SERVER功能,开始侦听PORT)AT+CIFSR (获得SERVER的IP地址)或者:AT+CIPCSGP=0,"17201","172","172", 2 (CSD方式,置为CSD连接,拨17201,用户名和密码皆为172,连接速率为9600)AT+CLPORT="TCP","PORT"(设定侦听的TCP端口号)AT+CIPSERVER(启动SERVER功能,成功后返回CONNECT 9600 和 SERVER OK,这时候已经启动了SERVER功能,开始侦听PORT)AT+CIFSR (获得SERVER的IP地址)可以用SMS通知远端模块本SERVER的IP地址和端口号,以便远端可以与之连接,收发数据.这时远端的模块就可以与本SERVER建立连接,收发数据了.如有CLIENT连接到SERVER,SERVER端会显示 REMOTE CLIENT的IP地址和端口号.这时候SERVER就可以接收来自REMOTE CLIENT的TCP数据包(不含TCP头)了.注意:目前TCP SERVER不能同时支持多个TCP连接.SIMCOM Application Note for SIM100 TCP/IP AT Commands56. 如何使用UDP,接收来自远端的数据可以使用SIM100TCP的UDP功能,接收来自远端的UDP数据.具体过程如下:AT+CIPCSGP=1,"cmnet"(GPRS方式)AT+CLPORT="UDP","端口号"(设置UDP端口号)AT+CSTT (启动TCP任务,成功后返回OK)AT+CIICR (激活场景,成功后返回OK)AT+CIFSR (获得本地IP地址)AT+CIPSTART="UDP","REMOTE IP ADDR","REMOTE PORT"(注册UDP连接,其中"REMOTE IP ADDR"和"REMOTE PORT"可以随便设置一个,成功后返回CONNECT OK)或者AT+CIPCSGP=0,"17201","172","172", 2 (CSD方式,置为CSD连接,拨17201,用户名和密码皆为172,连接速率为9600)AT+CLPORT="UDP","PORT"(设定UDP端口号)AT+CSTT (启动TCP任务)AT+CIICR (激活场景,成功后返回CONNECT 9600和OK)AT+CIFSR (获得本地IP地址)AT+CIPSTART="UDP","REMOTE IP ADDR","REMOTE PORT"(注册UDP连接,其中"REMOTE IP ADDR"和"REMOTE PORT"可以随便设置一个,成功后返回CONNECT OK)此时就模块就可以接收到远端的UDP包.可以用AT+CIPSRIP=1在收到的UDP包的前面加上标识和发送方的IP地址和端口号.SIMCOM Application Note for SIM100 TCP/IP AT Commands67. 如何使用DNS功能利用SIM100TCP的DNS可直接连接到一个域名,或者可以用DNS解析域名获得IP地址.具体步骤如下:直接连接到一个域名1:先配置DNSAT+CDNSCFG="211.136.18.171" (以上海为例)2:选择域名还是IP地址AT+CDNSORIP=1(选择域名)3:建立连接AT+CIPSTART="TCP","", "80" (连接到SERVER)4:发送数据AT+CIPSEND返回"$amp;>amp;$quot;后开始发送数据,ctrl+z启动发送.解析域名获得IP地址1:先激活一个移动场景AT+CSTTAT+CIICRAT+CIFSR2:配置DNSAT+CDNSCFG="211.136.18.171" (以上海为例)3:解析域名,获得IP地址AT+CDNSGIP=""返回该域名的IP地址8. 如何检测是否在线,断线后有什么提示可以用AT+CIPSTATUS查询TCP所处的状态,具体状态请参考AT命令集,若处于连接状态则返回CONNECTOK.断线后会主动返回CLOSE信息,同时TCP状态为IP CLOSE.9. 如何区分接收的数据是AT命令的响应还是来自远端设定AT+CIPHEAD=1,这样来自SERVER的数据前面就会自动加上一个标志,其格式为:+IPD(datalength),+IPD为标识,datalength为来自SERVER端数据的长度.这样就可以区分是来自SERVER的数据还是AT命令的相应.SIMCOM Application Note for SIM100 TCP/IP AT Commands710. 如何使用SIM100TCP建立点对点的TCP连接,传输数据用GPRS方式的具体步骤为:第一台:AT+CLPORT="TCP","3030"AT+CIPSERVER (启动SERVER功能,开始侦听3030端口)AT+CIFSR(获取本地IP地址)AT+CLPORT="TCP","3000"(设置本地TCP端口)第二台:AT+CLPORT="TCP","2020"AT+CIPSERVER (启动SERVER功能,开始侦听2020端口)AT+CIFSR(获取本地IP地址)AT+CLPORT="TCP","2000"(设置本地TCP端口)第一台:AT+CIPSTART="TCP","REMOTE IP ADDR","2020" (REMOTEIP ADDR可由对方发SMS得到)已经建立连接第二台:AT+CIPSTART="TCP","REMOTE IP ADDR","3030"已经建立连接之后任何一方就可以向另外一方发数据(用AT+CIPSEND发送)也可以用CSD方式建立,具体操作如下:第一台:AT+CIPCSGP=0,"17201","172","172", 2 (CSD方式,置为CSD连接,拨17201,用户名和密码皆为172,连接速率为9600)AT+CLPORT="TCP","3030"AT+CIPSERVER (启动SERVER功能,开始侦听3030端口)AT+CIFSR(获取本地IP地址)AT+CLPORT="TCP","3000"第二台:AT+CIPCSGP=0,"17201","172","172", 2 (CSD方式,置为CSD连接,拨17201,用户名和密码皆为172,连接速率为9600)AT+CLPORT="TCP","2020"AT+CIPSERVER (启动SERVER功能,开始侦听2020端口)AT+CIFSR(获取本地IP地址)AT+CLPORT="TCP","2000"SIMCOM Application Note for SIM100 TCP/IP AT Commands8第一台:AT+CIPSTART="TCP","REMOTE IP ADDR","2020" (REMOTEIP ADDR可由对方发SMS得到)已经建立连接第二台:AT+CIPSTART="TCP","REMOTE IP ADDR","3030"已经建立连接之后任何一方就可以向另外一方发数据(用AT+CIPSEND发送)SIMCOM Application Note for SIM100 TCP/IP AT Commands911. 如何使用SIM100TCP实现多个模块之间的互相通信目前SIM100TCP不支持多个TCP同时连接,但是可以用UDP方式来实现.可以用模块启动UDP功能,这样模快就可以接收来自远端的UDP包,可以通过收到的UDP包获取发送方的IP地址和端口号,然后本模块就可以作出应答,回应一个UDP包,实现相互的通讯.下面是一个简单的例子:假设A,B,C三个模块要相互通信,可以用以下的方式实现(以GPRS方式为例)1:A,B,C分别初始化如下:AT+CIPCSGP=1,"cmnet"(GPRS方式)AT+CLPORT="UDP","端口号"(设置UDP端口号)AT+CSTT (启动TCP任务,成功后返回OK)AT+CIICR (激活场景,成功后返回OK)AT+CIFSR (获得本地IP地址)AT+CIPSTART="UDP","REMOTE IP ADDR","REMOTE PORT"(注册UDP连接,其中"REMOTE IP ADDR"和"REMOTE PORT"可以随便设置一个,成功后返回CONNECT OK)2:若A要向B发送数据,只要这样就可以了:AT+CIPCLOSE (注销当前UDP连接)AT+CIPSTART="UDP","B的IP地址","B的端口号"(注册新的UDP连接)(成功后会返回CONNECTOK和OK)AT+CIPSEND (发送数据)若C有数据发给A,则A自动接收到,同时可以获得C的IP地址和端口号,这样A就可以发UDP包给C了,具体过程跟上面类似.SIMCOM Application Note for SIM100 TCP/IP AT Commands1012. TCP连接出错后应该如何处理若在建立TCP连接的过程中出现错误或者SERVER断线,则先用AT+CIPCLOSE关闭TCP连接(本地IP地址不变),然后再重新建立连接.若其他时候可以用AT+CIPSHUT关闭PDP Context(本地IP地址会改变),然后重新建立连接.13. 如何建立一个点对点的CSD连接首先要确保SIM卡已开通CSD业务,直接呼叫对方号码(数据呼叫,非语音呼叫),对方用ATA应答,然后会返回CONNECT 9600,这时候双方进入完全的透明数据传输状态,双方都可以收发数据,发+++后返回命令态(注意+++的前后0.5秒内必须无数据传输才能返回 命令态),ATO可返回数据态.ATH可结束本次CSD连接.
      怎么使用TCP向远端SERVER传输数据

      TCP连接客户端的问题

      这个是短连接模式,发完就断了。适用于不是非常频繁的信息交互。 如果发送的数据比较频繁,就要弄成长连接的模式,链路的保持是通过心跳包来实现的。也就是空闲的时候,双方或一方发送心跳包,保持链路的长期存在。
      声明一个全局的网络连接对象,我一般用底层的Socket,既然你用TcpClient对象,也一样,你可以一直用这个对象,只进一次初始化连接,以后全部使用这个对象进行数据发送就行了,为了防止网络异常,或者发送失败,你需要定期检测TcpClient的连接状态,如果网络连接不正常时,偿试一下重新连接就行了,你最好封装成你需要的标准接口,不然,你这样写,后面的调试会乱,如果还有问题密我!
      这个得看你的需求了,如果是用完就关就可以用你现在的方法。 如果是定时的或者不间段的发送数据,最好还是保持连接在线状态,根据需要进行数据传输;不过要注意发送前检查一下在线状态,在线了才能够发送成功 另外,进行TCP连接与数据发送时最好加上Try-catch-finally,防止传输过程中出现异常导致意外情况发生。。
      TCP连接客户端的问题

      登陆微博保持tcp链接吗

      理论上来说是保持的。TCP连接,当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的。TCP保活的必要性:TCP的长连接理论上只要连接建立后,就会一直保持着。但有时有一些防火墙之类的软件会自动检查主机的网络连接状况,比如说如果发现某个连接在几分钟之内都没有数据通讯,则会关闭这个连接。有时客户端与服务器需要实时的检测连接状态,就是需要知道对方是否还在线,如果对方不在线了,需要做相应的处理,这是就需要通过发送心跳包的方法监测链路的状态。导致 TCP 连接断连的因素 :理想状态下,一个 TCP 连接可以被长期保持。然而,在实际应用中,客户端或服务器端上维持的一个看似正常的 TTCP 连接可能已经断连。TCP 连接主要受到两个方面的影响而导致断连:网络中间节点和客户端 / 服务器节点参与通信的两方节点。在实际网络应用中,两个主机之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等。因此,两个主机之间 TCP 连接的保持同样会受到中间节点的影响,尤其是会受到防火墙(软件或硬件防火墙)的限制。防火墙是一种装置,有多种不同的实现方式(软件实现、硬件设备实现或是软硬件相结合实现),它需要依据一系列规则对进出的信息流进行扫描,并允许安全(符合规则)的信息交互、阻止不安全(违反规则)的信息交互。防火墙的工作特性决定了要维护一个网络连接就需要耗费较多的资源,并且企业防火墙常常位于企业网络的出入口,长时间维护非活跃的 TCP 连接必将导致网络性能的下降。因此,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 TCP 连接断连。类似的,如果中间节点异常导致如果中间节点异常导致来自客户端关闭连接的请求无法传递到服务器端,也将导致服务器端的相应连接发生断连。另一方面,对于一个 TCP 连接两端的主机而言,创建 TCP 连接需要耗费一定的系统资源。如果不再使用某个连接,那么我们总是希望进行通信的两个主机能够主动关闭相应的连接,以便释放所占用的系统资源。然而,如果由于客户端出现异常 ( 例如崩溃或异常重启 ) 而导致连接未能正常关闭,这将导致服务器端的连接断连。 无论是客户端节点或是服务器端节点,断连的 TCP 连接已经不能传递任何信息,因此,维护大量断连的 TCP 连接将导致系统资源的浪费。这种系统资源的浪费可能并不会对客户端节点带来太大问题;然而,对于服务器主机而言,这可能会导致系统资源(尤指内存资源和 socket 资源)被耗尽而拒绝为新的用户请求提供服务。因此在实际应用中,服务器端需要采取相应的方法来探测 TCP 连接是否已经断连。
      登陆微博保持tcp链接吗

      如何进行tcp数据交互

      这是我网络中找的参考,希望对你有帮助。 在多线程任务中,TCP任务通过三次握手能建立可靠的连接,但是经常会发生在数据传输或通信时发生网络突然断开或者长时间连接空循环监听而未进行操作,需要在软件设计时考虑程序运行中检测到服务器对客户端的这一“虚连接”现象。如果主机崩溃,write是否阻塞取决于内核的tcp缓冲区,但read将一直阻塞,直到超时ETIMEOUT,或由于某些中间路由器的原因返回EHOSTUNREACH/ENETUNREACH。select不能检测到该情况。如果主机崩溃并重起,客户的write到达主机时主机响应RST,客户的read将返ECONNRESET。此处的”非正常断开”指TCP连接不是以优雅的方式断开,如网线故障等物理链路的原因,还有突然主机断电等原因。心跳机制有两种方法可以检测:1.TCP连接双方定时发握手消息2.利用TCP协议栈中的KeepAlive探测第二种方法简单可靠,只需对TCP连接两个Socket设定KeepAlive探测,所以本文只讲第二种方法在Linux,Window2000下的实现(在其它的平台上没有作进一步的测试)1)Windows平台C代码//定义结构及宏struct TCP_KEEPALIVE {u_longonoff;u_longkeepalivetime;u_longkeepaliveinterval;} ;#define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR,4)//KeepAlive实现TCP_KEEPALIVE inKeepAlive = {0}; //输入参数unsigned long ulInLen = sizeof(TCP_KEEPALIVE);TCP_KEEPALIVE outKeepAlive = {0}; //输出参数unsigned long ulOutLen = sizeof(TCP_KEEPALIVE);unsigned long ulBytesReturn = 0;//设置socket的keep alive为5秒,并且发送次数为3次inKeepAlive.onoff = 1;inKeepAlive.keepaliveinterval = 5000; //两次KeepAlive探测间的时间间隔inKeepAlive.keepalivetime = 5000; //开始首次KeepAlive探测前的TCP空闭时间if (WSAIoctl((unsigned int)s, SIO_KEEPALIVE_VALS,(LPVOID)&inKeepAlive, ulInLen,(LPVOID)&outKeepAlive, ulOutLen,&ulBytesReturn, NULL, NULL) == SOCKET_ERROR){ACE_DEBUG ((LM_INFO,ACE_TEXT ("(%P|%t) WSAIoctl failed. error code(%d)!n"), WSAGetLastError()));}//定义结构及宏 struct TCP_KEEPALIVE { u_longonoff; u_longkeepalivetime; u_longkeepaliveinterval; } ; #define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR,4) //KeepAlive实现 TCP_KEEPALIVE inKeepAlive = {0}; //输入参数 unsigned long ulInLen = sizeof(TCP_KEEPALIVE); TCP_KEEPALIVE outKeepAlive = {0}; //输出参数 unsigned long ulOutLen = sizeof(TCP_KEEPALIVE); unsigned long ulBytesReturn = 0; //设置socket的keep alive为5秒,并且发送次数为3次 inKeepAlive.onoff = 1; inKeepAlive.keepaliveinterval = 5000; //两次KeepAlive探测间的时间间隔 inKeepAlive.keepalivetime = 5000; //开始首次KeepAlive探测前的TCP空闭时间 if (WSAIoctl((unsigned int)s, SIO_KEEPALIVE_VALS, (LPVOID)&inKeepAlive, ulInLen, (LPVOID)&outKeepAlive, ulOutLen, &ulBytesReturn, NULL, NULL) == SOCKET_ERROR) { ACE_DEBUG ((LM_INFO, ACE_TEXT ("(%P|%t) WSAIoctl failed. error code(%d)!n"), WSAGetLastError())); }2)Linux平台C代码#include……////KeepAlive实现//下面代码要求有ACE,如果没有包含ACE,则请把用到的ACE函数改成linux相应的接口int keepAlive = 1;//设定KeepAliveint keepIdle = 5;//开始首次KeepAlive探测前的TCP空闭时间int keepInterval = 5;//两次KeepAlive探测间的时间间隔int keepCount = 3;//判定断开前的KeepAlive探测次数if(setsockopt(s,SOL_SOCKET,SO_KEEPALIVE,(void*)&keepAlive,sizeof(keepAlive)) == -1){ACE_DEBUG ((LM_INFO,ACE_TEXT ("(%P|%t) setsockopt SO_KEEPALIVE error!n")));}if(setsockopt(s,SOL_TCP,TCP_KEEPIDLE,(void *)&keepIdle,sizeof(keepIdle)) == -1){ACE_DEBUG ((LM_INFO,ACE_TEXT ("(%P|%t) setsockopt TCP_KEEPIDLE error!n")));}if(setsockopt(s,SOL_TCP,TCP_KEEPINTVL,(void *)&keepInterval,sizeof(keepInterval)) == -1){ACE_DEBUG ((LM_INFO,ACE_TEXT ("(%P|%t) setsockopt TCP_KEEPINTVL error!n")));}if(setsockopt(s,SOL_TCP,TCP_KEEPCNT,(void *)&keepCount,sizeof(keepCount)) == -1){ACE_DEBUG ((LM_INFO,ACE_TEXT ("(%P|%t)setsockopt TCP_KEEPCNT error!n")));}心跳机制:定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性。网络中的接收和发送数据都是使用WINDOWS中的SOCKET进行实现。但是如果此套接字已经断开,那发送数据和接收数据的时候就一定会有问题。可是如何判断这个套接字是否还可以使用呢?这个就需要在系统中创建心跳机制。其实TCP中已经为我们实现了一个叫做心跳的机制。如果你设置了心跳,那TCP就会在一定的时间(比如你设置的是3秒钟)内发送你设置的次数的心跳(比如说2次),并且此信息不会影响你自己定义的协议。所谓“心跳”就是定时发送一个自定义的结构体(心跳包或心跳帧),让对方知道自己“在线”。以确保链接的有效性。所谓的心跳包就是客户端定时发送简单的信息给服务器端告诉它我还在而已。代码就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息如果服务端几分钟内没有收到客户端信息则视客户端断开。比如有些通信软件长时间不使用,要想知道它的状态是在线还是离线就需要心跳包,定时发包收包。发包方:可以是客户也可以是服务端,看哪边实现方便合理。一般是客户端。服务器也可以定时轮询发心跳下去。心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项。系统默认是设置的是2小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断线。而且逻辑层处理断线可能也不是那么好处理。一般,如果只是用于保活还是可以的。心跳包一般来说都是在逻辑层发送空的包来实现的。下一个定时器,在一定时间间隔下发送一个空包给客户端,然后客户端反馈一个同样的空包回来,服务器如果在一定时间内收不到客户端发送过来的反馈包,那就只有认定说掉线了。只需要send或者recv一下,如果结果为零,则为掉线。但是,在长连接下,有可能很长一段时间都没有数据往来。理论上说,这个连接是一直保持连接的,但是实际情况中,如果中间节点出现什么故障是难以知道的。更要命的是,有的节点(防火墙)会自动把一定时间之内没有数据交互的连接给断掉。在这个时候,就需要我们的心跳包了,用于维持长连接,保活。在获知了断线之后,服务器逻辑可能需要做一些事情,比如断线后的数据清理呀,重新连接呀当然,这个自然是要由逻辑层根据需求去做了。总的来说,心跳包主要也就是用于长连接的保活和断线处理。一般的应用下,判定时间在30-40秒比较不错。如果实在要求高,那就在6-9秒。TCP连接异常断开后操作系统会告诉你,你查询套接字的状态会得到异常,或者当发现函数失败WSAGetLastError的时候也会得到内核的通知。// 发送回应消息int nSend = Send4IntMsg(sock, (char*)(LPCTSTR)strSendBuf,strSendBuf.GetLength(), errMsg);if (nSend < 0) //发送消息失败closesocket(sock);//重新连接 在B/S编程和UDP编程时才用到心跳。比如定期向web服务器发一个request证明自己在线。http协议是请求一下就断开了,每次都要重新连接,重新请求,这种情况下才有必要用心跳机制。一般的TCP通信都是长连接,不可能频繁连接和断开。对于长期保持连接的情况,一旦断开,操作系统底层都会通知你,你需要解决的是如何获取到系统的通知。
      如何进行tcp数据交互

      TCP 连接的握手延迟

      建立一条新的TCP连接时,甚至是在发送任意数据之前,TCP软件之间会交换一系列的IP分组,对连接的有关参数进行沟通,如果连接只用来传送少量数据,这些交换过程就会严重降低HTTP的性能TCP连接三次握手:另 参考here :TCP的三次握手是怎么进行的:之后,一个TCP连接建立,开始通讯。SYN:同步标志同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把 TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。ACK:确认标志确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure-1)为下一个预期的序列编号,同时提示远端[系统]已经成功接收所有数据。RST:复位标志复位标志有效。用于复位相应的TCP连接。URG:紧急标志紧急(The urgent pointer) 标志有效。紧急标志置位,*PSH:推标志该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。FIN:结束标志带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。TCP的几个状态对于我们分析所起的作用在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,如果只是单个的一个SYN,它表示的只是建立连接。TCP的几次握手就是通过这样的ACK表现出来的。但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。
      TCP 连接的握手延迟

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类