TCP、UDP协议

news/2024/5/18 16:36:55 标签: tcp/ip, udp, 网络

TCP与UDP协议的区别

TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种常用的传输层协议,它们之间有以下几点区别:

1. 连接性:
   - TCP是面向连接的协议,通过三次握手建立连接,提供可靠的数据传输,保证数据的顺序和完整性。
   - UDP是无连接的协议,不需要建立连接,不保证数据的可靠性和顺序性,适合实时性要求高的数据传输。

2. 数据传输方式:
   - TCP使用流式传输,将数据分割成小块并按顺序传输,保证数据的完整性。
   - UDP使用数据报传输,每个数据包独立传输,没有顺序要求,适合一次性传输少量数据。

3. 可靠性:
   - TCP提供可靠的数据传输,通过确认机制、重传机制、拥塞控制等方式确保数据的可靠性。
   - UDP不提供数据传输的可靠性,数据包可能丢失或乱序,需要应用层自行处理。

4. 消耗:
   - TCP的可靠性和复杂性导致的额外开销会消耗更多的网络资源,适合对数据完整性要求高的应用。
   - UDP的简单性和高效性使其消耗更少的网络资源,适合实时性要求高、数据丢失可以容忍的应用。

总的来说,TCP适用于对数据完整性和顺序性要求高的场景,如文件传输、网页访问等;而UDP适用于实时性要求高、数据量小、丢失可以容忍的场景,如音视频传输、在线游戏等。选择使用哪种协议取决于具体应用的需求。
 

TCP协议

TCP协议的三次握手
在tcp三次握手建立连接时,双方是怎么知道已经完成三次握手了的?

在TCP三次握手过程中,双方通过不同的状态来确认已经完成了三次握手。以下是双方如何知道三次握手已经完成的过程:

1. 客户端发送SYN包:客户端向服务器端发送一个SYN包,表示请求建立连接,并进入SYN_SENT状态。

2. 服务器端发送SYN-ACK包:服务器端接收到客户端发送的SYN包后,会向客户端发送一个SYN-ACK包,表示同意建立连接,并进入SYN_RECV状态。

3. 客户端发送ACK包:客户端收到服务器端发送的SYN-ACK包后,会向服务器端发送一个ACK包,表示确认建立连接,并进入ESTABLISHED状态。

在这个过程中,当服务器端收到客户端发送的ACK包后,双方就确认完成了三次握手,可以开始进行数据传输。
 

TCP是怎么知道发送的是(请求建立连接消息,还是确认连接、关闭连接等)

通过TCP协议头部中的“状态控制码”来标识


序号-sequence number:编号:TCP数挺包时大,分段(10段:1,2,3,4,10)
确认号:ackmowledge number。表示我服务器期望收到你的下一个包的序号
状态控制码(code control flag):标志位信号灯1--亮   0--灭===表示数据包的类型
ACK·acknowledge:确认位。=1,表示这个消遮是一个确认消息
RST-RESET:重置。=1,表示这个消息释放连接。TCP连接出错误主机服务器瑞,断开连接。请重新建立连接。
SYN:synchronous:同步,=1,表示这个消息是:1.一个发起连接的消息+2确认接收连接消息
FIN-Final:终止。=1,表示发送报文结束了完毕了,程放这个连接。--TCP四次挥手

四次挥手过程

 

  • 第一次挥手: Client端发起挥手请求,向Server端发送标志位是FIN报文段,设置序列号seq,此时,Client端进入`FIN_WAIT_1`状态,这表示Client端没有数据要发送给Server端了,但仍可以接收数据。
  • 第二次挥手:Server端收到了Client端发送的FIN报文段,向Client端返回一个标志位是ACK的报文段,ack设为seq加1,Client端进入`FIN_WAIT_2`状态。这个过程表示Server端告诉Client端,我确认并同意你的关闭请求。
  • 第三次挥手: Server端向Client端发送标志位是FIN的报文段,请求关闭连接,同时Client端进入`LAST_ACK`状态。
  • 第四次挥手: Client端收到Server端发送的FIN报文段,向Server端发送标志位是ACK的报文段,然后Client端进入`TIME_WAIT`状态。Server端收到Client端的ACK报文段以后,就关闭连接。此时,Client端等待2MSL的时间后依然没有收到回复,则证明Server端已正常关闭,那好,Client端也可以关闭连接了。

 

参考文章:一文彻底搞懂 TCP三次握手、四次挥手过程及原理 - 知乎 (zhihu.com)


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

相关文章

day 1 将go基础知识复习一下

本文章主要是写自己在做这个项目时候遇到的一些困难,如果都是做这个项目的(后端),可以看看 这个是项目网址 gin-vue-admin : https://github.com/flipped-aurora/gin-vue-admin 在此表示对大神奇淼的敬佩 首先,我们…

async await和promise的区别

async await和promise的区别 async/await 和 Promise 的区别主要体现在语法、错误处理、并发处理能力、代码可读性等方面。 语法差异: Promise 使用 then() 和 catch() 方法来处理异步操作的结果和错误。async/await 使用 async 和 await 关键字以更直观的方式编…

刷题DAY43 | LeetCode 1049-最后一块石头的重量 II 494-目标和 474-一和零

1049 最后一块石头的重量 II(medium) 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且…

linux系统编程 线程 p1

线程 1.线程的概念2.线程的创建/终止/取消,栈的清理2.1线程创建2.2线程终止2.3 栈的清理 1.线程的概念 线程就是一个正在运行的函数。 posix线程是一套标准,而不是实现。 openmp线程。 线程标识:pthread_t (linux环境下是整形数&…

美摄科技AI智能图像矫正解决方案

图像已经成为了企业传播信息、展示产品的重要媒介,在日常拍摄过程中,由于摄影技巧的限制和拍摄环境的复杂多变,许多企业面临着图像内容倾斜、构图效果不佳等挑战,这无疑给企业的形象展示和信息传递带来了不小的困扰。 美摄科技深…

企微知识库优缺点解析:如何让其效益最大化

企业搭建企微知识库,作为企业内部知识的集中存储和共享平台,为企业带来了很多便利。但是,任何事物都有其两面性,企微知识库也不例外。今天我们就来详细探讨搭建企微知识库的优点和缺点,如何在使用企微知识库时使其发挥…

AcWing853.有边数限制的最短路(Bellman_ford算法)

【题目链接】853. 有边数限制的最短路 - AcWing题库 【题目描述】 输入样例&#xff1a; 3 3 1 1 2 1 2 3 1 1 3 3输出样例&#xff1a; 3 【代码及详细注释】 #include<bits/stdc.h> using namespace std; const int N1e410; struct node{int a,b,w;//表示每条边的…

Error: TF_DENORMALIZED_QUATERNION: Ignoring transform forchild_frame_id

问题 运行程序出现&#xff1a; Error: TF_DENORMALIZED_QUATERNION: Ignoring transform for child_frame_id “odom” from authority “unknown_publisher” because of an invalid quaternion in the transform (0.0 0.0 0.0 0.707) 主要是四元数没有归一化 Eigen::Quatern…