TCP 协议的三次握手,传输确认,四次挥手
# 一.TCP 三次握手
刚开始由客户端 1 发送给服务端 2
SYN 包,询问服务端是否能与其建立练接。服务端同意后回了
SYN+ACK 包给客户端 3,客户端 3 再回 ACK 包给服务端 4,三次握手建立,连接成功。
# 二。传输确认
1 | 个人理解认为,传输确认这一步骤很大原因是为了防止丢包,保证TCP协议的稳定可靠性。 |
发送缓冲区:0 1 2 3 4 5 6 7 8 9 10 11 12
发送报文:序列号 + 长度 + 发送缓冲区中的数据内容
回复确认:ACK = 序列号 + 长度 = 下一包的起始序列号
1 | 由三次握手可以确认客户端与服务端传输的是同一次的包,防止丢包现象的发生,同时也因为拥有数据内容,客户端也可以传输数据片段给服务端,服务端再根据数据片段重新拼装成完整的数据内容。(同时这也可以让服务端确认缺失了哪一段数据,要求客户端重新发送) |
# 三。四次挥手
ps:客户端与服务端都可以发起关闭请求
四次挥手流程:
1->2:客户端向服务端发送了 FIN 包然后进入了 3(终止等待 1 状态)
2->3:服务端回了 ACK 包给 3 后进入了 4(关闭等待状态),而 3 收到了 ACK 包以后进入了 5(终止等待 2 状态)
(此时服务端还能发送数据,客户端还能接收数据,待数据传输完成后开始下一步。)
4->5:确认传输完成后 4 会向 5 发送 FIN 包,然后进入 6(最后的确认状态)
5->6:5 收到来自 4 的 FIN 包以后会向 6 发送 ACK 包,然后进入超时等待状态
6->8:当 6 收到来自 5 的 ACK 包后会立马进入 8(也就是立马关闭)
7->9:经过超时时间后会自动关闭也就是 7->9
ps:为什么要有超时等待状态:
(一句话概括就是为了确保服务端关闭)
详:是为了确认服务端收到 ACK 包(如不等待且服务端没有收到 ACK 包,那么服务端就会停留在最后的确认状态)。等待时,如服务端未收到 ACK 包,那么就会重复 4->5,服务端重新发送 FIN 包,而客户端收到后也就会重新发送 ACK 包(超时等待时间也会被重新刷新)。
# UDP 协议(非连接)
简单封装数据包并从网卡发出,数据包间无状态上的联系
因此推出 UDP 的特征:1. 性能损耗少 2. 资源占用少 3. 稳定性弱
TCP 与 UDP 差异:
1.TCP 面向连接,UDP 面向报文
2.TCP 对系统资源要求较多,UDP 结构相对简单
3.TCP 稳定可靠,UDP 传输数据快
TCP 用于传输文件,发送邮件,浏览网页等
(用于对传输质量要求较高的地方)
UDP 用于域名查询,语音通话,视频直播等
还可以用于隧道网络:VPN,VXLAN
(用于对速度要求高,但是对少量丢包没有太大要求的场景)