用Python的Asyncore.dispatcher写了个小服务器,客户端使用telnet连接上去之后一直显示连接丢失,想抓下包看看
抓包结果如下:
服务器在192.168.1.102:8080 端口监听
从第二行是客户端telnet的请求,SYN seq = 0
第三行是同样的请求,表明这个包被重传或者通过其它路由到达了8080端口。
第四行是服务器对客户端连接请求的确认 SYN+ACK seq = 0 ,ack = 1
第五行是路由器发送过来的,表明当前的包有更优化的路由传递。
紧接着是客户端的ACK,三次握手表明连接建立
…
…
稍后,8080端口发送了一个FIN关闭请求,35660确认这个FIN请求,ACK=2
正常的关闭需要四次请求,客户端这边需要再发送一次FIN,但是抓的包中没有看到
在抓的包中看到8080端口发送过来的RST请求,表明服务端因为异常需要提前关闭连接,客户端收到RST之后可以不发送ACK确认,因为服务器端不会等待这个确认信息直接关闭连接了。