tcp包头结构?
TCP协议头最少20个字节,包括以下的区域 TCP源端口(Source Port):16位的源端口其中包含初始化通信的端口。源端口和源IP地址的作用是标示报问的返回地址。TCP目的端口(Destination port):16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。TCP序列号(序列码,Sequence Number):32位TCP应答号(Acknowledgment Number):32位的序列号由接收端计算机使用,重组分段的报文成最初形式。,如果设置了ACK控制位,这个值表示一个准备接收的包的序列码。数据偏移量(HLEN):4位包括TCP头大小,指示何处数据开始。保留(Reserved):6位值域,这些位必须是0。为了将来定义新的用途所保留。标志(Code Bits):6位标志域。表示为:紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志。按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN。1. URG:紧急标志紧急(The urgent pointer) 标志有效。紧急标志置位,2. ACK:确认标志确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure:1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。3. PSH:推标志该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。4. RST:复位标志复位标志有效。用于复位相应的TCP连接。5. SYN:同步标志同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。6. FIN:结束标志带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。窗口(Window):16位,用来表示想收到的每个TCP数据段的大小。校验位(Checksum):16位TCP头。源机器基于数据内容计算一个数值,收信息机要与源机器数值 结果完全一样,从而证明数据的有效性。优先指针(紧急,Urgent Pointer):16位,指向后面是优先数据的字节,在URG标志设置了时才有效。如果URG标志没有被设置,紧急域作为填充。加快处理标示为紧急的数据段。选项(Option):长度不定,但长度必须以字节。如果 没有 选项就表示这个一字节的域等于0。 数据(Date):应用程序的数据。

TCP报文结构和功能简析
TCP:传输、控制、协议。TCP与UDP最大却别就在那个C上面,它充分实现了数据传输时各种控制功能。可以进行丢包重发控制,还可以对次序乱掉的数据包进行顺序控制,还能控制传输流量,这些是UDP中没有的。即T C P 提供一种面向连接的、可靠的字节流服务。TCP是一中面向有链接的协议,只有在确认对端存在的时候,才会发送分数据,从而也可以控制通信流量的浪费。什么是可靠的传输:不丢包、不损坏、不乱序、不重复。TCP通过校验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制来实现可靠传输。接收端查询就收数据TCP首部中的序号和数据长度。将自己下一步应该接受的序列号作为确认应答返送回去。就这样,通过序列号和确认应答,TCP实现可靠传输。一般使用TCP首部用于控制的字段来管理连接。一个连接的建立和断开,正常过程中,至少需要来回共7个包才能完成。TCP首部的数据结构如图所示:TCP包首部为了便于理解,忽略选项部分,固定首部通常为20个字节,将按作用分类分析。前4个字节来标识了发送方的端口号和接收方的端口号,即该数据包由谁发送,由谁接收。前2个字节标识源端口号,紧接着2个字节标识目的端口号。即发送方:(11111111,1111111)2= (65535)10,除去0~1023.即接收方:(11111111,1111111)2= (65535)10,除去0~1023.TCP是面向字节流的。在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。首部中的序号字段值则是指的是本报文段所发送的数据的第一个字节的序号。长度为4字节,序号是32bit的无符号数,序号到达232- 1后又从0开始。ack:确认序号,即确认字节的序号,更确切地说,是发送确认的一端所期望收到的下一个序号。所谓的发送确认的一端就是将确认信息发出的一端。比如第二次握手的S端就是发送确认的一端。确认序号为上次接收的最后一个字节序号加1.只有确认标志位(ACK)为1的时候,确认序号才有效。也叫首部长度,占4个bit,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。TCP报文结构由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的。“首部长度”是4位二进制数,单位是32位字,能表示的最大十进制数字是15。(1111)2=(15)10,即是15个32位,一个32位是4个字节,因此数据偏移的最大值是154=60个字节,这也是TCP首部的最大字节。因为固定首部的存在,数据偏移的值最小为20个字节,因此选项长度不能超过40字节*(减去20个字节的固定首部)。占6位,保留为今后使用,但目前应置为0。当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快发送(相当于高优先级的数据),而不要按原来的排队顺序来传送。例如,已经发送了很长的一个程序要在远地的主机上运行。但后来发现了一些问题,需要取消该程序的运行,因此用户从键盘发出中断命令。如果不使用紧急数据,那么这两个字符将存储在接收TCP的缓存末尾。只有在所有的数据被处理完毕后这两个字符才被交付接收方的应用进程。这样做就浪费了很多时间。当URG置为1时,应用进程就告诉TCP有紧急数据要传送。于是TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍然是普通数据。这时要与首部中紧急指针(Urgent Pointer)字段配合使用。仅当ACK = 1时确认号字段才有效,当ACK = 0时确认号无效。TCP规定,在连接建立后所有的传送的报文段都必须把ACK置为1。当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应。在这种情况下,TCP就可以使用推送(push)操作。发送方TCP把PSH置为1,并立即创建一个报文段发送出去。接收方TCP收到PSH=1的报文段,就尽快地(即“推送”向前)交付接收应用进程。而不用再等到整个缓存都填满了后再向上交付。当RST=1时,表明TCP连接中出现了严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立传输连接。RST置为1还用来拒绝一个非法的报文段或拒绝打开一个连接。在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1。因此SYN=1就表示这是一个连接请求或连接接受报文。用来释放一个连接。当FIN=1时,表明此报文段的发送发的数据已发送完毕,并要求释放运输连接。占2字节。窗口值是(0,216-1)之间的整数。窗口指的是发送本报文段的一方的接受窗口(而不是自己的发送窗口),窗口大小是给对方用的。窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方一次发送的数据量(以字节为单位)。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。总之,窗口值作为接收方让发送方设置其发送窗口的依据。例如,A发送了一个报文段,其确认号是3000,窗口字段是1000.这就是告诉对方B:“从3000算起,A接收缓存空间还可接受1000个字节数据,字节序号是3000-3999”,可以想象到河道的阀门。总之:窗口字段明确指出了现在允许对方发送的数据量。窗口值经常在动态变化。占2字节。检验和字段检验的范围包括首部和数据这两部分。和UDP用户数据报一样,在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。伪首部的格式和UDP用户数据报的伪首部一样。但应把伪首部第4个字段中的17改为6(TCP的协议号是6);把第5字段中的UDP中的长度改为TCP长度。接收方收到此报文段后,仍要加上这个伪首部来计算检验和。若使用TPv6,则相应的伪首部也要改变。占2字节。紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据) 。因此,在紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作。值得注意的是,即使窗口为0时也可以发送紧急数据。长度可变,最长可达40个字节。当没有使用“选项”时,TCP的首部长度是20字节。最大报文段长度(MSS:Maximum Segment Size)表示TCP传往另一端的最大块数据的长度。当一个连接建立时,连接的双方都要通告各自的MSS。当建立一个连接时,每一方都有用于通告它期望接收的MSS选项(MSS选项只能出现在SYN报文段中),如果一方不接收来自另一方的MSS值,则MSS就定为默认值536字节(这个默认值允许20字节的IP首部和20字节的TCP首部以适合576字节IP数据报) 。为什么要规定一个最大报文长度MSS呢?这并不是考虑接受方的接收缓存可能存放不下TCP报文段中的数据。实际上,MSS与接收窗口值没有关系。我们知道,TCP报文段的数据部分,至少要加上40字节的首部(TCP首部20字节和IP首部20字节,这里还没有考虑首部中的可选部分)才能组装成一个IP数据报。若选择较小的MSS长度,网络的利用率就降低。设想在极端情况下,当TCP报文段只含有1字节的数据时,在IP层传输的数据报的开销至少有40字节(包括TCP报文段的首部和IP数据报的首部)。这样,对网络的利用率就不会超过1/41。到了数据链路层还要加上一些开销。但反过来,若TCP报文段非常长,那么在IP层传输时就有可能要分解成多个短数据报片。在终点要把收到的各个短数据报片组成成原来的TCP报文段,当传输出错时还要进行重传,这些也都会使开销增大。因此,MSS应尽可能大些,只要在IP层传输时不需要分片就行。由于IP数据报所经历的路径是动态变化的,因此在这条路径上确定的不需要的分片的MSS,如果改走另一条路径就可能需要进行分片。因此最佳的MSS是很难确定的。在连接过程中,双方都把自己能够支持的MSS写入这一字段,以后就按照这个数值传输数据,两个传送方向可以有不同的MSS值。若主机未填写这一项,则MSS的默认值是536字节长。因此,所有在互联网上的主机都应该接受的报文段长度是536+20(固定首部长度)=556字节。后来又增加了几个选项如窗口扩大选项、时间戳选项等。窗口扩大选项是为了扩大窗口。我们知道,TCP首部中窗口字段长度是16位,因此最大的窗口大小为64K字节。虽然这对早期的网络是足够用的,但对于包含卫星信道的网络,传播时延和宽带都很大,要获得高吞吐量需要更大的窗口大小。窗口扩大选项占3字节,其中有一个字节表示移位值S。新的窗口值等于TCP首部中的窗口位数从16增大到(16+S)。移位值允许使用的最大值是14,相当于窗口最大值增大到2(16+14)-1=230-1。窗口扩大选项可以在双方初始建立TCP连接时进行协商。如果连接的某一端实现了窗口扩大,当它不再需要扩大其窗口时,可发送S=0选项,使窗口大小回到16。时间戳选项占10字节,其中最主要的字段是时间戳字段(4字节)和时间戳回送回答字段(4字节)。时间戳选项有以下两个概念:第一、 用来计算往返时间RTT。发送方在发送报文段时把当前时钟的时间值放入时间戳字段,接收方在确认该报文段时把时间戳字段复制到时间戳回送回答字段。因此,发送方在收到确认报文后,可以准确地计算出RTT来。第二、 用于处理TCP序号超过232的情况,这又称为防止序号绕回PAWS。我们知道,TCP报文段的序号只有32位,而每增加232个序号就会重复使用原来用过的序号。当使用高速网络时,在一次TCP连接的数据传送中序号很可能被重复使用。例如,当使用1.5Mbit/s的速度发送报文段时,序号重复要6小时以上。但若用2.5Gbit/s的速率发送报文段,则不到14秒钟序号就会重复。为了使接收方能够把新的报文段和迟到很久的报文段区分开,则可以在报文段中加上这种时间戳。从功能和性能的角度去理解三次握手建立连接第一次:C向S发送一个建立连接的请求。此过程中携带一些报文属性信息,这些信息,存在于报文首部,有初始化用的信息,比如,有用于认证的信息。初始化信息:如报文序列号、SYN:TCP在数据通信之前,通过TCP首部发送的一个SYN标志位,作为建立连接的请求等待接收方确认应答。如果S发来确认应答,则认为可以进行数据通信,否则,就不能进行通信。TCP规定:****SYN=1的报文段不能携带数据,但是要消耗掉一个序号:seq=x。这个时候C进入SYN-SENT(同步已发送)状态。第二次:S收到C请求后,如果同意建立连接,则向C返回确认信息:将SYN、ACK都置1,确认号为ack=seq+1(seq来自客户端),并携带自己的初始化,同时用于认证的信息S。同理:SYN=1的报文段不能携带数据,但是要消耗掉一个序号:seq=y。这个时候S进入SYN-RCVD(同步已接收)状态。C收到S返回的确认信息后,进入ESTABLISHED(已建立连接)的状态,第三次:C收到S返回的确认信息后,向S再一次发送确认报文。ACK置为1,确认号ack=seq+1(seq来自S),自己的seq=x+1。TCP规定:ACK报文可以携带数据。但是,如果不携带数据,则不消耗序号,这时,下一数据报文段的序号仍是seq=x+1。服务器收到客户端返回的确认信息后,也进入ESTABLISHED(已建立连接)的状态,从功能角度去考虑前两次握手,从性能的角度去理解为什么需要第三次握手。有第三次,是考虑到一种错误情况:假设C发了一请求建立连接的报文,长时间未收到S的确认报文,则C会重发,这个时候S与之建立连接、完成数据通信、关闭了连接,这个时候C第一发出的请求建立连接的报文到达了S,S则会等待C发送数据,实际上C已经CLOSED了,S就一直在这等待,浪费资源,确切地说,应该是至少四次数据交互才能实现一个连接的彻底关闭。关闭连接,需要四个报文来指示关闭。TCP是全双工通信的,所以在一端发送数据完毕后,还具有接收另一端的数据的能力,这就所谓的半关闭。四次挥手举个例子:如果C的数据已经发送完毕,C是不能立即关闭的,因为建立连接的通信双方是平等的。C首先告诉S:“数据发送完毕“,这个消息在TCP报文的首部由FIN来标识,让S知道C是准备断开连接了。这是第一次挥手。S收到C发来的FIN标识的报文后,要给C端恢复一个确认FIN的消息,告诉C说,知道你的数据发完了。这是第二次挥手。这个时候,如果S端的数据也发送完毕了,就给C发一个FIN=1报文。这是第三次挥手。C收到S发来的FIN标识的报文后,要给S端恢复一个确认FIN的消息,告诉C说,知道你的数据发完了。这是第四次挥手。然后就彻底断开连接了。TCP的状态变迁图

TCP/IP协议的体系结构分为哪几层?每层的功能?
TCP/IP传输协议是一个四层的体系结构,应用层、传输层、网络层和网络接口层都包含其中。每层的功能如下:1、应用层是直接为应用进程提供服务的。对不同种类的应用程序它们会根据自己的需要来使用应用层的不同协议;定义数据格式并按照对应的格式解读数据,加密、解密、格式化数据;应用层可以建立或解除与其他节点的联系,这样可以充分节省网络资源。2、运输层作为TCP/IP协议的第二层,运输层在整个TCP/IP协议中起到了中流砥柱的功能。且在运输层中,TCP和UDP也同样起到了中流砥柱的作用。主要功能是定义端口,标识应用程序身份,实现端口到端口的通信,TCP协议可以保证数据传输的可靠性。3、网络层网络层在TCP/IP协议中的位于第三层。在TCP/IP协议中网络层可以进行网络连接的建立和终止以及IP地址的寻找等功能。网络层的主要功能是定义网络地址、区分网段、子网内MAC寻址、对于不同子网的数据包进行路由。4、网络接口层在TCP/IP协议中,网络接口层位于第四层。由于网络接口层兼并了物理层和数据链路层,所以网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路。扩展资料:TCP/IP协议有以下特点:1、协议标准是完全开放的,可以供用户免费使用,并且独立于特定的计算机硬件与操作系统。2、协议独立于网络硬件系统,可以运行在广域网,更适合于互联网使用。3、网络的地址是统一分配的,网络中每一个设备和终端都具有一个唯一地址。4、高层协议标准化,可以提供多种多样可靠网络服务。参考资料来源:百度百科-TCP/IP协议
ICP/IP协议分为:网络接口层,网际网层(IP层),传输层,应用层等四个层次。 作用: 1。网络接口层:接收IP数据并通过特定的网络进行传输,或从网络上接收物理帧,抽取IP数据报并转交给网际层。 2。网际网层(IP层):该层负责相同或不同网络中计算机之间的通信,主要处理数据和路由。 3。传输层:主要功能是数据格式化、数据确认和丢失重传等。 4。应用层:向用户提供一组常用的应用层协议。查看原帖>>

在网络层传输的tcp数据包的段结构中端口地址的长度是多少
端口的长度一般为16个二进制位。在计算机中一般可提供65536个不同端口号,其中0-1023端口为熟知端口号,1024-49151端口为登记端口号,49152—65536端口为智暂端口号。

数据包的结构是怎样的?
数据包的结构非常复杂,不是三言两语能够说清的,在这里主要了解一下它的关键构成就可以了,这对于理解TCP/IP协议的通信原理是非常重要的。数据包主要由“目的IP地址”、“源IP地址”、“净载数据”等部分构成。数据包的结构与我们平常写信非常类似,目的IP地址是说明这个数据包是要发给谁的,相当于收信人地址;源IP地址是说明这个数据包是发自哪里的,相当于发信人地址;而净载数据相当于信件的内容。 正是因为数据包具有这样的结构,安装了TCP/IP协议的计算机之间才能相互通信。我们在使用基于TCP/IP协议的网络时,网络中其实传递的就是数据包。理解数据包,对于网络管理的网络安全具有至关重要的意义。

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