精华内容
下载资源
问答
  • TCP数据包中的序列号(Sequence Number)不是以报文段来进行编号的,而是将连接生存周期内...在建立TCP连接的三次握手过程中,通信双方各自已确定了初始的序号x和y,TCP每次传送的报文段中的序号字段值表示所要传...

            TCP数据包中的序列号(Sequence Number)不是以报文段来进行编号的,而是将连接生存周期内传输的所有数据当作一个字节流,序列号就是整个字节流中每个字节的编号。一个TCP数据包中包含多个字节流的数据(即数据段),而且每个TCP数据包中的数据大小不一定相同。在建立TCP连接的三次握手过程中,通信双方各自已确定了初始的序号x和y,TCP每次传送的报文段中的序号字段值表示所要传送本报文中的第一个字节的序号。
            TCP的报文到达确认(ACK),是对接收到的数据的最高序列号的确认,并向发送端返回一个下次接收时期望的TCP数据包的序列号(Ack Number)。例如,主机A发送的当前数据序号是400,数据长度是100,则接收端收到后会返回一个确认号是501的确认号给主机A。
            TCP提供的确认机制,可以在通信过程中可以不对每一个TCP数据包发出单独的确认包(Delayed ACK机制),而是在传送数据时,顺便把确认信息传出,这样可以大大提高网络的利用率和传输效率。同时,TCP的确认机制,也可以一次确认多个数据报,例如,接收方收到了201,301,401的数据报,则只需要对401的数据包进行确认即可,对401的数据包的确认也意味着401之前的所有数据包都已经确认,这样也可以提高系统的效率。
            若发送方在规定时间内没有收到接收方的确认信息,就要将未被确认的数据包重新发送。接收方如果收到一个有差错的报文,则丢弃此报文,并不向发送方发送确认信息。因此,TCP报文的重传机制是由设置的超时定时器来决定的,在定时的时间内没有收到确认信息,则进行重传。这个定时的时间值的设定非常重要,太大会使包重传的延时比较大,太小则可能没有来得及收到对方的确认包发送方就再次重传,会使网络陷入无休止的重传过程中。接收方如果收到了重复的报文,将会丢弃重复的报文,但是必须发回确认信息,否则对方会再次发送。
            TCP协议应当保证数据报按序到达接收方。如果接收方收到的数据报文没有错误,只是未按序号,这种现象如何处理呢?TCP协议本身没有规定,而是由TCP协议的实现者自己去确定。通常有两种方法进行处理:一是对没有按序号到达的报文直接丢弃,二是将未按序号到达的数据包先放于缓冲区内,等待它前面的序号包到达后,再将它交给应用进程。后一种方法将会提高系统的效率。例如,发送方连续发送了每个报文中100个字节的TCP数据报,其序号分别是1,101,201,…,701。假如其它7个数据报都收到了,而201这个数据报没有收到,则接收端应当对1和101这两个数据报进行确认,并将数据递交给相关的应用进程,301至701这5个数据报则应当放于缓冲区,等到201这个数据报到达后,然后按序将201至701这些数据报递交给相关应用进程,并对701数据报进行确认,确保了应用进程级的TCP数据的按序到达。

     

    致谢:http://blog.csdn.net/wjtxt/article/details/6606022

    转载于:https://www.cnblogs.com/arhatlohan/p/4217101.html

    展开全文
  • 发送端和接收端的TCP会话维护了32位的序列号( sequence number ),用来记录发送了多少数据,而 TCP报文确认序号(acknowledgement number) 表示了有多少数据成功接收了。通常初始的序列号是随机的,可能的范围在 0 到...

    发送端和接收端的TCP会话维护了32位的序列号( sequence number ),用来记录发送了多少数据,而 TCP报文确认序号(acknowledgement number) 表示了有多少数据成功接收了。通常初始的序列号是随机的,可能的范围在 0 到4,294,967,295。wireshark中默认采用了相对序号,为了便于分析,通过之前的文章Wireshark网络分析(二)-- 使用技巧设置为原始的序号。

    TCP的可靠性借助了报文ack确认机制,基本逻辑为:

    • 发送端发送了报文,包含了序号seq和长度len;

    • 接收端收到报文之后,发送ack报文,ack=seq+len,表示下一个期望收到的报文序号。(因为从序号seq开始长度为len的数据都收到了)。

    然后各种机制、优化都是围绕上述过程进行,比如:

    • 发送端发送报文之后,等待接收ack的时间如何设定,如果长时间没有收到确认如何处理;

    • 如果发送端过程中,网络不稳定部分“很长”时间没有到达接收端,发送端又发送了报文,接收端收到了重复的报文如何处理;

    • 如果ack报文丢失了如何处理。

    本文先对于TCP报文的seq序号和ack确认的基本过程进行分析说明。

    序号分析

    为了更好地理解TCP会话中的seq序号和ack序号,可以利用tcp数据流图进行分析。wireshark【统计】--【流量图】,选择【TCPflows】:

    c3654883042cab7a322bf320f590d69b.png

    握手阶段

    packet1:客户端首先发起tcp连接的报文,其中flg没有ack标志,只有seq。

    packet2:服务端syn+ack,发出自己的序号,并且ack=seq + 1表示收到了之前的报文,期望下个报文中的序号。

    packet3:客户端回复ack,此时相对序号都为1。

    TCP完成握手,连接完成。

    数据发送阶段

    packet4:开始数据传输,客户端之前没有发送数据,因此seq为1(TCP报文带了payload长度是725)。而服务端也还没有收到数据,所以ack不变,仍然为1。

    packet5:服务端收到数据之后,ack序号增加到了1 + 725 = 726;即:下一个期望接收到的数据包序号为726,此时服务端的seq仍然为1。

    packet6:服务端收到客户端的请求之后,发送response数据包,此时服务端的seq为1,ack仍然为726,但是数据长度为1448。

    packet7:客户端收到数据包之后seq增加到726(即726-1之前的数据服务端已经成功收到了)。同时接收了1448长度的数据,,向服务端发送ack序号为1449,表示1449-1之前的数据包都收到了。

    然后数据交互,服务端不断向客户端发送数据。

    TCP Selective Acknowledegement(TCP选择确认)

    相关RFC

    • RFC 793 – TCP (Original RFC – 1981)

    • RFC 2018 – TCP Selective ACK Options (1996)

    • RFC 2883 – An Extension to SACK … (2000)

    SACK选择确认

    ack确认机制基本过程:

    • 如果数据包按照顺序到达,接收端可以对每个数据包进行确认(还有优化的延迟确认delay ack)。

    • 如果到达的数据包乱序,接收端立即发送ack数据包,序号为下一个期望到达的数据包序号。

    • 如果发送端收到了4个序号一致的ack数据包(aka Triple Duplicate ACK) ,对于缺失的报文进行重传。

    RFC2018提出了ack增强机制,选择确认(SACK)已经到达的但是乱序的数据包:

    • 发送端不需要重新发送已经成功接收的报文;

    • 通过TCP报文的option定义SACK,现代tcp协议栈均支持。

    SACK示例1

    假设服务端发送了如下顺序的数据包:

    • Pkt 1 SEQ=11 Len=10

    • Pkt 2 SEQ=21 Len=10

    • Pkt 3 SEQ=31 Len=10

    • Pkt 4 SEQ=41 Len=10

    • Pkt 5 SEQ=51 Len=10

    因为网络原因到达的顺序如下:

    • Pkt 1

    • Pkt 2

    • Pkt 4

    • Pkt 5

    • Pkt 3

    第三个数据包最后才收到,过程如下:

    24624fe87887180ea903f1a4ef358826.png

    在接收4、5号数据包的时候,缓存中有空洞,通过sack向发送方告知,我收到了41-61的数据,但是缺少31的。

    SACK示例2

    再举一个稍微复杂一点的例子,假设服务端发送了如下顺序的数据包:

    • Pkt 1 SEQ=11 Len=10

    • Pkt 2 SEQ=21 Len=10

    • Pkt 3 SEQ=31 Len=10

    • Pkt 4 SEQ=41 Len=10

    • Pkt 5 SEQ=51 Len=10

    • Pkt 6 SEQ=61 Len=10

    因为网络的原因,接收顺序如下:

    • Pkt 1

    • Pkt 3

    • Pkt 6

    • Pkt 4

    • Pkt 5

    • Pkt 2

    出现了乱序,此时的接收过程如下:

    d35078a2f5dca5fb9b2829f34391a735.png接收到数据包时,有两个空洞。

    530193702bb26d86c473b699aeb41fa5.png

    然后接收到了数据包5和2,填充了之间buffer中的空洞。

    SACK的数目

    tcp sack选项如下:

    48000a04f706ccc5edc89b67670087d0.png

    Left Edge of Block和Right Edge of Block通过32位无符号整数表示(4个字节),一组需要8个字节,n组需要占用的字节数目为:8*n+2,而TCP选项最大为40个字节,因此最多存放4个sack组。

    delay ack(延迟确认)

    如果只要接收到报文就发送一个ack确认,会增大网络负荷。RFC1122中提出了延迟确认的机制。

    在wireshark中,可以通过设置tcp.analysis.acks_frame,显示ack的是哪个报文。

    1f98d803017b1bbfacaaf289d696e9f4.png

    407b3576dc58672e1a593f144eeaf4d2.png

    小节

    TCP协议是复杂的。得了图灵奖的东东能简单吗?5a66713700ddc5337a3bd17ccbd45958.png

    可靠传输是其中一个重点内容,下一篇笔者结合工作中接收股票行情时碰到的网络异常,对于SACK、dup ack通过wireshark分析,对于潜在的问题进行探讨。

    参考文献

    https://tools.ietf.org/html/rfc1122

    https://tools.ietf.org/html/rfc2018

    https://tools.ietf.org/html/rfc793

    https://osqa-ask.wireshark.org/questions/35427/delayed-ack

    SharkFest’19 US TCP Selective Acknowledgement

    展开全文
  • wireshark抓包分析

    2020-05-27 11:03:21
    分析一下wireshark出现的一些常见提示: ...就是重复应答#前的表示报文到哪个序号丢失,#后面的是表示第几次丢失。 tcp previous segment not captured 意思就是报文没有捕捉到,出现报文的丢失。 TCP

    分析一下wireshark出现的一些常见提示:

    1. TCP Out_of_Order
      一般来说是网络拥塞,导致顺序包抵达时间不同,延时太长,或者包丢失,需要重新组合数据单元,因为他们可能是由不同的路径到达你的电脑上面。
    2. TCP Retransmission
      很明显是上面的超时引发的数据重传
    3. TCP dup ack XXX#X
      就是重复应答#前的表示报文到哪个序号丢失,#后面的是表示第几次丢失。
    4. tcp previous segment not captured
      意思就是报文没有捕捉到,出现报文的丢失。
    5. TCP spurious retransmission
      指实际上没有超时,但是看起来超时了

    控制位的类型:

    1. URG
      Urgent,表示紧急数据要提交,有了这个标记为整个报文就有了插队的特权,和紧急指针一起用。
    2. ACK
      Ackowledge,1表示这是一个确认报文,用来确认收到了包
    3. PSH
      Push,1表示这是一个推送报文,通知对方尽快响应
    4. RST
      Reset,1表示拒绝了这个包,网络发生错误的时候这种包非常多
    5. SYN
      Synchorinization,1表示同步连接,握手阶段
    6. FIN
      Finish,1表示发送方完成数据发送,挥手阶段

    其他的一些报文的格式:
    MSS:最大报文大小选择;win:窗口大小;TSval:发送时间戳;TSecr:应答时间戳

    展开全文
  • Wireshark分割、合并pcap文件 1、分割pcap文件 (1)File->Export Specified Packets(导出特定分组): (2)根据需要保存分组: ...Range:导出指定序号范围内的所有报文 2、合并两个pcap文件 (1)Fil

    Wireshark分割、合并pcap文件

    1、分割pcap文件

    (1)File->Export Specified Packets(导出特定分组):
    在这里插入图片描述
    (2)根据需要保存分组:

    • Captured:pcap文件中的所有报文
    • Displayed:当前显示的所有报文(若使用了过滤条件,则Displayed指的就是过滤后得到的报文)
    • All packet:导出所有报文
    • Selected packet:导出被选中的所有报文
    • Range:导出指定序号范围内的所有报文
      在这里插入图片描述

    2、合并两个pcap文件

    (1)File->Merge:
    在这里插入图片描述
    (2)打开需要合并的pcap文件:

    • Prepend packets to existing file:将待打开pcap文件的报文插入到已打开pcap文件的前面
    • Merge packets chronologically:将两个pcap文件的报文按照时间顺序进行合并
    • Append packets to existing file:将待打开pcap文件的报文插入到已打开pcap文件的末尾
      在这里插入图片描述
    展开全文
  • 如何利用wireshark对TCP消息进行分析 ...1 seq:数据段的序号,计算方法或者增长方式:seq2=seq1+len1(len仅仅是数据段的长度,不包括TCP头)(同一个发送方的tcp报文序号的计算方法) 2ACK:确认号的计算...
  • Wireshark 常用过滤

    2015-01-29 13:46:54
    !tcp.port==80tcp.port==23||tcp.port 21!arphttptcp.flags.syn==1...ACK:确认序号。PSH:接收方应该尽快将这个报文交给应用层。RST:重建连接。SYN:发起一个连接。FIN :完成任务,接收方的表示同意断开连接。 ...
  • 摘要: WireShark基本使用,TCP报文分析,Http报文分析,顺便复习下TCP/IP,HTTP的知识点。 TCP协议 TCP是一种面向连接的,可靠的基于字节流的传输层协议。 它的报文格式为: (挺多字段的,挑重点的理解一下:) ...
  • tcp三次握手,Wireshark实践

    千次阅读 2016-08-03 09:11:19
    linux下 tcpdump 命令监听端口生成xx.cap文件,用Wireshark打开如下tcp报文段 tcp连接 3次握手客户端 端口:47668:0xba34服务端 监听端口:9877: 0x2695序号(seq):占4个字节。TCP连接传送的数据流中的每一个字节...
  • 就是重复应答#前的表示报文到哪个序号丢失,#后面的是表示第几次丢失. 当乱序或者丢包发生时,接收方会收到一些Seq号比期望值大的包。它每收到一个这种包就会Ack一次期望的Seq值,以此方式来提醒发送方,于是就产生...
  • 一、 TCP报文格式 在了解三次握手和四次挥手之前,先知道TCP报文内部包含了哪些东西。 1 TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。TCP在发送数据前必须在彼此间建立连接,...
  • wireshark抓包分析TCP协议的三次握手连接、四次握手断开一....(其中,SYN=1,ACK=0,表示这是一个TCP连接请求数据报文序号Seq=X,表明传输数据时的第一个数据字节的序号是x) 第二次握手: 服务器收到请求后,必
  • Wireshark抓包-TCP协议包

    千次阅读 2018-08-04 19:46:47
    TCP首部格式     源端口号、目的端口号:用于寻找发端和... 序号:用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节。在tcp中tcp用序号对每个字节进行计数  确认序号:包...
  • 1.3 掌握筛选UDP或TCP报文的方法 2 实验准备 2.1 安装操作系统电脑一台 2.2 Wireshark软件 3 实验步骤 3.1 打开wireshark捕获数据分组,并停止。 3.2 给出UDP首部各字段的值 3.3 给出TCP首部各字段的值(固定部分...
  • 一、TCP/IP 三次握手 ...第二次握手:服务端在收到后,发送一个Flag(标志位)为SYN, ACK的报文,ACK的序号为客户端发来的序列号+1,即为(X+1),同时将第二次握手的报文Seq(序列号)设置为Y 第三次握手:...
  • TCP报文中的两个序号 1、Seq序号:占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记2、确认序号:占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1,为了...
  • TCP在IP报文的协议号是6。 具体说明请参考:什么是TCP协议? 二、TCP的通信过程 TCP连接的建立需要经过三次握手,连接的关闭需要经过四次挥手。 TCP的三次握手过程 ① 如图所示 ② 通过wireshark抓包分析 第...
  • 过程:STEP1: 客户端发送 SYN 报文,并发送序列号 XSTEP2: 服务端发送 SYN,ACK 报文,发送序号为 Y,确认序号为 X+1STEP3: 客户端发送 ACK 报文,确认序号为 Y+1 过程:打开 wireshark,打开浏览器进入 moodle ...
  • 目录一、tcp协议二、TCP的通信过程1.tcp三次握手wireshark抓包TCP的四次挥手wireshark抓包Fiddler 抓包 一、tcp协议 TCP(Transmission Control Protocol 传输控制协议) 是一种面向连接(连接导向)的、可靠的、 基于...
  • 可靠连接,TCP协议全解析

    千次阅读 2019-12-22 14:09:08
    二、TCP报文结构 三、TCP连接 3.1 三次握手建立连接 3.2 四次挥手释放连接 3.3 wireshark演示 四、TCP可靠连接(序号字段和确认字段) 4.1 序号 4.2 确认 4.3 重传 4.3.1 超时重传 4.3.2 冗余确认(快速重...
  • Linux中udp的丢包分析

    2020-06-18 17:17:43
    分析udp的丢包,需要分析带序号报文,RTP报文,可以分析丢包情况;若是分析iperf的udp包,没法分析出丢包来。 网上说可以使用watch netstat -su查看丢包统计。主要看RcvbufErrors和SndbufErrors,packet receive ...
  • TCP协议 什么是TCP协议? 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。 TCP报文 wireshark抓包分析——TCP/IP协议 ...序号(...
  • 直播抓包:打开一个直播间,开始用wireshark抓包。 二丶TCL的三次握手 第一次握手:发送一个TCP,标志位SYN=0,请求连接。 第二次握手:服务器发回确认,seq序号加一。 第三次握手:确认发送包。 ...
  • IP地址的配置 一、应用层 1、www抓包:在捕获的数据中选择一个http报文,打开并找到其相应的网址,复制...第一次握手:服务器发送一个TCP,标志位SYN,序号为0,表示客户端请求建立连接 第二次握手:...
  • 服务器发回包含客户端初始序列号的SYN报文段作为应答,同时将ACK序号设置为ISN+1; 客户端向服务器发送一个ACK确认,ACK序号为ISN+1. 终止一个TCP连接需要4次握手,这是由于TCP的半关闭(当一方调用shutdown关闭连接...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

wireshark报文序号