了解tcp标头校验和字段的一部分

时间:2018-07-19 12:15:11

标签: python tcp

除了我自己能提供的以外,请其他人对此提供解释吗?

offset = (tcp_hdr_len << 4) 

我的理解不足:好的,是的,我们知道的tcp标头长度以4字节(32位)的倍数表示,可以在5到15之间,因此,如果是5,我们在说的是160位(20个字节)。我是否应该理解,由于此处的长度5以十六进制表示,即20字节,因此将以二进制表示为 0010 0000左操作数的值向左移动了右操作数指定的位数,因此,如果我们指定4(为什么选择4?),它将变为:

0000 0010,但是即使我是正确的人,我仍然看不到任何意义(对双关语),我不明白这对我有什么帮助。我知道偏移量用于指示标头的长度并告诉数据开始和结束的位置(但我不知道如何)

第二件事:

我不明白这些信件的来源:

pack_arg = '!HHLLBBHHH'                

我看过类似的事情:

ip_header = pack('!BBHHHBBH4s4s' ...  
tcp_header = pack('!HHLLBBHHH'

最后是这个:

tcp_flags = tcp_fin + (tcp_syn << 1) + (tcp_rst << 2) + (tcp_psh <<3) + (tcp_ack << 4) + (tcp_urg << 5)

为什么这些按位运算的数字不断增加?

这是python函数的一部分

我在Wikipedia中看到了关于校验和如何工作的解释,这些解释很容易理解,但是如上所述,当涉及到函数的详细信息时,我还不太了解。

谢谢

0 个答案:

没有答案