tcp协议数据报头格式:
其中标志位flag:
- URG: 紧急指针有效
- ACK:确认序号有效
- PSH:接收方应尽快将这个报文段交给应用层
- RST:重建连接
- SYN:同步序号用来发起一个连接
- FIN: 发端完成发送任务(主动关闭)
其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,如果只是单个的一个SYN,它表示的只是建立连接。TCP的几次握手就是通过这样的ACK表现出来的。但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。
tcp常见错误状态
- Tcp previous segment lost/not captured [SYN,ACK](tcp先前的分片丢失)
- Tcpacked lost segment(tcp应答丢失)
- Tcp window update(tcp窗口更新)
- Tcp dup ack [ACK](tcp重复应答)
- Tcp keep alive(tcp保持活动)
- Tcp retransmission(tcp重传)
- Tcp ACKed unseen segument (tcp看不见确认应答)
- tcp port numbers reused(tcp端口重复使用)
在线调试的时候发生过:
1、MDK---在线调试--debug,先跑起来一次,连接ok后.......
2、点击RST按钮,这里 按理说 跟掉电重新上电一样子,然 不一样,好像并没有释放掉之前的RAM..-
3、过程中抓包,就会看到这类现象.. - tcp retransmission(tcp重传)
- tcp fast retransmission (tcp快速重传)
- TCP Previoussegment lost(发送方数据段丢失)
- tcp spurious retransmission / spurious retransmission timeouts (tcp伪重传)[SYN]
spurious retransmission timeouts理解
- TCP ACKed unseen segment [RST,ACK]
- spurious retransmission timeouts
/*----------—————————————待续————————-----------*/