如何如何使用 tcp协议连接ip端口
使用 tcp协议连接ip端口 "端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口正局毁,其中虚拟端腊者口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。电话使用RJ11插口也属于物理端口的范畴举备。

TCP连接详解
通过设置linux参数 net.ipv4.tcp_fin_timeout = 30 ,可以调整如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决:编辑文件/etc/sysctl.conf,加入以下内容tcp 通过序列号seq记录已经发送的数据刻度,通过ack记录已经接收的数据量。seq记录的是发送的数据,ack记录的是接收的数据量。单位是字节(8bit)tcp在每次发包时都会计算往复时间及其偏差。将这个往返时间和偏差相加,重发超时时间就是比这个总和要稍大一点的值。由于最初的数据包还不知道往返时间,所以其重发超时一般设置为6s左右。在建立tcp连接时,三次握手的时候会计算mss(最大消息长度),建立连接的双方会把自己的接口能适应的mss值放到tcp首部里面发送给对方,最后取较小的那个mss。tcp窗口大小指的是无需等待确认应答而可以继续发送数据的最大值,窗口大小为4个端。即在收到确认应答之前可以发送的数据的段数。接收端没有按序列顺序收到数据端时,会不停的发送确认应答,并将当前收到的顺序出问题的数据放到缓冲区。发送端连续三次收到相同序列号的数据段时,会重新发送该段的数据。接收端在接收到遗失的数据的时候会将数据与缓冲区的数据组合,重新按顺序确定ack的序列号,继续接收数据。tcp窗口的大小是由接收端的处理能力决定的,接收端会在ack的tcp首部中将能处理的窗口大小传给发送端。拥塞窗口是限制每次发送的数据的大小,初始值是1mss,也就是慢启动。随着正常的收发的进行,拥塞窗口的值会不断的增加。但是不会超过接收端处理窗口的大小。一开始拥塞窗口每次都会翻倍的增长,在超过慢启动阈值后增长速度会减慢。增长速率=一个数据段的大小 / 拥塞窗口的大小 *一个数据段的大小超时重发时,拥塞窗口会变为1mss, 慢启动阈值为原有窗口的一半重复确认应答时,慢启动阈值为原有窗口的一半,拥塞窗口会变为慢启动阈值+3数据端,1、已发送的数据收到了ack回执2、可以发送mss大小的数据时只有以上两个数据都满足时才发送数据。会有延迟,对延迟敏感的需求可以关。1、收到2*最大端长度的数据2、最大延迟0.5s发送确认应答将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/IP协议的接口”是什么啊
IP啊到里面去设置IP的
TCP/IP协议介绍 TCP/IP的通讯协议这部分简要介绍一下TCP/IP的内部结构,为讨论与互联网有关的安全问题打下基础。TCP/IP协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底层协议(例如T1和X.25、以太网以及RS-232串行接口)之上。确切地说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。TCP/IP整体构架概述TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网路层、传输层、话路层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为:应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。TCP/IP中的协议以下简单介绍TCP/IP中的协议都具备什么样的功能,都是如何工作的:1. IP网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫作IP source routing,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好象是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。2. TCP如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。3.UDPUDP与TCP位于同一层,但对于数据包的顺序错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网落时间协议)和DNS(DNS也使用TCP)。欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。4.ICMPICMP与IP位于同一层,它被用来传送IP的的控制信息。它主要是用来提供有关通向目的地址的路径信息。ICMP的‘Redirect’信息通知主机通向其他系统的更准确的路径,而‘Unreachable’信息则指出路径有问题。另外,如果路径不可用了,ICMP可以使TCP连接‘体面地’终止。PING是最常用的基于ICMP的服务。5. TCP和UDP的端口结构TCP和UDP服务通常有一个客户/服务器的关系,例如,一个Telnet服务进程开始在系统上处于空闲状态,等待着连接。用户使用Telnet客户程序与服务进程建立一个连接。客户程序向服务进程写入信息,服务进程读出信息并发出响应,客户程序读出响应并向用户报告。因而,这个连接是双工的,可以用来进行读写。两个系统间的多重Telnet连接是如何相互确认并协调一致呢?TCP或UDP连接唯一地使用每个信息中的如下四项进行确认:源IP地址发送包的IP地址。目的IP地址 接收包的IP地址。源端口 源系统上的连接的端口。目的端口目的系统上的连接的端口。 端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口,例如,SMTP使用25、Xwindows使用6000。这些端口号是‘广为人知’的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯。

tcp,udp 的协议端口如何实现
TCP 和 UDP 都是 IP 层的传输协议,是 IP 与上层之间的处理接口。TCP 和 UDP 协议端口号被设计来区分运行在单个设备上的多重应用程序的 IP 地址。+---------+--------------+--------------+-----------------------------------+|MAC | IP | TCP/UDP | Data |+---------+--------------+--------------+-----------------------------------+基本情况就是上述帧格式:五元组分别位于MAC, IP, TCP/UDP里面:MAC里面的type决定了是否是IP帧,IP里面给出了SrcIp和DestIp,TCP、UDP头给出了到底是那种传输层协议。绑定bind主要用于服务,而客户端一般采用连接connect。 其过程就像启动一个服务,然后绑定到一个特定端口,对该端口所有进来的tcp/udp请求进行响应。一个TCP连接需要由四元组来形成,即(src_ip,src_port,dst_ip,dst_port)。当一个连接请求过来的时候,服务端调用accept函数,新生成一个socket,这个socket所占用的本地端口依然是80端口。由四元组就很容易分析到了,同一个(src_ip,src_port),它所对应的(dst_ip,dst_port)可以无穷变化,这样就可以建立很多个客户端的请求了。UDP的connect函数,给udp进行了链接,那么udp的异步错误是不会返回到udp套接字的。般情况下,不connect的udp是不知道对面有没有错的,如果有错,那真的是晕啊。因为万一对面服务挂了,客户端一直都不知道,一直等到死。再次调用connect有2个目的:1.指定新的ip和端口 (指定新的即可)2.断开套接字 (family成员设置为AF_UNSPEC:sin_family,sin6_family)对于tcp来说,connect只能调用一次,万万不可调用2次。TCP层为连接状态的维持保留有一段时间,在这段时间内连接状态没有被修改之前是不允许重复connect的。TCP的有一个种2MSL等待时间。udp在发送数据的时候才知道链接不上,而tcp还没有发送数据的时候,就已经知道链接不上鸟udp缺乏流量控制,udp发送端淹没接收端是轻而易举的事情。因套接字满而丢弃鸟。高级udp编程时再讲解如何给udp程序增加一些可靠性。
不管TCP还是UDP,都含有网络服务必须的源端口和目的端口信息,以建立和实现网络传输服务。这时,你的疑问就来了:既然都用于传输,为何要搞两个不同的协议呢?这就需要从网络中不同服务的需求来谈起。 在网络中,有些服务,如HTTP、FTP等,对数据的可靠性要求较高,在使用这些服务时,必须保证数据包能够完整无误的送达;而另外一些服务,如DNS、即时聊天工具等,并不需要这么高的可靠性,高效率和实时性才是它们所关心的。根据这两种服务不同的需求,也就诞生了面向连接的TCP协议,以及面向无连接的UDP协议。这里的连接(Connection)和无连接(Connectionless)是网络传输中常用的术语,它们的关系可以用一个形象地比喻来说明,就是打电话和写信。打电话时,一个人首先必须拨号(发出连接请求),等待对方响应,接听电话(建立了连接)后,才能够相互传递信息。通话完成后,还需要挂断电话(断开连接),才算完成了整个通话过程。写信则不同,你只需填写好收信人的地址信息,然后将信投入邮局,就算完成了任务。此时,邮局会根据收信人的地址信息,将信件送达指定目的地。我们可以看到,这两者之间有很大不同。打电话时,通话双方必须建立一个连接,才能够传递信息。连接也保证了信息传递的可靠性,因此,面向连接的协议必然是可靠的。无连接就没有这么多讲究,它不管对方是否有响应,是否有回馈,只管将信息发送出去。就像信件一旦进了邮箱,在它到达目的地之前,你没法追踪这封信的下落;接收者即使收到了信件,也不会通知你信件何时到达。在整个通讯过程中,没有任何保障。因此我们常说,面向无连接的协议也是不可靠的。当然,邮局会尽力将右键送到目的地,99%的情况信件会安全到达,但在少数情况下也有例外。 面向连接的协议比面向无连接的协议在可靠性上有着显著的优势,但建立连接前必须等待接收方响应,传输信息过程中必须确认信息是否传到,断开连接时需要发出响应信号等,无形中加大了面向连接协议的资源开销。具体到TCP和UDP协议来说,除了源端口和目的端口,TCP还包括序号、确认信号、数据偏移、控制标志(通常说的URG、ACK、PSH、RST、SYN、FIN)、窗口、校验和、紧急指针、选项等信息,UDP则只包含长度和校验和信息。UDP数据报比TCP小许多,这意味着更小的负载和更有效的使用带宽。许多即时聊天软件采用UDP协议,与此有莫大的关系。
tcp和udp传送协议是微软公司和操作系统开发时一起定义好了的,重要的端口已经在dll动态链接库文件和API函数文件里面定义好了的。1-9999的端口大部分都是系统定义好了的。因为操作系统的微软公司的。比如445,135,139,21,22,80,3389,4899,25,端口号都是人家在操作系统内核编程的时候早就定义好了的,1-9999以下通用的端口号是大家约定俗成。文件传输一般用TCP协议,QQ数据一般用UDP,端口号一般在10000以上,程序sokt套接字里面设定,当然在三层交换机,路由器上面也要设置。我说的可不是普通家庭的,是思科的大型交换机,路由器。那里面也要设置端口。
不管TCP还是UDP,都含有网络服务必须的源端口和目的端口信息,以建立和实现网络传输服务。这时,你的疑问就来了:既然都用于传输,为何要搞两个不同的协议呢?这就需要从网络中不同服务的需求来谈起。 在网络中,有些服务,如HTTP、FTP等,对数据的可靠性要求较高,在使用这些服务时,必须保证数据包能够完整无误的送达;而另外一些服务,如DNS、即时聊天工具等,并不需要这么高的可靠性,高效率和实时性才是它们所关心的。根据这两种服务不同的需求,也就诞生了面向连接的TCP协议,以及面向无连接的UDP协议。这里的连接(Connection)和无连接(Connectionless)是网络传输中常用的术语,它们的关系可以用一个形象地比喻来说明,就是打电话和写信。打电话时,一个人首先必须拨号(发出连接请求),等待对方响应,接听电话(建立了连接)后,才能够相互传递信息。通话完成后,还需要挂断电话(断开连接),才算完成了整个通话过程。写信则不同,你只需填写好收信人的地址信息,然后将信投入邮局,就算完成了任务。此时,邮局会根据收信人的地址信息,将信件送达指定目的地。我们可以看到,这两者之间有很大不同。打电话时,通话双方必须建立一个连接,才能够传递信息。连接也保证了信息传递的可靠性,因此,面向连接的协议必然是可靠的。无连接就没有这么多讲究,它不管对方是否有响应,是否有回馈,只管将信息发送出去。就像信件一旦进了邮箱,在它到达目的地之前,你没法追踪这封信的下落;接收者即使收到了信件,也不会通知你信件何时到达。在整个通讯过程中,没有任何保障。因此我们常说,面向无连接的协议也是不可靠的。当然,邮局会尽力将右键送到目的地,99%的情况信件会安全到达,但在少数情况下也有例外。 面向连接的协议比面向无连接的协议在可靠性上有着显著的优势,但建立连接前必须等待接收方响应,传输信息过程中必须确认信息是否传到,断开连接时需要发出响应信号等,无形中加大了面向连接协议的资源开销。具体到TCP和UDP协议来说,除了源端口和目的端口,TCP还包括序号、确认信号、数据偏移、控制标志(通常说的URG、ACK、PSH、RST、SYN、FIN)、窗口、校验和、紧急指针、选项等信息,UDP则只包含长度和校验和信息。UDP数据报比TCP小许多,这意味着更小的负载和更有效的使用带宽。许多即时聊天软件采用UDP协议,与此有莫大的关系。

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