确实,一般来说 TCP 连接是标准的 TCP 三次握手完成的:
1.客户端发送 SYN;
2.服务端收到 SYN 后,回复 SYN+ACK;
3.客户端收到 SYN+ACK 后,回复 ACK。
SYN 会在两端各发送一次,表示“我准备好了,可以开始连接了”。ACK 也是两端各发送了一次,表示“我知道你准备好了,我们开始通信吧”。
4个报文3次发送,这是因为服务端的 SYN 和 ACK 是合并在一起发送的,就节省了一次发送。这个在英文里叫 Piggybacking,就是背着走,搭顺风车的意思。
需要参考《OpenResty使用Lua搭建一个服务器实践tcpdump对特定端口抓包》先搭建一个服务器。
左边两个是客户端,右边是服务端,iptables -I INPUT -p tcp --dport 8084 -j DROP
的实验如下:
左边两个是客户端,右边是服务端,iptables -A INPUT -p tcp -m tcp --dport 8084 -j REJECT --reject-with icmp-host-unreachable
无法达到课程里边的效果。
左边两个是客户端,右边是服务端,iptables -I INPUT -p tcp --dport 8084 -j REJECT --reject-with tcp-reset
得到效果跟课程里边的一样。
此文章为5月Day 23学习笔记,内容来源于极客时间《网络排查案例课》。