本文部分内容参考自:https://blog.csdn.net/li_ning_/article/details/52117463
TCP与UDP的区别概括
- TCP面向连接,即客户端需要通过三次握手才能和服务端建立起连接,在这个连接的基础上才可以进行数据传输;而UDP是无连接的,发送数据之前不需要建立连接。因此,TCP需要在端系统中维护连接状态,而UDP则不需要维护连接状态
- TCP提供可靠的服务,即通过TCP连接传输的数据能确保无差错、不丢失、无重复且按序到达;UDP不提供可靠的传输服务,传输过程有可能出现丢包,同时也不保证数据报的到达顺序
- TCP面向字节流,实际上TCP把数据看作是一连串无结构的字节流;UDP则是面向报文传输
- TCP有拥塞控制机制,当源主机和目的主机间的一条或者多条链路变得极度拥塞时来遏制运输层TCP发送方,而UDP没有拥塞控制机制,相比之下,在出现拥塞的情况下,UDP不会降低源主机发送数据的速率,更适合用于支撑部分实时应用如IP电话、实时视频会议等
- TCP连接是点对点的,而UDP支持一对一、一对多、多对一和多对多的交互通信
- 从报文段结构上考虑,每个TCP报文段都有20字节的首部开销,而UDP仅有8字节的开销
报文结构对比
流行的Internet应用及其使用的运输层协议
应用 | 应用层协议 | 运输层协议 |
电子邮件 | SMTP | TCP |
远程终端访问 | Telnet | TCP |
Web | HTTP | TCP |
文件传输 | FTP | TCP |
网络管理 | SNMP | UDP |
路由选择协议 | RIP | UDP |
主机名转换 | DNS | UDP |
关于Socket编程的对比
TCP服务端的一般步骤:
- socket():创建一个socket
- setsockopt():设置socket属性,可选
- bind():绑定IP地址、端口等信息到socket上
- listen():开启监听
- accept():接收客户端上来的连接
- 收发数据,用函数send()和recv(),或者read()和write()
- 关闭网络连接
- 关闭监听
TCP客户端的一般步骤:
- socket():创建一个socket
- setsockopt():设置socket属性,可选
- bind():绑定IP地址、端口等信息到socket上
- 设置要连接的对方的IP地址和端口等属性
- connect():连接服务器
- 收发数据,用函数send()和recv(),或者read()和write()
- 关闭网络连接
TCP客户-服务器工作过程:
![](https://i-blog.csdnimg.cn/blog_migrate/94f0db033c3f8c05d5204c71e2ea1dbc.png)
-------------------------------------------------分割线---------------------------------------------------
UDP服务端的一般步骤:
- socket():创建一个socket
- setsockopt():设置socket属性,可选
- bind():绑定IP地址、端口等信息到socket上
- recvfrom():循环接收数据
- 关闭网络连接
UDP客户端的一般步骤:
- socket():创建一个socket
- setsockopt():设置socket属性,可选
- bind():绑定IP地址、端口等信息到socket上
- 设置要连接的对方的IP地址和端口等属性
- sendto():发送数据
- 关闭网络连接
UDP客户-服务器工作过程: