0
点赞
收藏
分享

微信扫一扫

tcp 三次握手四次挥手通俗易懂

如何理解

TCP(Transmission Control Protocol): 传输控制协议

UPD(User Datagram Protocol): 用户数据协议

  • TCP 是基于链接的, UDP 是基于非链接的
  • 如果把计算机的通信比喻为人的通信, 人的通信有 2 种方式, 写信和打电话, 这里不考虑速度因素
    • UDP 就像写信, 写出去的信不不能保证对方一定收到, 及时对方收到了也不能保证信件一定完整, 即使信件完整也不能保证接受信的顺序和发送信的顺序一致, 甚至对方的收信地址可能是不存在的你也不知道
    • TCP 就像打电话, 从拨通电话, 到控制通话, 到挂断电话都能有及时的反馈

三次握手建立连接

四次回收断开连接 FIN

三次握手

image-20220206200224755

  • A:发送 syn 包
  • B:返回 syn + ack
  • A: 发送 ack

为什么要 3 次握手

如果是 2 次握手的话客户端发送 syn1 阻塞,

客户端重新发送 syn2 成功, 服务端返回 syn2 + ack 建立连接

客户端发送的 syn1 阻塞结束, 服务端收到 syn1 返回 syn1 + ack

服务端以为建立了 2 个连接 , 客户端只建立了一个连接, 造成了状态的不一致

通话控制

  • 丢包问题
  • 乱序问题

image-20220206200707669

  • 发送缓冲区
  • 发送报文: 序列号 + 长度 + 数据内容
  • 回复确认:的 ack 就是序列号 + 长度 = 下一个包的起始位置
  • 切割发送: 根据序列号和长度重组数据
  • 丢失重发: 接收端序列号丢失就很容易发现, 重新发送即可

hello

发送端: 发送数据 0 | 2 | he , 2 | 2 | ll , 4|1|o

接收端: 回复 ack 0 | 2

  • 接收端通过 ack 回复接收,
  • 发送端通过回复 ack 重发数据

四次挥手

image-20220207145702701

A: 发送 fin 包

B: 回答 ack 包

B: 回答 fin 包

A: 回答 ack 包

A: 超时等待保证 B 收到最后的 ack 包,因为 B 没收到会重新发送 fin 包刷新超时时间

超时等待

因为没有保证 B 最后一定能收到 A 发送的 ack 包, 如果 B 超时没有收到 B 会重新发送 fin 包, A 刷新超时时间并且重新发送最后的 ack 包.

refrence

上面的仅仅是个人总结和理解, 参考如下.

一条视频讲清楚TCP协议与UDP协议-什么是三次握手与四次挥手_哔哩哔哩_bilibili

举报

相关推荐

0 条评论