TCP三次握手

TCP三次握手是建立TCP连接时使用的一种协议,用于确保通信双方之间的可靠数据传输。下面是TCP三次握手的步骤:

  1. 第一次握手(SYN):
    客户端向服务器发送一个SYN(同步)报文段,其中包含了客户端的初始化序列号(ISN)和一些连接建立的参数。客户端进入SYN_SENT(同步已发送)状态,等待服务器的响应。

  2. 第二次握手(SYN+ACK):
    服务器收到客户端的SYN报文段后,会发送一个带有SYN和ACK(确认)标志的报文段作为响应。该报文段中包含了服务器的初始化序列号(ISN)和一些连接建立的参数。服务器同时也会进入SYN_RECEIVED(同步已接收)状态。

  3. 第三次握手(ACK):
    客户端收到服务器的SYN+ACK报文段后,会向服务器发送一个带有ACK标志的报文段,用于确认服务器的响应。客户端和服务器都已经完成了握手过程,建立了可靠的TCP连接。此时客户端进入ESTABLISHED(已建立连接)状态,服务器在接收到客户端的ACK报文段后也进入ESTABLISHED状态。

TCP头部

TCP(传输控制协议)头部是在TCP协议中用于承载控制信息的部分,位于IP数据报的后面。下面是TCP头部的一些主要字段:

  1. 源端口和目标端口:
    这两个字段指定了源主机和目标主机上的应用程序使用的端口号。源端口是发送方应用程序的端口号,而目标端口是接收方应用程序的端口号。

  2. 序列号和确认号:
    序列号字段用于标识TCP报文段中第一个数据字节的序列号。确认号字段用于确认接收方期望收到的下一个字节的序列号。通过序列号和确认号,TCP可以保证数据的有序传输和可靠性。

  3. 数据偏移:
    数据偏移字段指示TCP头部的长度,以4字节为单位。由于TCP头部的长度是可变的,这个字段用于确定TCP头部的结束位置。

  4. 控制标志:
    控制标志字段包括以下几个标志位:

    • URG(紧急):指示紧急指针字段是否有效。
    • ACK(确认):指示确认号字段是否有效。
    • PSH(推送):提示接收方尽快将数据交给应用程序。
    • RST(复位):用于重置连接。
    • SYN(同步):用于建立连接。
    • FIN(结束):用于关闭连接。
  5. 窗口大小:
    窗口大小字段指示发送方期望接收方在确认数据后继续发送的数据量。通过调整窗口大小,TCP可以进行流量控制,避免发送方发送过多的数据导致接收方无法及时处理。

  6. 校验和:
    校验和字段用于检测TCP头部和数据的完整性。发送方计算校验和并将其添加到报文段中,接收方在接收到报文段后进行校验,如果校验和不匹配,则认为数据在传输过程中出现了错误。

  7. 紧急指针:
    紧急指针字段用于指示紧急数据的位置。当URG标志位设置为1时,紧急指针生效,指示紧急数据在报文段中的位置。

为什么必须是三次握手

已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值