tcpdump抓包分析详解_65、socket处理多个请求场景分析

本文通过实例分析了TCP Socket在处理多个客户端请求时的流程,揭示了socket在接受连接和读取数据时可能出现的阻塞现象。在输入数据前,服务端因socket_read阻塞而无法处理其他请求;输入数据后,服务端完成数据交换并释放连接,以处理新的客户端连接。socket在接受数据时存在缓冲区,用于临时存放客户端发送的数据,但在处理多个请求时只能串行进行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇,通过抓包,我们总结了两者在效率和可靠性上的差别.这一篇,我们将认识socket如何处理多个请求

1、代码

这里使用之前tcp服务的代码

1.1、运行流程

  • 启动tcp服务
  • 使用tcpdump进行抓包
18d7d2f2e338c46e199e91feef1aa854.png
  • 使用telnet连接tcp服务
ee206359d17010ba6d5576f4ff674f88.png
  • 执行tcp客户端脚本
ecc4aefa3f7154ca7d5aaa257cb6dccf.png

1.2、查看目前的执行结果

  • tcp服务端
e18661260bfc55738c2924bce90b5351.png
  • tcpdump抓包结果1
71538a59c9a61394cf630dc68600c5e1.png

1.3、分析抓包结果1

  • 序号1-4的数据包,是telnet客户端与tcp服务端建立三次握手
  • 序号5-8的数据包,是tcp客户端与tcp服务端建立的三次握手
  • 序号9-10数据包,则是tcp客户端往服务端发送数据"hello world"

1.4、telnet的终端输入数据“iamasb”

  • telnet终端输出结果
e1a2a64fe921780447e4e803669aa257.png
  • tcp客户端输出结果
e86e503fa2fb8458372267897e378fd2.png
  • tcp服务端输出结果
393025c43eef5d0f0b247d962b7d3da4.png
  • tcpdump抓包结果2
570019ee33af013b3e46bad2197c63ff.png

1.5、分析抓包结果2

  • 序号11-12,则是telnet客户端往服务端发送数据"iamasb"
  • 序号13-14,则是服务端往telnet客户端发送数据"iamasb"
  • 序号15、16、23、24,则是服务端与telnet客户端释放连接的四次握手
  • 序号17、19,则是服务端往tcp客户端发送数据"hello world"
  • 序号18、20、21、22则是服务端与tcp客户端释放连接的四次握手

备注: 由于是在shell终端发送数据需要按回车,因此telnet客户端在发送数据时,追加了两个字符

2、案例分析

整个案例,以telnet客户端是否输入数据为分界点

2.1、输入数据前

从抓包结果1的截图中,可以看出:

  • telnet和tcp客户端都与服务端通过三次握手,建立好连接
  • tcp客户端往服务端发送数据,而服务端也接收完毕。从这个环节可以看出socket存在"缓冲区",来临时存放客户端发来的数据。但无法马上进行处理,是因为"服务端"处于阻塞状态。

从输入数据前,服务端的输出结果来看:

  • 服务端在socket_read调用处,阻塞。等待telnet客户端发送数据,导致无法处理其它请求

2.2、输入数据后

服务端在socket_read调用处,获取数据"iamasb"后,向telnet客户端发送数据,并释放此socket连接。开始下一个循环。

服务端调用socket_accept获取新的socket连接,再次执行read/write操作,并释放此socket连接。

3、总结

  • socket_accept和socket_read在调用时会进行阻塞
  • 再处理多个客户端请求时,只能串行处理。即一个接着一个进行
  • 在socket_accept获取新的socket连接前,此socket连接已在内核中建立好
  • socket存在缓存区
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值