从前面的两个案例,我们了解到了如何通过原生socket函数分别创建tcp和udp服务,以及通过相应的客户端进行连接测试。在本文中,我们将继续深入地去了解tcp和udp的差别,和思考它们两者如何应该多个客户端请求
1、抓包分析
这里采用tcpdump抓包工具,来分析通信中,数据包的流向。
2、分析tcp
2.1、执行之前tcp服务的案例代码
- 启动tcp服务
- 通过tcpdump,监控tcp服务的端口1234
- 执行tcp客户端代码脚本
2.2、执行结果
2.3、tcpdump抓包结果
2.4、分析抓包结果
符号>代表数据流向。如 a>b,表示a向b发送数据
- 序号1-4,这四个数据包,是建立socket连接的三次握手
- 序号5-6,这两个数据包,是客户端往tcp服务端发送数据"hello world"
- 序号7-8,这两个数据包,是tcp服务端往客户端发送数据"hello world"
- 序号9-12,这四个数据包,是释放socket连接的四次握手
2.5、tcp如何保证可靠性
前面的文章提到,tcp是提供端到端的,可靠性的传输层协议。这上面的抓包截图中,我们可以看到,通信双方通过多发一个"确认"数据包,来保证数据接收的可靠性.
3、分析udp
3.1、执行之前udp服务的案例代码
- 启动udp服务
- 通过tcpdump,监控udp服务的端口1235
- 执行udp客户端代码脚本
3.2、执行结果
3.3、tcpdump抓包结果
3.4、分析抓包结果
- 序号1是客户端往udp服务端发送数据"Ping !"
- 序号2是udp服务端往客户端发送数据"iamasb"
4、总结
4.1、开启服务
tcp和udp都是需要服务提供者,先绑定本地ip:port
4.2、传输可靠性
tcp要优于udp.这是通信双方在传输真正的数据之前,需要在错综复杂的网络环境中,建立起一条虚拟的"可靠"连接。其次,在发送数据环节,发送者需要收到接收者的"确认"数据包后,才能继续发送,否则会进行重发
4.3、传输效率
udp要优于tcp.这是udp在传输过程中,不需要维护连接.直接发送