TCP和UDP总结

1.TCP和UDP的区别:

(1)TCP是面向连接的;UDP是面向无连接的,即发送数据之前不需要建立连接。

(2)TCP提供可靠数据服务,即传送的数据无差错,不丢失,且按照顺序到达,UDP只是尽最大努力交付。

(3)TCP通过校验和,重传控制,序号标识,滑动窗口,确认应答实现,可靠传输。

(4)UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。

(5)TCP对系统资源要求较多,UDP则相对较少。

(6)UDP要求源主机提供恒定的数据发送速率;在网络出现拥塞时,允许丢失部分数据;网络延迟要尽可能地小。UDP地可靠性由使用UDP地应用程序来解决。

(7)由于UDP提供无连接服务,所以每个UDP用户数据报的传输路径都是独立的。即使源端口号和目的端口号相同,它们在网络上的传输路径也可能使不同的,取决于网络层为每个数据报所进行的路径选择。

(8)采用UDP的应用进程需要在应用层提供必要的差错控制机制(用户数据报传输队列机制是实现同一台主机并发运行的多个UDP进程的工作原理,请求客户机通过ICMP向服务器端发送“端口不可到达的出错报文”。如果输出队列发生溢出时,操作系统就会要求客户进程降低用户数据报的发送速率)。

2.TCP和UDP的优缺点:

2.1 TCP和UDP的优点:

2.1.1 TCP的优点:

 TCP具有可靠性和稳定性。 可靠性体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。

2.1.2 UDP的优点:

UDP只在IP的数据报服务之上增加了端口的功能(有了端口,运输层就能进行复用和分用)和差错检测功能。

(1)发送数据之前不需要建立过程,减少了开销和发送数据之前的时延。

(2)UDP不使用拥塞控制,也不保证可靠交付,因此主机不需要维持具有许多参数的、复杂的连接状态表。

(3)UDP用户数据报只有8B的首部开销。

(4)由于UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低,这对某些实时应用是很重要的。

2.2 TCP和UDP的缺点:

2.2.1 TCP的缺点:

TCP的缺点则是慢和效率低。占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOSDDOSCC等攻击。

2.2.2 UDP的缺点:

UDP不提供数据接收的确认、排序和流量控制等功能,因此数据传输可能会出现丢失、乱序和重复现象,从这一点看,UDP与网络层的IP类似,所以被称为用户数据报协议。

3.TCP和UDP数据段的首部格式:

TCP报文段首部的最小长度是20个字节,而UDP首部字段只有8个字节。

3.1 TCP报文段的首部:

图片出处:https://www.cnblogs.com/winner-0715/p/5032738.html

3.2 UDP数据报的首部:

图片出处:https://www.cnblogs.com/winner-0715/p/5032738.html

4.TCP和UDP的编程步骤:

4.1 TCP的编程步骤:

4.1.1 TCP服务器端:

(1)创建一个socket,用函数socket()。

(2)设置socket属性,用函数setsockopt(); * 可选。

(3)绑定IP地址、端口等信息到socket上,用函数bind()。

(4)开启监听,用函数listen()。

(5)接收客户端上来的连接,用函数accept()。

(6)收发数据,用函数send()和recv(),或者read()和write()。

(7)关闭网络连接。

(8)关闭监听。


4.1.2 TCP客户端:

(1)创建一个socket,用函数socket()。

(2)设置socket属性,用函数setsockopt(); * 可选。

(3)绑定IP地址、端口等信息到socket上,用函数bind()。

(4)设置要连接的对方的IP地址和端口等属性。

(5)连接服务器,用函数connect()。

(6)收发数据,用函数send()和recv(),或者read()和write()。

(7)关闭网络连接。

4.2 UDP的编程步骤:

4.2.1 UDP服务器端:

(1)创建一个socket,用函数socket()。

(2)设置socket属性,用函数setsockopt(); * 可选。

(3)绑定IP地址、端口等信息到socket上,用函数bind()。

(4)循环接收数据,用函数recvfrom()。

(5)关闭网络连接。

4.2.2 UDP客户端:

(1)创建一个socket,用函数socket()。

(2)设置socket属性,用函数setsockopt(); * 可选。

(3)绑定IP地址、端口等信息到socket上,用函数bind()。

(4)设置对方的IP地址和端口等属性。

(5)发送数据,用函数sendto()。

(6)关闭网络连接。

5.TCP和UDP的应用场景:

5.1 TCP的应用场景:

当对网络通信质量有要求时,比如:整个数据要准确无误的传递给对方,这往往对于一些要求可靠的应用,比如HTTP,HTTPS,FTP等传输文件的协议,POP,SMTP等邮件的传输协议。常见使用TCP协议的应用:QQ文件传输。
 

5.2 UDP的应用场景:

UDP以其简单、传输快的优势,在许多场景下取代了TCP,如实时游戏。

(1)网速的提高给UDP的稳定性提供了可靠的网络保障,丢包率低。如果使用应用层重传,能够确定传输的可靠性。TCP为了实现网络通信的可靠性,使用了复杂的拥塞控制算法,握手过程较复杂,由于TCP内置的系统协议栈中,极难对其进行改进(采用TCP,一旦发生丢包,TCP层将后续的包缓存起来,等前面的包重传并接收到后再继续发送,延时会越来越大,基于UDP对实时性要求较为严格的前提下,采用自定义重传机制,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成影响)。

(2)UDP非常适用于通信子网的传输质量或可靠性较高的网络环境,如局域网。另外,对于那些一次性传输数据量较小同时对数据传输可靠性要求又不高的网络应用,例如,SNMPDNSTFTP数据的传输,也可以采用UDP。

猜你喜欢

转载自blog.csdn.net/zryoo_k/article/details/88376364