TCP协议的三次握手及其原因

一.TCP的三次握手

TCP 的三次握手是为了建立连接

第一次握手:

  • 客户端先向服务器发送一 个同步数据包(报文段)。
  • 数据包的TCP首部内容:同步SYN=1,确认ACK=0,号seq=x。
  • 根据TCP首部的内容,表示这是个请求建 立连接的数据包,期seq=x 为所传送数据的第一个字节的序号。

第二次握手:

  • 服务器收到客户端发送的第一 个数据包后,根据SYN=1 与ACK=0 ,判断出为主动建立连接的数据包。
  • 若服务器同意连接,则服务器发送一个数据包进行回应。
  • 数据包的TCP首部内容:同步SYN=1,确认ACK=1,序号seq=y,确认号ack=x+1
  • 确认ACK=1,代表服务器同意连接;
  • 号seq=y的值由服务器指定,示服务器发送数据时的第一个数据字节的序号;
  • 确认号! ack=x+1,表示已经收到客户端发送的x字节数据,并告诉客户端下次应从数据的第x+1 个字节开始发送;

第三次握手:

  • 客户端收到服务器的确认之后,再给服务器发送一 个数据包。
  • 数据包的TCP首部内容:同步SYN=0,确认ACK=1,序号seq=x+1,确认号ack=y+1
  • SYN=0,示双方已同意建立连接;
  • 确认ACK=1 ,示收到服务器的确认数据包;
  • 号seq=x+1 ,表示发出的数据包就是数据的第x+1 个字节;
  • 确认号ack=y+1 ,表示收到服务器发送y字节数据,并告诉服务器下次应从数据的第y+1 个字节开始发送。

 

二.TCP三次握手的原因

原因如下:

        建立tcp连接的前两次握手,一个是客户端向服务器发出建立连接的请求,另一次是服务器向客户端确认收到这个请求,这两次只能证明客户端与服务器之间的网络是通畅的,最后一次握手是为了让客户端确认收到服务器发送的数据,避免服务器等待造成资源浪费 。如果过于频繁会导致服务器停止响应。

举个🌰:

        客户端先发出了一个建立请求的请求数据包,但是由于网络的原因,客户端在设定的超时时间内还未收到服务器的确认数据包,于是又发出第二次的建立链接的请求数据包,这一次网络通畅,数据包很快到达服务器,服务器确认后发送收到的数据包,又开始接下来的数据传递。但是这个时候客户端第一次发出的建立请求的请求数据包到达了服务器,服务器会向向客户端发送确认数据包,由于客户端已经收到了一个确认数据包,所以会忽略服务器发来的第二个确认数据包。但服务器发出确认数据包就一直等待客户端的回复,这就造成服务器的无效等待以及资源浪费。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ButNullPointer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值