TCP和UDP的原理及其区别(三次握手、四次挥手)

news/2024/5/18 13:16:59 标签: tcp/ip, udp, 网络, 网络协议

 TCP和UDP都是在传输层上工作的协议,用于在网络中传输数据。

1、TCP和UDP之间的区别

        TCP和UDP的主要区别在于它们提供的服务和特性。TCP提供可靠的、有序的、基于连接的数据传输,适用于对数据完整性和可靠性要求较高的应用(邮件、短信)。UDP提供不可靠的、无序的数据传输,适用于对实时性要求较高的应用(视频通话)。选择使用TCP还是UDP取决于应用的需求和优先级,需要权衡数据的可靠性、延迟和带宽利用率等因素。

TCP比作是打电话:必须要对方接通才能进行通话,最后进行挂断。

UDP比作写信:只管将要写的内容写入信中发出去,不管对方是否收到,内容是否被篡改等等。

2、TCP连接的工作流程:

        TCP是一种面向连接的协议,TCP通过建立一个连接,确保数据包的可靠传递和按顺序接收。它使用序列号、确认和重传等机制来保证数据的准确传输。TCP还提供流量控制、拥塞控制和错误恢复等功能,以确保数据的完整性和可靠性。缺点就是他比起UDP来说消耗的性能更多,速度更慢。

2.1建立连接:

       

  1. 第一步:客户端向服务器发送一个带有SYN(同步)标志的TCP报文段,表示请求建立连接。
  2. 第二步:服务器收到客户端的请求后,向客户端发送一个带有SYN/ACK(同步/确认)标志的TCP报文段,表示同意建立连接。
  3. 第三步:客户端收到服务器的响应后,再向服务器发送一个带有ACK(确认)标志的TCP报文段,表示连接已建立。

为什么要进行三次握手呢,而不是两次握手就建立连接呢?

        这是因为网络通信的不可靠性,假设一种情况,当客户端给服务端发送第一个SYN包,然后因为网络拥堵,没发到服务端,此时客户端又发了一个SYN包给服务端,服务端接到建立连接的请求,就给客户端发送SYN/ACK包,此时建立了连接,突然之前第一个SYN包发到了服务端,则服务端以为客户端又要建立一个连接请求,则给客户端发送SYN/ACK包,建立了第二条请求。

此时情况就是服务端以为和客户端建立了两条请求,而客户端这边认为只建立了一条请求,则服务端那边有一条连接一直接收不到数据,如果有第三次握手就不会出现这种情况了。

2.2数据传输

TCP协议通过一些机制来处理乱序问题和丢包问题,确保数据的可靠传输。

  • 序列号和确认机制:TCP在每个数据包中使用序列号来标识数据的顺序。接收方收到数据包后,会发送一个确认(ACK)消息,其中包含下一个期望接收的序列号。如果发送方收到确认消息,就知道数据已经成功传输,如果没有收到确认消息,发送方会重新发送数据。

  • 重传机制:如果发送方没有收到确认消息,或者接收方在一定时间内没有收到数据包,TCP会触发重传机制。发送方会重新发送丢失的数据包,确保数据的可靠传输。

  • 滑动窗口机制:TCP使用滑动窗口机制来控制发送方发送数据的速率。接收方会告诉发送方它的接收窗口大小,发送方根据接收窗口大小来发送数据。如果接收方的窗口大小变小,发送方会相应地减少发送的数据量,以避免数据的丢失。

  • 接收方缓冲区:接收方使用缓冲区来存储接收到的数据。如果数据包乱序到达,接收方会根据序列号将数据包重新排序,排序后如果发现某个包丢失会发送请求给发送端,请求他重发这段数据,待数据整合完毕。然后交付给应用程序。

通过这些机制,TCP可以有效地处理乱序问题和丢包问题。它确保数据的有序传输,并通过重传机制和滑动窗口机制来保证数据的可靠性。接收方的缓冲区可以处理乱序到达的数据包,确保数据按正确的顺序交付给应用程序。这些机制使得TCP成为一种可靠的传输协议。TCP是全双工的,所以客户端和服务端都可能是数据的接收方和发送方。

2.3四次挥手

  1. 第一步:客户端发送一个带有FIN(结束)标志的TCP报文段给服务器,表示客户端不再发送数据,但仍然可以接收数据。
  2. 第二步:服务器收到客户端的结束请求后,向客户端发送一个带有ACK(确认)标志的TCP报文段,确认收到了结束请求。服务器仍然可以发送数据给客户端。此时服务端处理之前未处理完的数据。
  3. 第三步:当服务端数据处理完毕,也可以关闭时,发送一个带有FIN标志的TCP报文段给客户端,表示服务器不再发送数据。
  4. 第四步:客户端收到服务器的结束请求后,向服务器发送一个带有ACK标志的TCP报文段,确认收到了服务器的结束请求。服务端马上进入了CLOSED状态,客户端等待超时时间后再进入CLOSED状态,连接成功关闭。

为什么客户端在发送ACK(最后一次挥手)后还要进行等待一段时间才正式关闭? 

        这也是因为不稳定网络通信。当客户端接收到服务端的FIN包时,会给服务端发送最后的ACK,此时这个ACK又因为某些因素没发送到服务端,服务端在等待一段时间后没有收到客户端的正式关闭连接的信息ACK包,就会再次给客户端发送FIN包。所以让客户端最后再等待超时时间,是为了看看还会不会收到这个FIN,如果再次收到,则会给服务端重发ACK包,刷新超时等待时间。

3、UDP连接的工作流程:

        UDP的工作流程是简单的。UDP是一种无连接的协议,UDP将数据分割成数据报,每个数据报都是独立的,没有建立连接的过程。发送方将数据分割成数据报并直接发送给目标地址,接收方监听指定的端口号并等待数据报的到达。UDP不提供可靠性保证,数据报可能会丢失、重复或乱序到达。UDP的优势在于它的简单性和低延迟性,适用于那些对实时性要求较高的应用。


http://www.niftyadmin.cn/n/5110348.html

相关文章

Leetcode1838. 最高频元素的频数

Every day a Leetcode 题目来源:1838. 最高频元素的频数 解法1:排序 滑动窗口 发现1:操作后的最高频元素必定可以是数组中已有的某一个元素。 发现2:优先操作距离目标值最近的(小于目标值的)元素。 …

聊聊分布式架构10——Zookeeper入门详解

目录 01ZooKeeper的ZAB协议 ZAB协议概念 ZAB协议基本模式 消息广播 崩溃恢复 选举出新的Leader服务器 数据同步 02Zookeeper的核心 ZooKeeper 的核心特点 ZooKeeper 的核心组件 选举算法概述 服务器启动时的Leader选举 服务器运行期间的Leader选举 03ZooKeeper的…

有哪些手段可以优化 CSS, 提高性能

CSS优化是Web开发中提高性能和用户体验的关键部分。下面详细解释一些CSS优化的方法,以提高性能: 合并和压缩CSS文件: 合并文件:将多个CSS文件合并成一个,以减少HTTP请求次数。这可以通过构建工具(如Webpack&#xff09…

大数据技术学习笔记(二)—— Hadoop运行环境的搭建

目录 1 模版虚拟机准备1.1 修改主机名1.2 修改hosts文件1.3 修改IP地址1.3.1 查看网络IP和网关1.3.2 修改IP地址 1.4 关闭防火墙1.5 创建普通用户1.6 创建所需目录1.7 卸载虚拟机自带的open JDK1.8 重启虚拟机 2 克隆虚拟机3 在hadoop101上安装JDK3.1 传输安装包并解压3.2 配置…

SAP-QM-动态检验规则

Dynamic Modification Rule (动态修改规则) 1、决定样本大小的方式有3种: 手动输入比例大小采样过程 物料主数据质量视图 2、采样过程的创建方式有2种 跟批量大小有关系:百分比/AQL跟批量大小没有关系:固定值 而当…

#力扣:2651. 计算列车到站时间@FDDLC

2651. 计算列车到站时间 - 力扣(LeetCode) 一、Java class Solution {public int findDelayedArrivalTime(int arrivalTime, int delayedTime) {return (arrivalTimedelayedTime)%24;} }

--JVM调优参数设置 --jvm垃圾回收器

第一章 走进JVM的世界之 了解JVM基础 文章目录 第一章 走进JVM的世界之 了解JVM基础一、JVM是什么?二、常见的JVM调优方法1.选择合适的垃圾回收器2.调整堆内存大小3.调整新生代和老年代的比例4.启用或禁用某些垃圾回收器参数5.使用线程池6.避免对象的频繁创建和销毁…

教你如何打造一款流行的服装定制小程序

随着移动互联网时代的到来,线上商务发展迅猛,服装店也开始积极探索线上销售渠道。其中,小程序成为了服装店主们的首选之一。小程序以其便捷、快速的特点,为服装店的线上经营带来了全新的机遇。接下来,我们将介绍如何通…