1. 实际捕获一个TCip数据报的首部开销为首部,回答相关问题!

您的位置: >
> SmartSniff(TCP/IP网络数据抓包工具) v2.26汉化版
SmartSniff(TCP/IP网络数据抓包工具) v2.26汉化版
软件大小:202K
软件语言:简体中文
软件类型:国产软件
软件授权:免费软件
更新时间:
软件类别:网络辅助
软件官网:
应用平台:Windows10, Windows8, Windows7, WinVista, Win2003, WinXP, Win2000
网友评分:8.1分
SmartSniff是一款很小的一个数据包捕获工具,短小精悍,用来捕捉数据包很实用和方便,容易使用,SmartSniff允许通过你的网络适配器去捕捉 TCP/IP数据包,你能够用 Ascii 模式查看TCP/IP会话,包括这些基本的协议:HTTP,SMTP, POP3,FTP,DNS等。
SmartSniff(TCP/IP网络数据抓包工具) v2.26汉化版
高速下载通道
其它下载地址
感谢您对多多软件站的信任,请把这份信任分享给您的朋友!
您的评论需要经过审核才能显示!
第1楼 发表于: 22:54:03非常好,支持网卡适配器选择,内容也方便查阅。明天试一下能支持多大测试。多谢
软件排行榜
2.47M / 简体中文 /7.3分
29.3M / 简体中文 /7.8分
65.1M / 简体中文 /7.7分
4.51M / 多国语言 /8.2分
214K / 简体中文 /8.3分
601K / 简体中文 /7.5分
7.69M / 简体中文 /8分
27.2M / 简体中文 /7.5分
658K / 简体中文 /10分
4.24M / 简体中文 /7.6分
Copyright (C)
. All rights reserved.& & & TCP是协议栈中传输层协议,为应用层提供了一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。
& & 学习TCP,首先自然得从TCP包头开始。下面是TCP首部的示意图:
& & & & &图中展示了整个TCP首部的组成,下面就每个具体的字段来详细了解一下;
1.&源和目的端口号 &
& & & &前32位分别是,16位的源和目的端口号,用于寻找发送端和接收端应用进程。可以这样来看,端口号用来区别主机中的不同进程,而IP地址则是用来标识不同的主机。这两个源端口值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接。
2. &32位的序列号
& & & & 序列号是用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节在数据流中的序号。如果将字节流看作在两个应用程序间的单向流动,则TCP用序列号对每个字节进行计数。序号是32bit的无符号数。当建立一个新的连接时,SYN标志变1。序号字段包含由这个主机选择的该连接的初始序号ISN(Initial
SequenceNumber),该主机要发送数据的第一个字节序号为这个ISN加1,因为SYN标志消耗了一个序号(PS:F I N标志也要占用一个序号)。
3. &32位的确认序列号
& & & & &既然每个传输的字节都被计数,32位确认序列号包含发送确认的一端所期望收到的下一个序号。因此,确认序号应当是上次已成功收到数据字节序号加1。不过,只有当标志位中的ACK标志(下面介绍)为1时该确认序列号的字段才有效。
4. &4位的首部长度
& & & & 4位的首部长度给出首部中32 bit字的数目。需要这个值是因为任选字段的长度是可变的。这个字段占4bit(最多能表示15个32bit的的字,即4*15=60个字节的首部长度),因此TCP最多有60字节的首部。然而,没有任选字段,正常的长度是20字节。
5. &6位标识位
& & & & 跳过6位保留字段,在TCP首部中有6个标志比特。它们中的多个可同时被设置为1。依次为URG,ACK,PSH,RST,SYN,FIN。(可以参考这里,有更多详细的解释:&&)
6. &16位窗口大小
& & & &TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小是一个16 bit字段,因而窗口大小最大为65535字节。
7. & 16位校验和
& & & &检验和覆盖了整个的TCP报文段: TCP首部和TCP数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。
8. & 16位紧急指针
& & & 只有当URG标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。
9. & 可选项字段
& & & &TCP的选项是可选的,但是几乎在每一个SYN报文段中都含有TCP选项字段。常见的TCP选项如下:(.cn/s/blog_4290ece1010008ew.html )
  Kind=0:选项表结束(1字节)
End of Option List +--------+ || +--------+ Kind=0
  Kind=1:无操作(1字节)
No-Operation +--------+ || +--------+ Kind=1&
&Kind=2:最大报文段长度(4字节)&
Maximum Segment Size 即MSS选项 +--------+--------+---------+--------+ |00100| max seg size | +--------+--------+---------+--------+ Kind=2
Kind=3:窗口扩大因子(4字节)
TCP Window Scale Option(WSopt): +-----------+-----------+-----------+ | Kind=3|Length=t| +-----------+-----------+-----------+ Kind: 3 Length: 3 bytes
Kind=8:时间戳(10字节)&
TCPTimestamps Option (TSopt): +------+-----+------------------+----------------------+ |Kind=8 | 10 | TS Value(TSval) |TS Echo Reply (TSecr)| +------+-----+------------------+----------------------+ 1 1 4 4 Kind: 8 Length: 10 bytes
& & && 每个选项的开始是1字节kind字段,说明选项的类型。kind字段为0和1的选项仅占1个字节。其他的选项在kind字节后还有len字节。它说明的长度是指总长度,包括kind字节和len字节。设置无操作选项的原因在于允许发方填充字段为4字节的倍数(应为tcp首部长度记录的是按32bit的字长计算包头长度,其必然为4字节的倍数)。下面详细地介绍下几个常见的选项。
&& && kind=3 窗口扩大因子通过将原窗口大小进行移位操作来进行扩大,一个字节的移位记数器取值最小为0(没有扩大窗口的操作),最大为14。这个最大值14表示窗口大 小为1 073 725 440字节(65535&&14)。窗口扩大因子有如下三个约定:
1、& 只有主动连接方的第一个SYN可以发送窗口扩大因子;
2、& 被动连接方接收到带有窗口扩大因子的选项后,如果支持,则可以发送自己的窗口扩大因子,否则忽略该选项;
3、& 如果双方支持该选项,那么后续的数据传输则使用该窗口扩大因子。
&&&&&& kind=2 最大报文段长度(MSS)是TCP提供可靠性的一种重要的方式。通过MSS,应用数据被分割成TCP认为最适合发送的数据块。跟最大报文段长度最为相关的 一个参数是网络设备接口的MTU,以太网的MTU是1500,基本IP首部长度为20,TCP首部是20,所以MSS的值可达1460(MSS不包括协议首部,只包含应用数据)。同窗口扩大因子一样,MSS也只能出现在SYN报文段中进行协商,如果协商不成功,则默认为536字节。
&&&&&& kind=8 时间戳选项使发送方在每个报文段中放置一个时间戳值。接收方在确认中返回这个数值,从而允许发送方为每一个收到的ACK计算RTT(Round-Trip Time: 往返时延,从发送端发送数据开始,到发送端收到来自接收端的确认,总共经历的时延)。&
&&&&&& TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。 TCP连接的建立与首部的标志比特有关,如上文介绍包头中有6个bit的标志位依次为URG 、ACK、 PSH、 RST、 SYN、 FIN,具体代表的意义上文已经详细介绍了,这里不再赘述。(本节可以参看 http://blog.chinaunix.net/space.php?uid=&do=blog&id=405055
1.& 3次握手--建立连接
  在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换&TCP窗口大小信息。
  第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
  第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
  完成三次握手,客户端与服务器开始传送数据。
&&&& 可以用wireshark实际抓包来验证三次握手,下图中前三个数据包分别为三次握手的数据包:
2. 4次挥手--断开连接
&&& && 第一次, 主机1(连接的任意一端,可以为服务端,也可以为客户端)发送FIN报文段。
&& & & 第二次, 主机2收到这个FIN报文段,发回一个ACK报文段,确认序号为收到序号加1。
&& & & 第三次, 主机2发回一个FIN报文段。
& && & 第四次, 主机1收到这个FIN报文段,发回一个ACK报文段,确认序号为收到序号加1。
&&& && 一个TCP连接是全双工的(即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭, 所以正常的终止一个连接需要四次握手。收到一个FIN只意味着在这一方向上没有数据流动。一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的 一方(即发送第一个FIN)将执行主动关闭,而另一方(收到这个FIN)执行被动关闭。通常一方完成主动关闭而另一方完成被动关闭。
&&&&&&如果在两倍最大分组生存期内FIN的应答没有到达的话,FIN的发送方就会直接释放连接。另一方最终也会注意到,好像对方已经不再监听该连接了,因而也会超时。虽然理论上不完美,但实际中很少出现问题。
&&& 同样可以用wireshark捕捉最后四个挥手包,从高亮的一行起:
3. 连接状态转换
& & & 上面给出了TCP正常的状态变迁图,其中左边为服务器端程序的状态变迁,右端为客户端程序的状态变迁。其中8和9的顺序可以互换。另外在上一小节中也已经说明了,可以由任意一端首先发送FIN包终止连接。
&&&& 在状态变迁图中,2、3、4、5对应了建立连接的三次握手过程,6、7、8、9、10、11对应了终止连接的四次挥手过程。
&&&& 12号状态为2MSL超时,使用2MSL超时可以防止刚被释放的端口立即再次被重用,超时时间在RFC中指出为120s。
&&&& 下面给出每个状态的意义:
4.& PS:附上两个网上常见的问题:
& & & & 1.为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
&&&&&& 这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。 但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭 SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。(个
人理解就是,3次握手的时候双方都是准备好通话的即初衷一致,所以不需要对双方的状态作区分,服务器的应答ACK时会同时包含了自己的同步SYN报文。而 会话结束的时候,双方可能在对待结束的态度不一致,一方请求结束连接FIN时,另一方还有数据没有传输完毕,所以不能在应答ACK的同时结束连接FIN)
&&& & && 2.为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
&&&&& 这是因为虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到 ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于 LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的 ACK报文。
&&&& 上面一节介绍了正常的连接情况,但是有时候会有一些异常情况,我们将在下面进行介绍:
1.连接超时
&&&&& 当服务器处于LISTEN状态收到SYN报文段时,服务器可能无法进行响应(如服务器资源不足),这时服务器不发送SYN,ACK报文段,这就进入了连接超时状态。处于连接超时状态下,客户端将多次发送SYN报文段进行重连,一般发送三次,每次之间的间隔时间增大,以给服务器端足够的时间从忙状态进入空闲状态。在程序中,通过对纯SYN包不进行处理的方式避免了重复的SYN。
2.同时打开
&&&&&& 两个应用程序同时彼此执行主动打开的情况是可能的,尽管发生的可能性极小。每一方必须发送一个SYN,且这些SYN必须传递给对方。这需要每一方使用一个 对方熟知的端口作为本地端口。这又称为同时打开(simultaneous open)。同时打开对应于两个应用程序同时发送SYN报文段,都进入SYN_SENT状态。根据RFC793,在SYN_SENT状态下收到SYN报文 段,将发送SYN,ACK报文段,然后进入到SYN_RCVD状态,在SYN_RCVD状态收到SYN,ACK报文段就是收到了ACK报文段,两个应用程
序同时进入到ESTABLISHED状态。
3.同时关闭&&&&
&&&&& 双方都执行主动关闭也是可能的,TCP协议也允许这样的同时关闭(simultaneous close)。对于同时关闭需要增加一个状态-CLOSING状态。当应用程序发出FIN报文段后进入FIN_WAIT_1状态,在第8步中未收到ACK 报文段,而是收到一个FIN报文段则发送一个ACK,并进入CLOSING状态,在CLOSING状态下收到ACK则进入TIME_WAIT状态。这样两 个程序就进行了同时关闭。
4.复位报文段
&&&& TCP首部中RST标志是用于复位的。一般说来,无论何时一个报文段发往基准的连接(referenced connection)出现错误, TCP都会发出一个复位报文段(这里提到的“基准的连接”是指由目的IP地址和目的端口号以及源IP地址和源端口号指明的连接)。
&&&& 可能服务程序并未启动进入到LISTEN状态,这时TCP发送复位报文段以通知客户端程序端口未处于监听状态。
&&&& 我们可以看到,通过四次握手TCP终止一个连接,这种方式称为有序释放。但也可以直接使用复位报文段来中途释放一个复位报文段,这称为异常释放。异常终止时,发送方会清空所有待发送数据,接收方会区分发送方进行的是异常关闭还是正常关闭,以进行相应的处理。
&&&& 如果一方已经关闭或异常终止连接而另一方却还不知道,我们将这样的TCP连接称为半打开(Half-Open)的。任何一端的主机异常(如突然掉电)都可能导致发生这种情况。只要不打算在半打开连接上传输数据,仍处于连接状态的一方就不会检测另一方已经出现异常。当仍处于连接状态的一方向已经处于异常状态的另一方继续发送数据时,由于接收方不知道数据报文段中提到的连接,则使用复位报文段进行应答。
&&&& 用wireshark展示一个完整的tcp会话流图:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:12321次
排名:千里之外
原创:12篇
转载:37篇
(2)(2)(1)(1)(4)(12)(18)(1)(4)(1)(1)(1)(1)(2)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'数据报_百度百科
声明:百科词条人人可编辑,词条创建和修改均免费,绝不存在官方及代理商付费代编,请勿上当受骗。
数据报是通过网络传输的数据的基本单元,包含一个报头(header)和数据本身,其中报头描述了数据的目的地以及和其它数据之间的关系。数据报是完备的、独立的数据实体,该实体携带要从源计算机传递到目的计算机的信息,该信息不依赖以前在源计算机和目的计算机以及传输网络间交换。[1]
在数据报操作方式中,每个数据报自身携带有足够的信息,它的传送是被单独处理的。整个数据报传送过程中,不需要建立,网络节点为每个数据报作路由选择,各数据报不能保证按顺序到达目的节点,有些还可能会丢失。[1]
数据报摘要
数据报工作方式的特点:
1.同一报文的不同分组可以由不同的传输路径通过通信子网;
2.同一报文的不同分组到达目的结点时可能出现乱序、重复与丢失现象;
3.每一个分组在传输过程中都必须带有目的地址与源地址;
4.数据报方式报文传输延迟较大,适用于突发性通信,不适用于长报文、会话式通信。
数据报IP数据报
定义了一个在因特网上传输的包,称为数据报(IP Datagram)。这是一个与硬件无关的虚拟包, 由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。首部中的源地址和目的地址都是地址。
IP数据报首部的固定部分中的各字段
(1)版本:占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。广泛使用的IP协议版本号为4(即)。
(2)首部长度:占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。
(3)区分服务:占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(Differentiated)。只有在使用区分服务时,这个字段才起作用。
(4)总长度:总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。
在IP层下面的每一种都有自己的格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元(MaximumUnit)。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。
(5)标识(identification):占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
(6)标志(flag):占3位,但只有2位有意义。
①标志字段中的最低位记为MF(Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。
②标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。
(7)片偏移:占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。
(8)生存时间:占8位,生存时间字段常用的的英文缩写是(To),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在中兜圈子,因而白白消耗。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把减1。当TTL值为0时,就丢弃这个数据报。
(9)协议:占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
(10)首部检验和:占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。
(11)源地址:占32位。
(12)目的地址:占32位。
IP数据报首部的可变部分
IP首部的可变部分就是一个可选字段。选项字段用来支持排错、测量以及安全等措施,内容很丰富。此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。某些选项项目只需要1个字节,它只包括1个字节的选项代码。但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍。
增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。新的IP版本IPv6就将IP数据报的首部长度做成固定的。
这些任选项定义如下:
(1)安全和处理限制(用于军事领域)
(2)记录路径(让每个路由器都记下它的)
(3)时间戳(让每个路由器都记下它的IP地址和时间)
(4)宽松的源站路由(为数据报指定一系列必须经过的IP地址)
(5)严格的源站路由(与宽松的源站路由类似,但是要求只能经过指定的这些地址,不能经过其他的地址)
这些选项很少被使用,并非所有主机和路由器都支持这些选项。[1]
汤小丹等.《计算机操作系统》(第三版):西安电子科技大学,2010
中国电子学会(Chinese Instit...
提供资源类型:内容

我要回帖

更多关于 icmp数据报 的文章

 

随机推荐