草庐IT

握手后的 TCP : seq ack homework

coder 2023-09-18 原文

好的,所以我有这个作业问题,我知道“主机 X”向“主机 Z”发送了一个数据包,Seq=46 和 Ack=87,有效负载/数据 =“你好?”

从那里我得到:一个从主机 Z 发送到主机 X 的数据包,有效负载='Go away',最后一个数据包从主机 X 发送到主机 Z,数据='No!'

作业是找出最后两个数据包的 Seq 和 Ack 的值。我知道握手已经结束,所以它不仅仅是将 Seq 加 1 并将其放入下一个数据包的 Ack 中那么简单。我在某处读到,当接收到有效载荷时,接收者会发出一个等于 1 + 有效载荷字节长度的 Ack。如果那是正确的,我将如何将这些字符串转换为字节? Seq 会发生什么?这仍然是直接从先前的数据包 Ack 中抓取的吗?

非常感谢大家。

假设每个字符等于一个字节,我将继续回答我的问题,如果我错了希望有人能纠正我。

我假设我得到的 Seq 和 Ack 是握手后的第一次传输,所以:

X->Z Seq=45 Ack=NULL
X<-Z Seq=86 Ack=46
X->Z Seq=46 Ack=87

X->Z Seq=46 Ack=87 data='Hello?'  (6 bytes)
X<-Z Seq=87 Ack=52 data='Go away' (7 bytes)
X->Z Seq=52 Ack=94 data='No!'     (3 bytes)

我相信这就是全部,我上面的内容是正确的,但如果我做错了什么,请告诉我。再次感谢大家。

最佳答案

我会推荐安装 wireshark,然后玩。您可以查看各个 TCP 段、标志和数据。一段时间后,您就会了解它是如何工作的。

我认为你的答案是正确的,你也可以像这样添加标志和 len 以帮助理解。

X->Z [SYN]      Seq=45
X<-Z [SYN, ACK] Seq=86 Ack=46
X->Z [ACK]      Seq=46 Ack=87

X->Z [ACK]      Seq=46 Ack=87 Len=6 data='Hello?'  
X<-Z [ACK]      Seq=87 Ack=52 Len=7 data='Go away'
X->Z [ACK]      Seq=52 Ack=94 Len=3 data='No!'

请注意至少还有一个序列,即使应用层没有做任何其他事情也是如此。

关于握手后的 TCP : seq ack homework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11292810/

有关握手后的 TCP : seq ack homework的更多相关文章

  1. ruby - 变量赋值后的 if 语句 - 有多常见? - 2

    我最近与一位同事讨论了以下Ruby语法:value=ifa==0"foo"elsifa>42"bar"else"fizz"end我个人并没有看到太多这种逻辑,但我的同事指出,这实际上是一种相当普遍的Rubyism。我试着用谷歌搜索这个主题,但没有找到任何文章、页面或SO问题来讨论它,这让我相信这可能是一种非常实际的技术。然而,另一位同事发现语法令人困惑,而是将上面的逻辑写成这样:ifa==0value="foo"elsifa>42value="bar"elsevalue="fizz"end缺点是value=的重复声明和隐式elsenil的丢失,如果我们想使用它的话。这也感觉它与Ruby

  2. ruby - 无论如何要在 REPL 中重新加载修改后的 gem 文件 - 2

    在尝试构建Rubygem(使用Bundler)时,我倾向于使用Bundler提供的REPL测试代码——可通过bundleconsole访问。有什么方法可以重新加载整个项目吗?我最终再次加载单个(更改的)文件以测试新更改。 最佳答案 以下hack适用于我的一个相对简单的gem和Ruby2.2.2。我很想看看它是否适合你。它做出以下假设:您具有传统的文件夹结构:一个名为lib/my_gem_name.rb的文件和一个文件夹lib/my_gem_name/,其中包含任何文件/文件夹结构。您要重新加载的所有类都嵌套在您的顶级模块MyGemN

  3. ruby - 删除指定节点之后的所有节点 - 2

    这个问题在这里已经有了答案:Nokogiri:SelectcontentbetweenelementAandB(3个答案)关闭2年前。我正在从url中抓取文本的div,并想删除具有backtotop类的段落下方的所有内容。我在stackoverflow上看到了一段遍历代码片段,看起来很有希望,但我不知道如何将它合并,所以@el只包含第一个p.backtotop之前的所有内容分区我的代码:@doc=Nokogiri::HTML(open(url))@el=@doc.css("div")[0]end遍历片段:doc=Nokogiri::HTML(code)stop_node=doc.css

  4. ruby - `+` 在 `*` 之后的含义,当后者在正则表达式中用作量词时 - 2

    今天我遇到了下面的正则表达式,想知道Ruby会用它做什么:>"#a"=~/^[\W].*+$/=>0>"1a"=~/^[\W].*+$/=>nil在这种情况下,Ruby似乎忽略了+字符。如果这是不正确的,我不确定它在做什么。我猜它没有被解释为量词,因为*没有转义并且被用作量词。在Perl/Ruby正则表达式中,有时当一个字符(例如,-)在不能被解释为特殊字符的上下文中使用时,它会被视为文字。但如果在这种情况下发生这种情况,我希望第一个匹配失败,因为左值字符串中没有+。这是对+字符的巧妙正确使用吗?以上行为是错误吗?我是否遗漏了一些明显的东西? 最佳答案

  5. 计算机网络笔记:TCP三次握手和四次挥手过程 - 2

    TCP是面向连接的协议,连接的建立和释放是每一次面向连接的通信中必不可少的过程。TCP连接的管理就是使连接的建立和释放都能正常地进行。三次握手TCP连接的建立—三次握手建立TCP连接①若主机A中运行了一个客户进程,当它需要主机B的服务时,就发起TCP连接请求,并在所发送的分段中用SYN=1表示连接请求,并产生一个随机发送序号x,如果连接成功,A将以x作为其发送序号的初始值:seq=x。主机B收到A的连接请求报文,就完成了第一次握手。客户端发送SYN=1表示连接请求客户端发送一个随机发送序号x,如果连接成功,A将以x作为其发送序号的初始值:seq=x②主机B如果同意建立连接,则向主机A发送确认报

  6. ChatGPT教程之深入了解魔术背后的技术 - 2

    解开谜团:深入探索ChatGPT的技术奇迹。ChatGpt无处不在,无论是在播客、博客、YouTube还是社交媒体上。当我注意到这项新技术如此受欢迎时,我决定试一试,我被震惊了!有很多关于ChatGpt及其魔力的博客,但在这篇博客中,我将深入探讨其内部技术及其工作原理!ChatGpt简介根据OpenAI,ChatGpt被描述为:“我们训练了一个名为ChatGpt的模型,它以对话方式进行交互。对话格式使ChatGpt可以回答后续问题、承认错误、挑战不正确的前提并拒绝不适当的请求。ChatGPT是InstructGPT的兄弟模型,它经过训练可以按照提示中的说明进行操作并提供详细的响应。”OpenA

  7. ruby - 在随后的 bundle 安装中跳过 native 扩展重新编译 - 2

    由于安装nokogirigem(1.6.0)需要时间,我的生产部署需要额外几分钟。我知道这是因为安装gem会触发native扩展编译。请注意,我已经打包我的包并将其checkinDVCSbundlepackage如果没有其他任何变化,是否有一种方法可以避免重新编译native扩展,从而加快部署速度?更新:我使用OpscodeChef进行部署(具体来说是chef-solo)环境是:Ubuntu12.04LTS64位ruby193-p448 最佳答案 我找到了一种方法来做到这一点。解释如下:Bundler,默认情况下将gems安装到环境

  8. ruby - 此修改后的二十一点游戏的最佳获胜策略是什么? - 2

    问题有没有可以保持的最佳值(value),这样我才能赢得尽可能多的比赛?如果是这样,那是什么?编辑:是否可以为给定的限制计算出确切的获胜概率,而与对手的所作所为无关?(自大学以来,我还没有做过概率和统计)。我有兴趣将其作为与模拟结果进行对比的答案。编辑:修复了我算法中的错误,更新了结果表。背景我一直在玩改进的二十一点游戏,其中对标准规则进行了一些相当烦人的规则调整。我已将与标准二十一点规则不同的规则斜体化,并为不熟悉的人添加了二十一点规则。修改二十一点规则正是两个人类玩家(经销商无关)每个玩家面朝下发两张牌双方玩家_ever_都不知道对手纸牌的_any_的值在_both_完成手牌之前,

  9. ruby - yarn 未初始化常量 Socket::SOL_TCP - 2

    我在这里尝试使用yarn,遇到了一个可能与ruby​​相关的问题。在执行任何yarn命令,我收到错误.../.rvm/gems/ruby-2.3.0/gems/yarn-0.1.1/lib/yarn/server.rb:14:in':uninitializedconstantSocket::SOL_TCP(NameError)错误堆栈:$yarn.../.rvm/gems/ruby-2.3.0/gems/yarn-0.1.1/lib/yarn/server.rb:14:in':uninitializedconstantSocket::SOL_TCP(NameError)Didyoume

  10. Ruby 相当于 Python 的 "array[i:]"选择 i 之后的所有数组元素? - 2

    我发现自己想要类似Python的东西ary=[1,2,3,4,5,6,7,8]ary[2:]#=>[3,4,5,6,7,8]这些天所有的时间。解决方案最终总是多行且丑陋。我想知道最优雅的解决方案可能是什么,因为我的不值得展示。 最佳答案 使用Array#drop2.1.0:019>ary.drop(2)=>[3,4,5,6,7,8] 关于Ruby相当于Python的"array[i:]"选择i之后的所有数组元素?,我们在StackOverflow上找到一个类似的问题:

随机推荐