TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
以下是TCP的主要特点:
1.面向连接
TCP在传输数据之前必须先建立连接,数据传送结束后要释放连接。由于TCP是面向连接的,所以它能提供可靠的、点对点的服务。
2.可靠性
TCP通过校验和、序列号、确认应答、重传控制、连接管理以及流量控制等机制实现可靠性传输。TCP对发送的每一个字节都有一个序列号,在接收端会按照序列号来重组数据。同时,接收端会发送一个确认应答给发送端,表示已经收到数据。如果发送端在指定时间内没有收到确认应答,那么它会重发数据。
3.流量控制
TCP使用滑动窗口协议来实现流量控制,以避免发送方发送速率过快导致接收方来不及处理。TCP每发送一个数据,就进行一次确认应答,但是这样效率低,使用滑动窗口技术,就可以指定窗口大小,窗口大小以内的数据无序等待确认应答,直接就可以发送。
滑动窗口底层实现
通过两个指针维护,分别指向#2和#3的首地址,进行维护:
指针指向首地址,在进行数据累计应答时,实时更新首地址位置,如下图2,当累计应答两个字节后,指针就向后移动两个字节
4.拥塞控制
TCP通过慢开始、拥塞避免、快重传和快恢复等算法来防止网络拥塞。
工作量(网络需求) > 工作极限时,产生拥塞。会产生数据包时延、丢失等。紧接着会重传数据,恶性循环
慢开始,在一开始先测试网络的拥塞程度,拥塞窗口(发送数据量最大值)先设为1。若成功发送,则下次翻倍。直到超过“慢开始门限”为止;超过后进入拥塞控制阶段,每经过一个往返时延RTT(表示从发送端发送数据开始,到发送端收到来自接收端的确认,总共经历的时延。),拥塞窗口增加1;发生超时重传后,触发快重传,拥塞窗口减半,从慢开始门限+3的位置继续增大拥塞窗口。
5.全双工通信
TCP允许数据在两个方向上同时传输,即全双工通信。
6.面向字节流
TCP将应用层发下来的报文看成字节流,不区分应用层发下来的数据包。TCP把数据包封装成TCP报文段并添加TCP头部,然后交付给IP层发送。
UDP(User Datagram Protocol,用户数据报协议)是传输层的一个无连接协议,它提供面向事务的简单不可靠信息传输服务。UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。在TCP/IP协议模型中,UDP为网络层以上和应用层以下提供了一个简单的接口,接收来自应用程序的数据报并处理来自IP层的数据报,然后把它们发送到网络上。
7.Nagle算法
Nagle算法是一种用于优化TCP/IP网络传输的算法,其主要作用和原理如下
-
Nagle算法的主要目的是为了减少网络中的小分组数量,因为在广域网中,小分组会造成网络拥塞。每个小分组都需要占据网络带宽和路由器缓存空间,并且由于TCP要求每个小分组发送之前都需要进行确认,分组数量过多会导致消息数量增多,从而导致网络延迟和吞吐量下降。
-
Nagle算法的核心思想是在一个TCP连接上,最多只能有一个未被确认的小数据包(小于MSS,即最大报文段大小)在网络中。如果有数据要发送,且可用窗口大小大于等于MSS,或者数据包含FIN标志(表示连接即将关闭),则立即发送数据。否则,如果有未确认的数据,且新数据可以与未确认的数据合并,则将新数据添加到未确认数据的末尾。如果新数据不能与未确认数据合并,且未确认数据已收到ACK,那么发送未确认数据和新数据。如果新数据不能与未确认数据合并,且未确认数据未收到ACK,那么等待ACK到达后再发送新数据。
以下是UDP的主要特点:
1.无连接
UDP在发送数据之前不需要建立连接,发送方可以随时发送数据,接收方也可以随时接收数据。这种无连接的特性使得UDP的开销较小,数据传输效率高。
2.不可靠
UDP不保证数据包的顺序、错误或重传。如果数据包在传输过程中丢失或损坏,UDP不会采取任何补救措施。因此,UDP通常用于对实时性要求较高、但对数据可靠性要求不高的应用,如视频流、音频流、实时游戏等。
3.头部开销小
UDP的头部开销比TCP小,只包含必要的字段,如源端口、目的端口、长度和校验和。这有助于减少网络传输的延迟和带宽消耗。
4.支持一对多、多对一和多对多通信
UDP支持广播和组播功能。可以实现一对多、多对一、多对多的通信模式。
5.传输效率高
由于UDP没有建立连接、确认数据、处理重传等步骤,因此其传输效率相对较高。但是这也意味着UDP在传输过程中可能会丢失数据。
6.适合传输少量数据
对于需要传输大量数据的场景,TCP通常更为合适。然后,对于需要快速响应和实时应用或需要传输少量数据的场景,UDP可能是一个更好的选择。
总的来说,UDP是一种简单、高效的传输层协议,适用于对实时性要求较高、但对数据可靠性要求不高的应用场景。然后,对于需要可靠传输的场景,还是建议使用TCP协议。
TCP和UDP的主要区别
1.连接性
TCP是面向连接的协议,它在传输数据之前需要建立连接(三次握手),并在数据传输完成后关闭连接(四次挥手)。这种连接是全双工的,即数据可以在两个方向上同时传输。
UDP则是无连接的协议,它不需要建立或关闭连接,发送方可以直接发送数据报,接收方也可以随时接收数据报。
2.可靠性
TCP提供可靠的传输服务。它使用确认和重传机制来确保数据正确、完整、有序地到达目的地。TCP还通过流量控制和拥塞控制机制来防止网络过载。
UDP则提供不可靠的传输服务。它不检查数据包的顺序、错误或重传。如果数据包在传输过程中丢失或损坏,UDP不会采取任何补救措施。因此,UDP通常用于对实时性要求较高、但对数据可靠性要求不高的应用(如视频流、音频流、实时游戏等)
3.头部开销
TCP的头部开销相对较大,包含更多的控制信息,如序列号、确认号、窗口大小等。
UDP的头部开销较小,只包含必要的字段,如源端口、目的端口、长度和校验和。
4.传输效率
由于TCP需要建立连接、确认数据、处理重传等,所以其传输效率相对较低。但这也使得TCP在需要可靠传输的场景下表现更好。
UDP则不需要这些额外的步骤,因为其传输效率更高。但这也意味着UDP在传输过程中可能会丢失数据。
5.应用场景
TCP通常用于需要可靠传输的场景,如文件存储、电子邮件、远程登录等。
UDP则常用于对实时性要求较高、但对数据可靠性要求不高的场景,如视频流、音频流、DNS查询、VoIP(网络电话)等。
6.流量控制和拥塞控制
TCP具有流量控制和拥塞控制机制,可以根据网络状况动态调整发送速率,以防止网络拥塞和丢包。
UDP则没有这些机制,它只负责将数据报从源端发送到目的端,则不关心网络状况和数据传输质量。
7.一对一、一对多、多对一和多对多通信
TCP通常用于一对一的通信,即一个TCP连接只能有一个发送方和一个接收方。
UDP则支持一对多、多对一和多对多的通信模式,可以实现广播和组播功能。