本文目的
前两章节已经详细的向大家介绍过TCP和UDP,具体请看学习笔记-TCP简单理解和学习笔记-UDP简单理解。本章大致介绍TCP与UDP的区别。
![6c7667550a2ef09c3de712eb2eca0162.png](https://i-blog.csdnimg.cn/blog_migrate/96cbb86b61755f03a16e1532bbfeb74f.jpeg)
基本介绍
TCP(传输控制协议)提供的是面向连接、可靠的字节流服务。当客户端和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP(用户数据报协议)是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
![e893d7f838beb5d23f559f7efd480c73.png](https://i-blog.csdnimg.cn/blog_migrate/e505d7cb51c91585e08834a16cdac7de.jpeg)
可靠性
UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。
TCP
TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。因此,TCP协议是可靠的。
UDP
与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据包的丢失,协议本身并不能做出任何检测或提示。因此, UDP协议是不可靠的。
通信模型
TCP
TCP通信模型中,在通信开始之前,一定要通过"三次握手"建立相关连接(详见学习笔记-TCP三次握手),才能发送数据。通信结束后需要"四次挥手"断开连接(详见学习笔记-TCP四次挥手)。类似于生活中,"打电话"
UDP
UDP通信模型中,在通信开始之前,不需要建立相关的连接,只需要发送数据即可,通信结束也无需断开连接。类似于生活中,"写信"
相关协议
TCP对应的协议:
(1) FTP:定义了文件传输协议,使用21端口。
(2) Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
(3) SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
(4) POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
(5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。
UDP对应的协议:
(1) DNS:用于域名解析服务,将域名地址转换为。DNS用的是53号端口。
(2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
(3) TFTP(Trival File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。
头部格式
TCP
TCP首部复杂,有20个字节,多个字段组成。
![20bf97ca4774f96463bb3d57324179f2.png](https://i-blog.csdnimg.cn/blog_migrate/1590810bffd509e8373d29e6abe9ddd5.jpeg)
UDP
UDP首部字段很简单,只有8个字节,由四个字段组成,每个字段都是两个字节
![692717d9c92bde50ad3d6739a58e54c4.png](https://i-blog.csdnimg.cn/blog_migrate/605dd1bb2d094c03b956f058ee729afe.jpeg)
编程步骤
TCP:
TCP编程的服务器端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt(),可选 参数;
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、开启监听,用函数listen();
5、接收客户端上来的连接,用函数accept();
6、收发数据,用函数send()和recv(),或者read()和write();
7、关闭网络连接; closesocket(SocketListen);closesocket(SocketWaiter);
8、关闭监听;
TCP编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind(),可选 参数;
4、设置要连接的对方的IP地址和端口等属性;
5、连接服务器,用函数connect();
6、收发数据,用函数send()和recv(),或者read()和write();
7、关闭网络连接;
UDP:
UDP编程的服务器端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、循环接收数据,用函数recvfrom();
5、关闭网络连接;
UDP编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4、设置对方的IP地址和端口等属性;
5、发送数据,用函数sendto();
6、关闭网络连接;
简单总结
![e89c7bd1dffaeff05b12a691b1b6f382.png](https://i-blog.csdnimg.cn/blog_migrate/b514f3a8405818a32e70e091d7da390d.jpeg)
连接方面
TCP(如打电话要先拨号建立连接)。
UDP是无连接的,即发送数据之前不需要建立连接。
安全方面的区别
TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达。
UDP尽最大努力交付,即不保证可靠交付。
数据可靠性
TCP提供面向连接的、可靠的数据流传输。通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达。
UDP提供的是非面向连接的、不可靠的数据流传输。尽最大努力交付,即不保证可靠交付。
传输效率的区别
TCP传输效率相对较低。
UDP传输效率高,适用于对高速传输和实时性有较高的通信或广播通信。
连接数量
TCP连接只能是点到点、一对一的。
UDP支持一对一,一对多,多对一和多对多的交互通信。
传输单位
TCP传输单位称为TCP报文段,
UDP传输单位称为用户数据报。
资源消耗
TCP对系统资源要求较多,
UDP对系统资源要求较少。
本文的初衷为学习笔记的分享,部分图文来源于网络,如侵,联删。