人类进步的阶梯
算法和数据结构
滑动窗口go模板
nSum问题解决模板
【链表问题】
21. 合并两个有序链表
23. 合并 K 个升序链表
19. 删除链表的倒数第 N 个结点
876. 链表的中间结点
141. 环形链表
redis
tx
一些QA
【Redis】
rehash
击穿、穿透、雪崩
【计算机网络】
TCP
【Mysql】
索引
资料索引
本文档使用 MrDoc 发布
-
+
首页
一些QA
### TCP和UDP有什么区别?应用场景?三次握手四次断开的过程?TCP和保证可靠性?UDP有可靠性保证吗?四次断开如果服务器没有收到客户端的确认包,会一直等待吗?等多久? TCP和UDP的区别: 连接性: - TCP(Transmission Control Protocol) 是面向连接的协议,需要在通信之前建立连接,并在通信结束后释放连接。 - UDP(User Datagram Protocol) 是无连接的协议,不需要建立连接即可发送数据。 可靠性: - TCP 提供可靠的数据传输,通过序列号、确认应答、超时重传等机制确保数据的完整性和正确性。 - UDP 不保证数据的可靠传输,没有序列号、确认应答和重传机制,可能会丢包、乱序或重复接收。 流控制和拥塞控制: - TCP 有流控制和拥塞控制机制,确保网络资源的合理利用和避免网络拥塞。 - UDP 没有流控制和拥塞控制机制,传输速度不受网络状况的限制。 数据传输方式: - TCP 以字节流的方式传输数据,数据被分割成若干个数据段。 - UDP 以数据报的方式传输数据,每个数据报都是一个独立的发送单位。 应用场景: - TCP 适用于要求高可靠性的数据传输场景,如HTTP/HTTPS、FTP、SMTP等。 - UDP 适用于对速度要求高而对可靠性要求不高的场景,如视频直播、在线游戏、DNS查询等。 TCP三次握手的过程: 1. 第一次握手: 客户端发送一个SYN(同步序列编号)报文段给服务器,表示客户端希望建立连接。 2. 第二次握手: 服务器收到SYN报文段后,回复一个SYN-ACK(同步序列编号和确认编号)报文段,表示同意建立连接并确认客户端的SYN。 3. 第三次握手: 客户端收到SYN-ACK报文段后,再发送一个ACK(确认编号)报文段给服务器,表示确认连接。服务器收到该报文段后,连接建立完成。 TCP四次断开的过程: 1. 第一次断开: 客户端发送一个FIN(结束)报文段给服务器,表示客户端要断开连接。 2. 第二次断开: 服务器收到FIN报文段后,发送一个ACK报文段给客户端,表示确认收到客户端的断开请求。 3. 第三次断开: 服务器发送一个FIN报文段给客户端,表示服务器也要断开连接。 4. 第四次断开: 客户端收到FIN报文段后,发送一个ACK报文段给服务器,表示确认断开。服务器收到该报文段后,连接断开完成。 TCP如何保证可靠性: - 序列号和确认应答: 每个数据段都有一个唯一的序列号,接收方收到数据段后会发送确认应答(ACK)报文段。 - 超时重传: 发送方在发送数据段后会启动定时器,如果在规定时间内没有收到确认应答,会重新发送数据段。 - 流控制: 通过滑动窗口机制,发送方可以根据接收方的接收能力控制数据的发送速度。 - 拥塞控制: 通过拥塞避免和控制算法(如慢启动、拥塞避免、快重传、快恢复等),避免网络拥塞。 UDP有可靠性保证吗? - UDP 本身不提供可靠性保证,没有序列号、确认应答和重传机制。应用层可以通过自定义协议来确保数据的可靠传输。 四次断开中,如果服务器没有收到客户端的确认包,服务器会一直等待吗?等多久? - 如果服务器没有收到客户端的确认包(第四次断开中的ACK报文段),服务器会重新发送FIN报文段,继续等待客户端的ACK。服务器会设置一个重传定时器,如果在一定时间内(通常是几秒到几十秒之间)没有收到ACK,服务器会重新发送FIN。这个重传过程会进行几次(通常是5次左右),如果仍然没有收到ACK,服务器会认为客户端已经断开连接并释放资源。
adminadmin
2024年6月4日 00:44
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码