TCP分析
字段含义
- pkt_seqno 此TCP连接中所有报文的序号,可与Wireshark截获的报文对应。
- pkt_type 报文类型。
- RorS_seqno 发送报文序号或接收报文序号。
- snd_ssthresh 慢启动门限值(字节)
- snd_cwnd 发送方拥塞窗口(以MSS为单位)
- rcv_wnd 目前接收方通告窗口(字节)
- snd_wnd_left 发送窗口左边沿(字节)
- snd_wnd_pointer 指针(字节)
- snd_wnd_left+cwnd与snd_wnd_left+rcv_wnd的较小值为右边沿(字节)
- snd_wnd_pointer-left 已发送但未确认的字节数。
前三条报文分析(三次握手)
1 | pkt_seqno pkt_type RorS_seqno snd_ssthresh snd_cwnd rcv_wnd snd_wnd_left snd_wnd_pointer snd_wnd_left+cwnd snd_wnd_left+rcv_wnd snd_wnd_pointer-left |
首先看第一条信息。这里显示的是第一条报文发送之后的状态。
可以看到,左边沿(snd_wnd_left)为4248826968,连接同步报文占用一个字节,因此指针比左边沿+1,为4248826969,此时已发送但未被确认的字节数就是刚发的一个字节的报文,因此snd_wnd_pointer-left
=1。拥塞窗口初始设置为2MSS。简单的计算可得MSS长度为1460 。计算方法为 (snd_wnd_left+cwnd - snd_wnd_left) / 2 = 1460
然后看第二条信息。
然后,当接收放接收到这条报文的时候,会确定左边沿和指针,这里,左边沿着是4248826968,指针是4248826969 。而接收方的右边沿为左边沿+65535。
然后,接收方会对下一跳应该收到的字节发出确认,所以确认报文中的确认好是4248826969,确认之后,左边沿就会向右边移动。此时接收方的左边沿是4248826969、指针也是4248826969,右边沿是4248826969+65535 。
这里第二条报文显示的是发送方收到syn的确认之后的状态。接收方给发送方通告的窗口大小是 5840 。
然后看第三条信息。这里是第三条报文发送之后的状态。
此时,由于收到的确认,拥塞窗口增加了1,然后发送方对收到的确认报文进行确认,这个确认报文是不携带任何数据的,因此左边沿没有变换。接收方收到之后,左边沿和指针也不会有变化。
连接建立后的前四条报文
1 | pkt_seqno pkt_type RorS_seqno snd_ssthresh snd_cwnd rcv_wnd snd_wnd_left snd_wnd_pointer snd_wnd_left+cwnd snd_wnd_left+rcv_wnd snd_wnd_pointer-left |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 邱维东!
评论