作者回复: 正确。而且你的答案非常细致了,说明你经过了深入的思考,很棒:)带着问题去学习,一直是非常高效的学习方法,比如这个问题里面,涉及缓冲区的概念、TCP窗口的概念等等。每次这样的思考,就让我们的理解,更加深入了一点~
作者回复: 你好,这两个信息都是关于window的,确实很容易搞混,我这里解释一下。其实跟视角没关系。 tcp window zero是指,这个tcp报文的window字段明确就是0,也就意味着这个报文的发送方的接收缓冲区已经变成0了,另一方就会停止发送数据。当然,为了避免无限等待,另一方会有探测机制,定制发送一个零载荷的报文,让window zero这一端回复报文,从这个回复报文里读取到最新的window值。 tcp window full是指,这个报文发送后,另一端的接收窗口就满了。我举个例子,现在A和B在通信,A的一个报文被wireshark标记为tcp window full,指的是A的未被确认的数据量(也就是在途字节数)跟B的接收窗口相等。这意味着A不会发送更多报文(即使B没有发送window zero的报文),因为A知道发送出去的数据量已经“填满”了B的接收缓冲区~
作者回复: 这个没有办法,ws系数只在握手包里。不过,你可以对比实际的bytes in flight,间接的推测这个系数,这就不是很准了,但是如果还有tcp window full信息出现,那就可以确定了。你试试看
作者回复: 恩差不多。第一题确切说是2^32-1 :)
作者回复: 确实是可以实操的,我也推荐大家去gitee上下载这些课件,对照我的分析过程做一遍,会比单纯看文字的收获要大得多。毕竟,抓包分析是实践性很强的技术,不动手是很难学到真本事的。 另外关于分享,我觉得每个人都有自己的独特优势,如果一个人本身乐于分享,那么做培训的过程也是令他享受的。此时我似乎明白了“享”字的双关之义,哈哈
作者回复: 如果你看一下本课的示例文件,会发现接收端在Window Full前后,receive window确实是保持不变的,对比到这个例子里就是保持在win=1000。不过这个其实并不重要。关键点在于理解bytes in flight的变化。 在t2时刻,发送端认为有1000字节的bytes in flight; 在t4时刻,由于300字节被确认了,所以发送端认为bytes in flight是1000-300=700字节。 也就是在t4-t2这一个RTT内,被确认的数据是300字节,而不是700字节或者1000字节~
作者回复: 嗯新的连接进不来了:)可以调大tcp_max_syn_backlog值看看~
作者回复: 谢谢:)你是不是觉得“车速更快”的表述有点多余?
作者回复: 您好,当时我们作为云服务商,帮助排查了云平台网络,确认没有这方面问题,后来客户自己去检查操作系统方面的原因了,更近一步的信息后来就没有沟通了。我这里介绍这个案例主要想让大家学会如何做网络分析,特别是传输速度和窗口、确认等这些关键环节的关系。 就那个主机的原因来说,可能有一定的特殊性,而网络排查过程相对来说比较普适,希望对大家平时的工作有帮助:)
作者回复: 嗯如果有做IP分片,确实要在接收端组装的~