IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> TCP协议与UDP协议的区别 -> 正文阅读

[网络协议]TCP协议与UDP协议的区别

一.TCP协议

1.简介

????????TCP:传输控制协议(Transmission Control Protocol)是面向连接,可靠的传输层协议,每一条 连接只能有两个端点(服务器、客户端),所以每一条 TCP 连接只能是点对点的,具有“流量控制”,“拥塞控制”,“可靠性传输”的特点。

2.报文段

? 每个TCP连接传输的数据都是一个一个的报文段,而每个报文段都有一个TCP首部

  • 传输层TCP报文段包括:TCP首部 + TCP数据部分
  • 网络层TCP报文段成为IP数据部分,加上IP首部组成IP数据报文;
  • 数据链路层,还要在IP数据报前面加上数据链路层的首部;

报文段格式如下:

TCP首部内容:

?TCP首部中前20个字节是固定内容

TCP首部的最小开销为20字节,最大开销为60字节

3.连接管理

? TCP提供面向连接的通信传输。面向连接是指在数据通信开始之前,先做好通信两端之间的准备工作。

? TCP会在数据通信之前,通过TCP首部发送一个SYN包作为建立连接的请求并等待确认应答。如果对方主机发来确认应答,则认为可以进行数据通信。如果对方主机的确认应答未能到达,则不会进行数据通信。此外,在通信结束时,会通过发送FIN包进行断开连接的处理。

建立连接时(三次握手):

? 第一次握手客户端先向服务器发送一个同步数据包(报文段)。数据包的TCP首部内容:同步SYN=1确认ACK=0序号seq=x根据TCP首部内容,表示这是一个请求建立连接的数据包,其中seq=x为所传送数据的第一个字节的序号。

? 第二次握手服务器收到客户端发送的第一个数据包后,根据SYN=1ACK=0,判断出为主动建立连接的数据包。若服务器同意连接,则服务器发送一个数据包进行回应。数据包的TCP首部内容:同步SYN=1,确认ACK=1,序号seq=y,确认号ack=x+1确认ACK=1,代表服务器同意连接;确认号ack=x+1,表示已经收到客户端发送的x个字节数据,并告诉客户端下次应从数据的第x+1个字节开始发送;序号seq=y的值由服务器指定,表示服务器发送数据时的第一个数据字节的序号;

? 第三次握手客户端收到服务器的确认之后,再给服务器发送一个数据包。数据包的TCP首部内容:同步SYN=0,确认ACK=1,序号seq=x+1,确认号ack=y+1SYN=0,表示双方已同意建立连接;确认号ack=y+1,表示收到服务器发送y字节数据,并告诉服务器下次应从数据的第y+1个字节开始发送。序号seq=x+1,表示发出的数据包就是数据的第x+1个字节;确认ACK=1,表示收到服务器的确认数据包;

断开连接时(四次挥手):

? 第一次挥手:首先客户端服务器发送连接释放的请求报文(数据包),并停止发送数据。在连接释放报文(数据包)的TCP首部中:终止FIN=1,确认ACK = 0,终止FIN=1,意味着客户端要主动释放客户端—>服务器的TCP连接;序号位seq为u,u值由客户端指定。随后等待B的确认。

? 第二次挥手:服务器收到连接释放的报文之后,给客户端发送确认报文。从客户端服务器这个方向上的连接就释放了,TCP连接处于半关闭状态。此时客户端无法发送数据给服务器,但是服务器还可以发送数据给客户端客户端仍可以接收。在服务器发送给客户端确认报文的TCP首部中:终止FIN=0确认ACK=1,序号位seq=v,确认号ack=u+1,确认ACK=1表示收到了客户端发送的数据包,同意客户端释放连接;

? 第三次挥手:服务器已经没有向客户端发送的数据了,其应用进程就通知TCP释放连接,并向客户端发送确认报文。在确认报文的TCP首部中:确认ACK=1,终止FIN=1确认ACK=1,表示服务器已经把需要发给客户端的数据发完了;终止FIN=1,表示服务器要释放服务器—>客户端的TCP连接;此后服务器不再向客户端发送数据,但能接收数据。

? 第四次挥手:客户端收到服务器的连接释放报文段后,向服务器发出确认报文。在确认报文的TCP首部中:确认ACK=1,终止FIN = 0确认ACK=1,表示收到服务器的确认报文,并同意服务器释放连接;

4.流量控制

TCP协议基于滑动窗口这种机制来实现流量控制。发送方和接收方分别维护各自的缓冲区,这个缓冲区就是窗口。发送方的窗口大小由接收方的TCP首部的窗口字段决定。

发送方将窗口内容分为已发送并确认已发送未确认未发送未超出接收方窗口范围未发送但超出接收方窗口范围。随着接收方的确认,发送方将不断在窗口内向前滑动。

接收方将窗口内容分为接受已确认未收到但可以接受。接收方读取窗口内容,并不断确认通知发送方,窗口向前滑动。接收方通过改变窗口大小,可以控制发送方的速率,从而实现流量控制。

原理

发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接收。如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向前滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向前滑动接收窗口。通过控制窗口的大小来实现流量控制

5.拥塞控制

拥塞控制时为了防止过多的数据注入到网络中,导致网络中的路由器或链路过载。

TCP协议只要通过四个算法来实现拥塞控制:慢开始拥塞避免快重传快恢复

发送方需要维护一个叫做拥塞窗口(cwnd)的状态变量,注意拥塞窗口与发送方窗口的区别:拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口

慢开始:发送最初执行慢开始,令 cwnd = 1,发送方只能发送 1 个报文段;当收到确认后,将 cwnd 加倍,因此之后发送方能够发送的报文段数量为:248 ...(指数级增长)

拥塞避免:设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd加 1,降低拥塞窗口的增长速度。如果出现了超时,则令 ssthresh = cwnd / 2,然后开始执行快恢复。(因为慢开始的增长速度很快,所以会设置门限值避免拥塞)

快重传:在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。

快恢复:执行“乘法减小”算法,把慢开始门限 ssthresh 减半,cwnd也减半。然后执行拥塞避免,每次cwnd+1

二.UDP协议

1.简介

????????UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。

2.报文段

  • 传输层UDP报文段包括:UDP首部 +?UDP数据部分
  • 网络层UDP报文段成为IP数据部分,加上IP首部组成IP数据报文;
  • 数据链路层,还要在IP数据报前面加上数据链路层的首部;

报文段格式如下:

UDP首部内容:

?其中12字节伪首部主要存放在应用层传递的ip

UDP首部固定长度为8个字节

?

三.区别

面向连接:TCP协议需要建立连接,仅支持一对一通信;UDP协议无需建立连接,支持一对一、一对多、多对一和多对多的交互通信。

可靠传输TCP协议通过确认应答、连接管理、流量控制、拥塞控制来确保可靠性传输;UDP不保证可靠性传输。

性能效率:TCP协议传输效率慢,需要较多的资源开销。UDP协议传输效率快,需要较少的资源开销。

首部格式:TCP协议的首部需要20-60个字节,UDP协议需要8个字节。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:34:57  更:2022-10-31 12:38:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 5:23:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计