当前位置:网站首页>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字节 |

边栏推荐
- Methods annotated with ‘@Async‘ must be overridable
- 基于WPF重复造轮子,写一款数据库文档管理工具(一)
- 9 椭圆曲线密码体制
- IPv4编址;A类、B类、C类、D类、E类IP地址(IP地址;网络地址和主机地址;子网掩码;网关;广播地址;)
- 对话框管理器第四章:对话框消息循环
- ClickHouse卸载、重安装
- 浅谈用KUSTO查询语言(KQL)在Azure Synapse Analytics(Azure SQL DW)审计某DB账号的操作记录
- IDEA如何创建同级工程
- ESP8266-Arduino编程实例-MAX6675冷端补偿K热电偶数字转换器驱动
- List<Object>转List<User>:
猜你喜欢

【无标题】2022-7-24

PSSecurityException

Pro * C Jin Cang database migration guide (4) KingbaseES Pro * C migration guide)

利用索引机制进行绕过

【原创】Auto.js get和post 案例

IPv4编址;A类、B类、C类、D类、E类IP地址(IP地址;网络地址和主机地址;子网掩码;网关;广播地址;)

第3周 用1层隐藏层的神经网络分类二维数据

Chapter 8 Character Input Output and Input Validation

金仓数据库 Pro*C 迁移指南( 4. KingbaseES 的 Pro*C 迁移指南)

ROS2自学笔记:机器视觉基础
随机推荐
(2022牛客多校五)G-KFC Crazy Thursday(二分+哈希)
数据库性能系列之索引(中)
Summary of some questions about the grain mall
log4j设置日志的时区
智能健身动作识别:PP-TinyPose打造AI虚拟健身教练!
这个困扰程序员50年的问题,终于要被解决了?
中非合作论坛非洲产品电商推广季启动 外交部:推动中非合作转型升级
Jincang Database Pro*C Migration Guide ( 5. Program Development Example)
中原银行实时风控体系建设实践
基于 jetpack compose,使用MVI架构+自定义布局实现的康威生命游戏
iScroll系列之下拉刷新 + 上拉加载更多
如何画一张架构图(内含知识图谱)
【剑指offer】——股票的最大利润
信号和槽的绑定
ClickHouse—高级
Pro * C Jin Cang database migration guide (4) KingbaseES Pro * C migration guide)
Auto.js Pro 计算脚本运行时间
SMP 需要考虑的事情
黑马程序员Servlet
Auto.js Pro 编写第一个脚本hello world