当前位置:网站首页>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字节 |
边栏推荐
- 【剑指offer】——16.数值的整数次方
- 黑马程序员Servlet
- Base64编码原理
- 9 椭圆曲线密码体制
- ESP8266-Arduino编程实例-MAX6675冷端补偿K热电偶数字转换器驱动
- Pro * C Jin Cang database migration guide (4) KingbaseES Pro * C migration guide)
- Guys, I don't understand a bit: why the documentation of oracle-cdc writes that the connector can be done exactly-o
- 中非合作论坛非洲产品电商推广季启动 外交部:推动中非合作转型升级
- HI3521D 烧录128M nand flash文件系统过程-一定要注意flash的容量
- 金仓数据库 OCCI 迁移指南(5. 程序开发示例)
猜你喜欢
随机推荐
第八章 字符输入输出和输入验证
电子设备行业智能供应链系统:打破传统供应链壁垒,提升电子设备企业管理效能
【STM32】入门(三):按键使用-GPIO端口输出控制
程序包简单解释
问下有用sql server flink-sql-connector-sqlserver-cdc-2
C# WPF设备监控软件(经典)-上篇
瑞鹄转债上市价格预测
Dynamically modify the title of the navigation bar in uniapp
单元测试是什么?怎么写?主要测试什么?
PSSecurityException
硬件设计哪些事-PCB设计那些事
Best Practices for Migration from Jincang Database from MySQL to KingbaseES (3. MySQL Database Migration Practice)
高等代数_证明_矩阵乘以自身的转置的特征值不小于0
sql问题,如何能做到先声明表的名称,例如product202201,表示2022年一月份的货物表,再在声明过的表中查找,下面的代码运行时有错误显示找不到表table_name,请问改如何进行修改
IPv4编址;A类、B类、C类、D类、E类IP地址(IP地址;网络地址和主机地址;子网掩码;网关;广播地址;)
找不到符号@SuperBuilder,你以为真的是Lombok的问题?
nVisual信息基础设施可视化管理
中非合作论坛非洲产品电商推广季启动 外交部:推动中非合作转型升级
uniapp中动态修改导航栏标题
我的“眼睛”就是尺!