在对TCP UDP协议进行学习的时候。我们总是将两者相互比较着来学习。这是因为在某些方面,这两个协议总是让我们相互混淆。为了能够明确它们各自的定义,所以我们一定要将之区分开来。那么这两者有什么本质上的区别呢?让我们先来看一下它们各自的定义是如何的。
TCP:Transmission Control Protocol,即传输控制协议。
UDP:User Data Protocol,即用户数据报协议。
其中TCP是面向连接的传输协议,即传输数据前必须先建立连接。UDP是面向非连接的传输协议,即传输数据前不需要建立连接。
两者的特点对比如下:
TCP协议:面向连接、可靠性高、大量数据、传输慢
UDP协议:面向非连接、可靠性低、少量数据、传输快
我们常用的QQ即采用的UDP协议,即发送数据包时不需要与对方建立连接。而常用的ping命令则属于ICMP协议,即Internet Control Message Protocol(Internet控制报文协议)。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
TCP UDP协议都是IP层的传输协议,是IP与上层之间的处理接口。TCP UDP协议端口号被设计来区分运行在单个设备上的多重应用程序的IP地址。
由于同一台机器上可能会运行多个网络应用程序,所以计算机需要确保目标计算机上接收源主机数据包的软件应用程序的正确性,以及响应能够被发送到源主机的正确应用程序上。该过程正是通过使用TCP 或 UDP 端口号来实现的。在 TCP UDP协议头部分,有“源端口”和“目标端口”段,主要用于显示发送和接收过程中的身份识别信息。IP 地址和端口号合在一起被称为“套接字”。
虽然基于TCP/IP连接协议(流套接字)的服务是设计客户机/服务器应用程序时的主流标准,但有些服务也是可以通过无连接协议(数据报套接字)提供的。先介绍一下TCP socket 与UDP socket在传送数据时的特性:Stream (TCP) Socket提供双向、可靠、有次序、不重复的资料传送。
Datagram(UDP) Socket虽然提供双向的通信,但没有可靠、有次序、不重复的保证,所以UDP传送数据可能会收到无次序、重复的资料,甚至资料在传输过程中出现遗漏。由于UDP Socket 在传送资料时,并不保证资料能完整地送达对方,所以绝大多数应用程序都是采用TCP处理Socket,以保证资料的正确性。一般情况下TCP Socket 的数据发送和接收是调用send() 及recv() 这两个函数来达成,而 UDP Socket则是用sendto() 及recvfrom() 这两个函数,这两个函数调用成功发挥发送或接收的资料的长度,否则返回SOCKET_ERROR。