当前位置:  开发笔记 > 编程语言 > 正文

TCP:如何生成seq/ack数字?

如何解决《TCP:如何生成seq/ack数字?》经验,为你挑选了2个好方法。

我目前正在开发一个程序,它可以嗅探从特定地址发送和接收的TCP数据包.我想要完成的是回复定制的数据包到某些收到的数据包.我已经完成了解析.我已经可以生成有效的以太网,IP和 - 大部分 - TCP数据包.

我唯一无法弄清楚的是如何确定seq/ack数.

虽然这可能与问题无关,但程序是使用WinPCap用C++编写的.我要求任何可能对我有帮助的提示,文章或其他资源.



1> DGentry..:

建立TCP连接时,每一方都生成一个随机数作为其初始序列号.这是一个强随机数:如果互联网上的任何人都可以猜测序列号,就会出现安全问题,因为他们可以轻松伪造数据包以注入TCP流.

此后,对于发送的每个字节,序列号将递增1. ACK字段是来自另一侧的序列号,被发送回确认接收.

RFC 793(最初的TCP协议规范)将会有很大帮助.


不是ack字段*不是*来自另一方的seq#,而是seq#+收到的长度(如下面的zainee khan回答)

2> 小智..:

我有同样的工作要做.首先,初始seq#将随机生成(0-4294967297).然后,接收方将计算它收到的数据的长度,并将ACK发送seq# + length = x给发送方.然后序列将为x,发送方将发送数据.类似地,接收器将计算长度x + length = y并发送ACK y等等......它是如何生成seq/ack的......

如果你想显示它实际上尝试在Wireshark中嗅探数据包并遵循TCP流并查看方案......

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有