当前位置:文档之家› 数据包头格式

数据包头格式

一、TCP报头TCP报文段的报头有10个必需的字段和1个可选字段。

报头至少为20字节。

报头后面的数据是可选项。

1、源端口号(16位)标识发送报文的计算机端口或进程。

一个TCP报文段必须包括源端口号,使目的主机知道应该向何处发送确认报文。

2、目的端口号(16位)标识接收报文的目的主机的端口或进程。

3、序列号(32位)用于标识每个报文段,使目的主机可确认已收到指定报文段中的数据。

当源主机用于多个报文段发送一个报文时,即使这些报文到达目的主机的顺序不一样,序列号也可以使目的主机按顺序排列它们。

在建立连接时发送的第一个报文段中,双方都提供一个初始序列号。

TCP 标准推荐使用以4ms间隔递增1的计数器值作为这个初始序列号的值。

使用计数器可以防止连接关闭再重新连接时出现相同的序列号。

对于那些包含数据的报文段,报文段中第一个数据字节的数量就是初始序列号,其后数据字节按顺序编号。

如果源主机使用同样的连接发送另一个报文段,那么这个报文段的序列号等于前一个报文段的序列号与前一个报文段中数据字节的数量之和。

例如,假设源主机发送3个报文段,每个报文段有100字节的数据,且第一个报文段的序列号是1000,那么第二个报文段的序列号就是1100(1000+100),第三个报文段的序列号就是1200(1100+100)。

如果序列号增大至最大值将复位为0。

4、确认号(32位)目的主机返回确认号,使源主机知道某个或几个报文段已被接收。

如果ACK控制位被设置为1,则该字段有效。

确认号等于顺序接收到的最后一个报文段的序号加1,这也是目的主机希望下次接收的报文段的序号值。

返回确认号后,计算机认为已接收到小于该确认号的所有数据。

例如,序列号等于前一个报文段的序列号与前一个报文段中数据字节的数量之和。

例如,假设源主机发送3个报文段,每个报文段有100字节的数据,且第一个报文段的序列号是1000,那么接收到第一个报文段后,目的主机返回含确认号1100的报头。

接收到第二个报文段(其序号为1100)后,目的主机返回确认号1200。

接收到第三个报文段后,目的主机返回确认号1300。

目的主机不一定在每次接收到报文段后都返回确认号。

在上面的例子中,目的主机可能等到所有3个报文段都收到后,再返回一个含确认号1300的报文段,表示已接收到全部1200字节的数据。

但是如果目的主机再发回确认号之前等待时间过长,源主机会认为数据没有到达目的主机,并自动重发。

上面的例子中,如果目的主机接收到了报文段号为1000的第一个报文段以及报文段号为1200的最后一个报文段,则可返回确认号1100,但是再返回确认号1300之前,应该等待报文段号为1100的中间报文段。

5、报文长度(4位)由于TCP报头的长度随TCP选项字段内容的不同而变化,因此报头中包含一个指定报头字段的字段。

该字段以32比特为单位,所以报头长度一定是32比特的整数倍,有时需要在报头末尾补0。

如果报头没有TCP选项字段,则报头长度值为5,表示报头一个有160比特,即20字节。

6、保留位(6位)全部为0。

7、控制位(6位)URG:报文段紧急。

ACK:确认号有效。

PSH:建议计算机立即将数据交给应用程序。

RST:复位连接。

SYN:进程同步。

在握手完成后SYN为1,表示TCP建立已连接。

此后的所有报文段中,SYN都被置0。

FIN:源主机不再有待发送的数据。

如果源主机数据发送完毕,将把该连接下要发送的最后一个报文段的报头中的FIN位置1,或将该报文段后面发送的报头中该位置1。

8、窗口(16位)接收计算机可接收的新数据字节的数量,根据接收缓冲区可用资源的大小,其值随计算机所发送的每个报文段而变化。

源主机可以利用接收到的窗口值决定下一个报文段的大小。

9、校验和(16位)源主机和目的主机根据TCP报文段以及伪报头的内容计算校验和。

在伪报头中存放着来自IP报头以及TCP报文段长度信息。

与UDP一样,伪报头并不在网络中传输,并且在校验和中包含伪报头的目的是为了防止目的主机错误地接收存在路由的错误数据报。

10、紧急指针(16位)如果URG为1,则紧急指针标志着紧急数据的结束。

其值是紧急数据最后1字节的序号,表示报文段序号的偏移量。

例如,如果报文段的序号是1000,前8个字节都是紧急数据,那么紧急指针就是8。

紧急指针一般用途是使用户可中止进程。

11、TCP选项(0或更大)完整的TCP报头必须是32比特的整数倍,为了达到这一要求,常在TCP 选项字段的末尾补零。

12、数据部分报头后面是可选的报文段数据部分。

IP协议标准要求株距能接收最长达576字节的数据报。

无其他选项的IP报头是20字节,无其他选项的TCP报头也是20字节,所以IP选项和TCP选项且含有多达536字节数据的TCP报文段无须分片就可达到目的主机。

二、UDP报头由4个域组成,其中每个域各占用2个字节,具体为:源端口号目标端口号数据报长度校验值UDP协议使用端口号为不同的应用保留其各自的数据传输通道数据报的长度是指包括报头和数据部分在内的总的字节数。

因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)UDP协议使用报头中的校验值来保证数据的安全。

校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。

且udp必须要有校验值i贴吧新浪微博腾讯微博QQ空间人人网豆瓣MS N9回答时间:2009-4-9 19:25 |我来评论\FTP两种工作模式:主动模式(Active FTP)和被动模式(Passive FTP)FTP是仅基于TCP的服务,不支持UDP。

与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。

通常来说这两个端口是 21(命令端口)和20(数据端口)。

但FTP 工作方式的不同,数据端口并不总是20。

这就是主动与被动FTP的最大不同之处。

(一)主动FTP主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。

然后客户端开始监听端口 N+1,并发送FTP命令“port N+1”到FTP服务器。

接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。

针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP:1. 任何大于1024的端口到FTP服务器的21端口。

(客户端初始化的连接)2. FTP服务器的21端口到大于1024的端口。

(服务器响应客户端的控制端口)3. FTP服务器的20端口到大于1024的端口。

(服务器端初始化数据连接到客户端的数据端口)4. 大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)(二)被动FTP为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。

这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。

在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。

当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。

第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。

这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P 命令给客户端。

然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:1. 从任何大于1024的端口到服务器的21端口(客户端初始化的连接)2. 服务器的21端口到任何大于1024的端口(服务器响应到客户端的控制端口的连接)3. 从任何大于1024端口到服务器的大于1024端口(客户端初始化数据连接到服务器指定的任意端口)4. 服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)以上关于主动和被动FTP的解释,可以简单概括为以下两点:1、主动FTP:命令连接:客户端 >1024端口 -> 服务器 21端口数据连接:客户端 >1024端口 1024端口 -> 服务器 21端口数据连接:客户端 >1024端口 -> 服务器 >1024端口(三)主动与被动FTP优缺点:主动FTP对FTP服务器的管理有利,但对客户端的管理不利。

因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。

被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。

因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

Http访问过程原理2010-06-27 15:55:44标签:访问Http原理原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。

否则将追究法律责任。

/509018/339906很简单的一个东西,咱们慢慢来分析一下,首先,看一下拓扑图:假如主机A要访问网站:www.baidu.co m时,主机A会立即封装一个HTTP的报文,按照TCP/IP的模型,应该是是:二层报文+IP报文+TCP报文+HTTP报文,也就是:数据链接路+网络层+传输层+应用层…但是主机A在封装的过程中,发现是个域名,主机A不知道的IP地址,于是他需要先生成一个DNS的解析报文,也就是:二层报文+IP报文+TCP报文+DNS报文....可是主机A在封装的过程中,发现如果要解释DNS,必须得与DNS联系,而DNS的IP是:202.96.134.133,他与DNS联系时又不知道它的MAC地址,而且很明显与自己不在同一网段,于是得请求网关转发DNS,周时主机A也不知道网关的MAC地址时,就需要向外广播一条ARP消息,并得到了路由器的MAC地址….然后请求网关转发DNS报文给202.96.134.133….所以正个过程也就是这样:先ARP得到网关MAC,再请求网关转发DNS报文,得到 ip是: 121.14.89.10再与www.baidu.co m建立TCP/IP连接最后再开始传输HTTP报文用wiershark抓包是,大致过程就是这样(因为开了360,所以里面有两个360的广告新闻DNS,忽略它):既然咱们能抓到包,那么我们就一个一个来分析报文的过程:第一步:得到arp网关的M AC报文是这样的:ARP的报文格式:按报文内容填充就是这样的:一个请求,一个响应:请求:响应:第二步:再请求网关转发DN S报文,得到 ip是: 121.14.89.10,(在这里,实际上用了UPD的连接,因不是本文重点,且UPD报文格式简单,在这里就不详细说了。

相关主题