美文网首页
小马哥网络课笔记20------TCP之建立连接

小马哥网络课笔记20------TCP之建立连接

作者: 夜凉听风雨 | 来源:发表于2022-02-21 09:56 被阅读0次

3次握手

  • 客户端与服务器通信前需要经历3次握手建立连接。
    1、第1次握手客户端告诉服务器我想建立连接
    2、第2次握手是服务器收到连接请求后告诉客户端同意连接
    3、第3次握手是客户端告诉服务器确认建立连接。
3次握手.png

状态解读

  • CLOSED: client处于关闭状态

  • LISTEN: server处于监听状态,等待client连接

  • SYN-RCVD:表示server接受到了SYN报文,当收到client的ACK报文后, 它会进入到ESTABLISHED状态

  • SYN-SENT: 表示client已发送SYN报文,等待server的第2次握手

  • ESTABLISHED:表示连接已经建立

前两次握手的特点

  • SYN都设置为1

  • 数据部分的长度都为0

  • TCP头部的长度一般是32字节
    1.固定头部: 20字节
    2.选项部分: 12字节

  • 双方会交换确认一些信息
    1.比如MSS、是否支持SACK、Window scale (窗口缩放系数)等
    2.这些数据都放在了TCP头部的选项部分中(12字节)

疑问

  • 为什么建立连接的时候,要进行3次握手? 2次不行么?
    主要目的:防止server端一直等待,浪费资源

  • 如果建立连接只需要2次握手,可能会出现的情况
    1.假设client发出的第一个连接请求报文段,因为网络延迟,在连接释放以后的某个时间才到达server
    2.本来这是一个早已失效的连接请求,但server收到此失效的请求后,误认为是client再次发 出的一个新的连接请求
    3.于是server就向client发出确认报文段,同意建立连接
    4.如果不采用“3次握手”, 那么只要server发出确认,新的连接就建立了小
    5.由于现在client并没有真正想连接服务器的意愿,因此不会理睬server的确认,也不会向server发送数据
    6.但server却以为新的连接已经建立,并一直等待client发来数据,这样, server的很多资源就白白浪费掉了

  • 采用“三次握手”的办法可以防止上述现象发生
    例如_上述情况,client没有向server的确认发出确认,server由于收不到确认, 就知道client并没有要求建立连接

  • 第3次握手失败了,会怎么处理?
    1.此时server的状态为SYN-RCVD,若等不到client的ACK, server会重新发送SYN+ ACK包
    2.如果server多次重发SYN+ ACK都等不到client的ACK,就会发送RST包,强制关闭连接

相关文章

网友评论

      本文标题:小马哥网络课笔记20------TCP之建立连接

      本文链接:https://www.haomeiwen.com/subject/nwyylrtx.html