协议栈会不会自动发送FIN?
协议栈不会自动发送3次握手或者4次挥手流程中的任务报文流程,但是协议栈中的定时器超时会导致状态机迁移
协议栈什么时候发送RST?
当应用层调用close的时候,并且连接上仍然有数据,对端则会发送带数据的ACK作为响应,应用层本身会再次发送RST(FIN改为RST)
协议栈中的状态机,应用层可以干预吗?
过去一直以为协议栈中的状态机,应用层无法干预,只能通过netstat查看而已
但是现在的理解是状态机可以通过类似钩子函数close,shutdown,connect,accept,listen来触发协议栈的消息发送,也会触发状态机的
变迁
协议抓包的过程中,会发现在网络数据较多的时候,ACK中会夹带数据,这个特性称作捎带确认,由于需要不断的发送ACK,但是又不想浪费
一次交互,将数据放到ACK中,称为piggerbacking
如何通过抓到的包,提取到流的数据内容,完成二进制的匹配
wireshark中的二进制解析能力(二进制匹配能力)可以做到的程度
tcp[20:3]=98:97:96 读取tcp中的20个字节处开始的3个字节的数据内容
wireshark中还有一种跟踪流的方式来查看pcap文件中的连续字节流
第三种方式就是直接解析pcap文件,将tcp的data部分的分片合并到一个文件
但是需要注意的是tcp中有一个头部长度的计算问题,也就是一个frame内找到data的偏移(ether_header+ip_header+tcp_header)
tcp_header本身是20字节,ip_header也是20字节,ether_header 14字节
实际上tcp_header头部的长度是由它内部的4个bits来决定的,而且是32bits倍数,计算字节时,需要*32/8(也就乘以4)
通过这种方式来计算的tcp_header,才是真正的头长度
阅读(938) | 评论(0) | 转发(0) |