理解TCP三次握手与四次挥手相关问题

彻底理解TCP三次握手与四次挥手
  • 为什么要三次握手?
  • 为什么要四次挥手?
  • 为什么客户端释放后需要2个MSL等待?
  • 熟悉Socket连接、TCP连接的过程?

前言

1. TCP连接:面向连接的可靠传输

  • 连接靠Socket和三次握手
  • 可靠靠重传机制,滑动窗口,差错控制,流量控制

2. TCP连接大体过程

  • 建立连接
  • 数据传输
  • 连接释放

常见问题

为什么要三次握手?

  • 需要同步信息:Socker()连接四元组,同步序列号,商议窗口大小
  • 表层原因:确定收发双方功能正常
  • 深层次原因:
    • 避免历史连接初始化新的连接
    • 同步双方初始序列号【可靠性】
    • 避免资源浪费
      img

SYN攻击

  • 服务端会维护两个队列:Accept队列,SYN队列(未连接)
  • 攻击者伪装不同IP地址的SYN报文,服务端每接收到一个SYN报文,就进入SYN_RECV状态,但服务端发送的ACK+SYN无法得到主机的ACK;1.服务端会多次发送直至超时,2.会占用服务端的SYN未接收接收队列,使服务器不能正常服务

为什么要四次挥手?

  • 多的一次在服务端的FIN和ACK不一定是同步的:服务端会先确认收到客户端关闭的请求并发送ACK,但会先处理完自己手上的事再来处理是否同意,发送FIN
  • TCP四次挥手
    在这里插入图片描述

为什么客户端释放后需要2个MSL等待?

    1. MSL是报文的最大生存时间;2. 网络中可能存在来自发送方的数据包,发送方的数据包被接收方处理后,又向对方发送响应,一来一回需要2MSL;3. 所以当报文阻塞,触发超时重发,经过上述过程需要2MSL
  • 防止旧连接的数据包被收到
  • 保证服务端能正确关闭
    • 服务端正常收到四次挥手的最后一个ACK报文,则服务端正常关闭
    • 服务端没有收到四次挥手的最后一个ACK报文,则服务端重发FIN报文,等待新的ACK
  • TIME_WAIT时间过短,无法使服务端正常关闭,时间过长,则占用资源

熟悉Socket连接、TCP连接过程

在这里插入图片描述

参考:《图解网络-小林coding-v2.0.pdf》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值