tcpdump是很好的tcp分析工具,在此配合nc命令来学习tcpdump
第一步是启动8000端口
第二步是启动抓包程序
第三步是创建一次握手链接,ctrl+c是退出客户端,能看到四次挥手
红色区域是三次握手,蓝色区域是一次数据发收,绿色区域是四次挥手(有一个ack包被合并了因此只有三行)算法
tcpdump的参数解释服务器
参数 | 解释 |
---|---|
-n | 显示ip |
-i | 抓取网卡lo |
tcp and host 127.0.0.1 and port 8000 | 过滤表达式 |
tcp的标示位在[]中,[S]表示SYN,[F.]表示FIN,而.表示ACK网络
为何服务端收到数据后有时要等40ms后才会ack?
这是由于Delay ACK的缘由(Linux上默认是关闭delay ack)。delay ack的累积确认让多个报文的ack合成一个ack返回。而捎带确认就是如服务器有返回数据,那么会带上上一个ack。 tcp
Nagle
它是Delay ACK的另外一种相对的算法,它旨在减小网络中的tcp报文数量,Nagle默认是开启的。 工具
Nagle原理学习
若是同时开启Delay ACK和Nagle将会致使每次数据请求都会延迟40ms,若是对实时性有很高要求,可同时关闭delay ack和nagle,它们都会致使ack包延迟发送spa