Seq和Ack

http://blog.csdn.net/bytebai/article/details/21752925

握手阶段:

序号    方向         seq           ack
1    A->B         0               0
2         B->A         0               0+1=1
3         A->B         1               0+1=1
解释:
1:A向B发起连接请求,以一个随机数初始化A的seq,这里假设为0,此时ACK标记为0,也就是如果抓包的话是看不到ack标记的。

2:B收到A的连接请求后,也以一个随机数初始化B的seq,这里假设为0,意思是:你的请求我已收到,我这方的数据流就从这个数开始。B的ACK是A的seq加1,即0+1=1

3:A收到B的回复后,它的seq是它的上个请求的seq加1,即0+1=1,意思也是:你的回复我收到了,我这方的数据流就从这个数开始。A此时的ACK是B的seq加1,即0+1=1

数据传输阶段:

序号         方向        seq             ack                                     size
23                 A->B                40000         70000                                 1514
24                 B->A                70000         40000+1514-54=41460     54
25                 A->B                41460         70000+54-54=70000         1514
26                 B->A                70000         41460+1514-54=42920     54
解释:
23:B接收到A发来的seq=40000,ack=70000,size=1514的数据包。
24:于是B向A也发一个数据包,告诉A,你的上个包我收到了。B的seq就以它收到的数据包的ACK填充,ACK是它收到的数据包的SEQ加上数据包的大小(不包括以太网协议头,IP头,TCP头),以证实B发过来的数据全收到了。
25:A在收到B发过来的ack为41460的数据包时,一看到41460,正好是它的上个数据包的seq加上包(应用层纯数据)的大小,就明白,上次发送的数据包已安全到达。于是它再发一个数据包给B。这个正在发送的数据包的seq也以它收到的数据包的ACK填充,ACK就以它收到的数据包的seq(70000)加上包的size(54)填充,即ack=70000+54-54(全是头长,没数据项)。

其实,在握手和结束时确认号应该是对方序列号加1,传输数据时则是对方序列号加上对方携带应用层数据的长度。如果从以太网包返回来计算所加的长度,就嫌走弯路了。
另外,如果对方没有数据过来,则自己的确认号不变,序列号为上次的序列号加上本次应用层数据发送长度。

时间: 2024-11-07 21:57:40

Seq和Ack的相关文章

tcp协议seq和ack

参考链接:http://blog.csdn.net/a19881029/article/details/38091243

SEQ序号于ACK序号理解总结(一)

Seq:就是我们常说的序号.对于要发送的数据的第一个序号而言这个序号是通过一个算法计算得到一个初始序号(ISN)加1.至于ISN怎么计算而来这里不讨论.这里我们以wireshark序号为准.假设某时序号为1000,简单的理解就是发送方告诉接收端"我发送的数据是从第1000开始的". ACK序号:就是我们常说的确认序号.确认序号是上一次已经成功接收到数据字节序号加1.还可以理解为接收端告诉发送端下一次想接收开始序号.假设某时确认序号为1000,简单的理解就是接收方告诉发送方"我

SEQ序号与ACK序号理解总结(一)

Seq:就是我们常说的序号.对于要发送的数据的第一个序号而言这个序号是通过一个算法计算得到一个初始序号(ISN)加1.至于ISN怎么计算而来这里不讨论.这里我们以wireshark序号为准.假设某时序号为1000,简单的理解就是发送方告诉接收端"我发送的数据是从第1000开始的". ACK序号:就是我们常说的确认序号.确认序号是上一次已经成功接收到数据字节序号加1.还可以理解为接收端告诉发送端下一次想接收开始序号.假设某时确认序号为1000,简单的理解就是接收方告诉发送方"我

TCP连接建立系列 — 服务端接收ACK段(一)

http://blog.csdn.net/zhangskd/article/details/17923917 分类: Linux TCP/IP Linux Kernel 2014-01-07 09:46 2311人阅读 评论(2) 收藏 举报 TCPIPlinux内核 目录(?)[+] 本文主要分析:三次握手中最后一个ACK段到达时,服务器端的处理路径. 内核版本:3.6 Author:zhangskd @ csdn blog 函数路径 以下是第三次握手时,服务端接收到ACK后的处理路径. 接收

服务器重复发送SYN ACK 和 TCP_DEFER_ACCEPT设置

现象: 以下为其他网站提供,和我遇到的情况一样. 就是服务器老是重复发送 SYN, ACK. 4414.229553  client -> server TCP 62464 > http [SYN] Seq=0 Win=65535 Len=0 MSS=1452 WS=3 TSV=116730231 TSER=04414.229633 server -> client  TCP http > 62464 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MS

TCP协议: SYN ACK FIN RST PSH URG 详解

TCP的三次握手是怎么进行的了:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手:接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让发送端发送一个确认数据包,这是第二次握手:最后,发送端发送一个SYN=0,ACK=1的数据包给接收端,告诉它连接已被确认,这就是第三次握手.之后,一个TCP连接建立,开始通讯. *SYN:同步标志同步序列编号(Synchronize Sequence Numbers

RYU 中如钩构建TCP数据包,设置ACK等标志

e = ethernet.ethernet(dst=_eth.src, src=_eth.dst, ethertype=_eth.ethertype) i = ipv4.ipv4(dst='192.168.1.1',#_ipv4.src, src=_ipv4.dst, proto=_ipv4.proto, flags=_ipv4.flags ) t = tcp.tcp( dst_port=_tcp.src_port, src_port=_tcp.dst_port, seq=0, ack=1 )

网络安全之tcpdump工具

引言 wireshark使用一款非常不错的抓包软件,在图形化界面占绝对统治地位:尽管其在字符界面下有些许选项可供使用,但终究不太方便,下面我再介绍一款NB的终端抓包工具 tcpdump 1.混杂模式 linux的网卡有混杂模式一说,当开启混杂模式后,网卡可以抓取所有的数据包,不管这个包是不是发给自己或自己发出的.由于随意截取别人的数据包存在一定安全问题,因此linux对于网卡默认是关闭混杂模式的,切只有root用户能够开启网卡混杂模式,开启方式: ifconfig ethX promisc 2.

小白日记10:kali渗透测试之端口扫描-UDP、TCP、僵尸扫描、隐蔽扫描

端口扫描 二三四层发现的目的只是为了准确发现所有活着主机IP,确定攻击面,端口扫描即发现攻击点,发现开放端口.端口对应网络服务及应用端程序,服务端程序的漏洞通过端口攻入.[所有的扫描结果,都不要完全相信] 一个端口就是一个潜在的通信通道,也就是一个入侵通道.对目标计算机进行端口扫描,能得到许多有用的信息.进行扫描的方法很多,可以是手工进行扫描,也可以用端口扫描软件进行扫描.在手工进行扫描时,需要熟悉各种命令.对命令执行后的输出进行分析.用扫描软件进行扫描时,许多扫描器软件都有分析数据的功能.通过