当前位置:网站首页>TCP 和UDP 的详细介绍
TCP 和UDP 的详细介绍
2022-08-03 03:33:00 【伊木子曦】
TCP 协议
TCP:传输控制协议,是一种面向连接的可靠传输协议。TCP为应用程序提供一种面向连接的、可靠的服务。(面向连接:传输前进行沟通和协商,确保互相可以/愿意发送数据)
TCP三次握手能够保证面向连接,面向连接是可靠的,并不能保证TCP传输是可靠的,三次握手是TCP传输之前的一个过程,
一个TCP报文段由数据载荷和首部两部分组成,首部如下图,最小长度为20字节,最大长度为60字节,这是因为TCP要实现可靠传输,流量控制,拥塞控制等服务
三次握手:C要向S发送数据(C/S模型,客户端先进行三次握手;如果两设备是公平的情况下是随机发送,详见下图)
三次握手的过程:
1)第一次握手:建立连接时,客户端发送SYN(SEQ=X)包到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号
2)第二次握手:服务器收到SYN包,必须确认客户的SYN(ACK=X+1),同时自己也发送一个SYN包(SEQ=Y),即SYN+ACK包,此时服务器进入SYN_RECV状态
3)第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=Y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手
三次握手的确认:
第一个数据包要靠第二个数据包进行显性确认,第二个数据包要靠第三个数据包进行显性确认,第三个数据包自己进行隐性确认(不需要回复,但完成确认)
第三个数据包隐性确认的过程:
eg:服务器在收到第三个数据包前会有猜想,如收到第三个数据包和自己及的猜想一样,服务器不回复,如果服务器收到的数据包和自己的猜想不一样甚至没有收到,服务器就重新传输第二个数据包,以至于客户端知道自己发送的第三个数据包失败(服务器怎么知道第三个数据包的内容?第三个数据包的内容来自刚服务器发送的第二个数据包的内容或者是内容+1,即ACK确认下一个想要对方的数据包)
四次断开的过程:
1)客户端C发送一个FIN,用来关闭客户端到服务器S的数据传送
2)服务器S收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号
3)服务器S关闭与客户端C的连接,发送一个FIN给客户端C
4)客户端C发回ACK报文确认,并将确认序号设置为收到序号加1
UDP协议
UDP:用户数据报协议,是一种非面向连接的不可靠传输协议。非面向连接:发送数据,收不收无所谓,eg:IPTV,网络电视,接收就看,不接收就不看,但必须发送。如何保证面向连接:TCP三次握手
UDP 为应用程序提供面向无连接的服务(仅仅提供端口号)。传输数据之前源端和目的端不需要建立连接,不需要维护连接状态,转发状态等,因此服务器可同时向多个客户端传输相同的消息,UDP适用于对传输效率要求高的运用。
一个UDP数据报由首部和数据载荷两部分组成,首部仅有4个字段,每个字段长度为2字节,由于UDP不提供可靠传输服务,仅仅在网际层的基础上增加了用于区分应用进程的端口
总结
描述TCP和UDP的区别?
TCP:传输控制协议,是一种面向连接的可靠的传输协议
UDP:用户数据报协议,是一种非面向连接的不可靠的传输协议
UDP | TCP | |
---|---|---|
是否需要建立连接 | 否 | 是 |
通信方式 | 一对一,一对多,多对一,多对多交互通信 | 每条TCP连接只能有两个端点,只能是一对一通信 |
对报文的处理 | 对应用层交付的报文直接打包 | 面向字节流 |
传输是否可靠 | 尽最大努力交付,也就是不可靠,不使用流量控制和拥塞控制 | 可靠传输,使用流量控制和拥塞控制 |
首部对比 | 仅8字节 | 最小20字节,最大60字节 |
边栏推荐
- 金仓数据库 Pro*C 迁移指南( 4. KingbaseES 的 Pro*C 迁移指南)
- Domino服务器SSL证书安装指南
- PyTorch installation - error when building a virtual environment in conda before installing PyTorch
- Dynamically modify the title of the navigation bar in uniapp
- 利用索引机制进行绕过
- synchronized原理
- 高等代数_笔记_配方法标准化二次型
- IPv4编址;A类、B类、C类、D类、E类IP地址(IP地址;网络地址和主机地址;子网掩码;网关;广播地址;)
- Scala基础【异常、隐式转换、泛型】
- DMA 的工作方式
猜你喜欢
随机推荐
我的“眼睛”就是尺!
智能健身动作识别:PP-TinyPose打造AI虚拟健身教练!
钢铁电商行业方案:钢铁工业产品全生命周期管理解决方案
SeleniumWebDriver扩展插件开发
积分商城可设置的四种兑换商品类型
ESP8266-Arduino编程实例-MCP3008-ADC转换器驱动
数字3d虚拟交互展厅顺应时代发展需求和趋势
【动态规划--01背包】HJ16 购物单
SMP 需要考虑的事情
基于 jetpack compose,使用MVI架构+自定义布局实现的康威生命游戏
Have bosses know date field flinksql is synchronized to the use of the null on how to deal with
记录学习--Navicat使用自定义数据库列表
js Fetch返回数据res.json()报错问题
ClickHouse - Getting Started
金仓数据库 Pro*C 迁移指南( 4. KingbaseES 的 Pro*C 迁移指南)
【基础数学--埃氏筛】204. 计数质数
基于flowable的upp(统一流程平台)运行性能优化(2)
synchronized原理
JWT入门学习
Ask next useful SQL server flink - SQL - connector - essentially a CDC - 2