面试的时候被问到这么一个问题:如果服务进程没启动,客户端发起 tcp 连接,会发生什么?
先看结果:
sudo tcpdump -i lo # 监听本地 tcp 数据包
新窗口执行:
nc 127.0.0.1 8000 # 8000 端口下未启动服务
tcpdump 输出结果
10:54:05.381560 IP localhost.36614 > localhost.8000: Flags [S], seq 2559671877, win 65495, options [mss 65495,sackOK,TS val 3728484027 ecr 0,nop,wscale 7], length 0
10:54:05.381567 IP localhost.8000 > localhost.36614: Flags [R.], seq 0, ack 2559671878, win 0, length 0
一来一回两个 tcp 数据包,第一条是客户端的第一次握手请求,SYN 标志位;第二条是服务端的响应,RST 标志位说明目的端口没有进程在等待。
在知道这个结果之前,我以为服务端不会有任何响应,但实际上 tcp 握手过程是操作系统处理的,并不是我们的应用程序处理,所以操作系统会对没有进程监听的端口请求做出 RST 响应。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。