首页 > 其他分享 >TCP三次握手一二三问

TCP三次握手一二三问

时间:2022-11-11 15:23:50浏览次数:39  
标签:握手 SYN 一二三 Server 发送 Client TCP 序列号 报文

下面整理下TCP握手和挥手的几个问题,参考资料小林图解计算机网络

1、什么是三次握手?

  • Client端向Server端发送SYN为1的报文段,携带一个初始序列号x,client端进入SYN_SENT状态
  • Server端收到报文段后,向Client端发送ACK为1,SYN=1的报文段,携带确认号ack为x+1,初始序列号y,Server端进入SYN_RECIVD状态
  • Client收到Server回答的报文段后,还会向Server发送一个ACK为1,携带确认号y+1的报文段,这次握手可以携带数据,Client,Server进入ESTABLISHED状态

2、 为什么不能是两次或者多次

倘若只有两次握手的话,Server端就在收到Client端的连接请求报文后就进入了ESTABLISHED状态,如果Client端发送了两个建立连接的请求,如一个旧的SYN报文由于网络问题堵塞,再发送了一个新的SYN报文,旧的SYN先送到Server端,Server没有给Client机会纠错,这样导致Server端浪费资源建立了一个错误的历史链接,只有给客户端发送消息,客户端判断是错误连接,发送RST报文来断开连接,Server端浪费了资源和数据,这是使用三次握手的主要原因,避免建立历史链接,避免资源浪费,除此之外,如果只有两次握手,只有Client端将自己的初始序列号同步到Server端,Server端不能保证自己的初始序列号被对方成功接收
总结不使用二次握手的原因就是一是避免建立历史链接造成资源浪费,二是二次握手不能保证双方初始序列号同步成功
而不使用多次连接就更简单了,完全可靠的通信协议是不存在的,经过三次握手之后,Client端和Server端已经确认了通信状况,就没必要增加握手次数了

3、Client端什么情况下会收到错误的ack,如何解决的

如果Client先发送了一个旧的SYN报文段,但是由于网络堵塞的原因,Client又发送了新的SYN报文段,这时候旧的SYN报文段送到了Server端,Server端发回一个SYN+ACK的报文段,确认号ack为旧的SYN+1,Client就收到了一个错误的ack了,这时候Client会发送一个RST为1的报文段给Server端,断开连接

4、什么是四次挥手

  • Client端向Server端发送FIN为1的报文段,携带序列号u,Client端进入FIN-WAIT-1阶段
  • Server端接收到报文段后,返回一个ACK为1,确认号为u+1的报文段,携带序列号v,Server端进入CLOSE-WAIT状态,Client收到报文段后进入FIN-WAIT-2状态,这时候TCP处于半连接状态
  • 等到Server端没有数据发送回Client端后,Server会发送一个请求断开连接的报文段,FIN为1,携带序列号w,确认号为u+1,Server端进入LAST-ACK状态
  • Client端收到报文段后,会发送一个ACK为1的报文段,携带序列号为u+1,确认号ack为w+1,进入TIME-WAIT状态,Server端收到后进入CLOSE状态,Client端等待2Mls时间后进入CLOSE状态

5、TCP四次挥手可以变成三次吗,能不能把第二个ack报文段放到第三次FIN报文段中一起发送?

答案是有时候是可以的,但是控制权并不在内核,而是在Server端的应用进程,如果Server端没有数据要发送,也是可以合并为一次挥手的

标签:握手,SYN,一二三,Server,发送,Client,TCP,序列号,报文
From: https://www.cnblogs.com/spark-cc/p/16880552.html

相关文章

  • 为什么TCP 建连接要3次,断连接却要4次呢?
    大家好,今天聊聊传输层通信协议TCP的经典问题:建连接与断连接。网络上的传输是没有连接的,包括TCP也是一样的。而TCP所谓的“连接”,其实只不过是在通讯的双方维护一个“连接状......
  • HP-ERS-T244 RS485/RS232四串口工业级串口服务器RS232/485转以太网TCP/IP物联网网关
     HP-ERS-T244是一款四串口服务器,采用Cortex-M7方案,主频高达400MHz,性能更强,传输速度更快,可靠性更高。搭载深度优化的TCP/IP协议栈。双重看门狗和多种保活机制助力设备稳......
  • Linux网络通信(TCP套接字编写,多进程多线程版本)
    预备知识源IP地址和目的IP地址IP地址在上一篇博客中也介绍过,它是用来标识网络中不同主机的地址。两台主机进行通信时,发送方需要知道自己往哪一台主机发送,这就需要知道接......
  • 计算机网络12 TCP
    1TCP简介CP的全称是TransmissionControlProtocol,即传输控制协议,TCP工作在传输层上其职责是:实现主机间进程到进程的通信,其次还需要保证可靠性(不是安全性,换言之......
  • tcp/udp 协议特性和三次握手
    一、TCP/UDP协议特性1)TCP特性:工作在传输层、建立连接、可靠的、错误检查2)UDP特性:工作在传输层、不需要连接、不可靠的、有限的错误检查、传输性能高  2、控制位及确......
  • Java输出SSL握手日志和查看cacerts路径
    在JAVA启动时添加下面的VM参数就可以启动握手日志了!!!-Djavax.net.debug=all另外,在debug日志中,有一个trustStoreis关键字,根据这个可以找到使用的是哪个truststor......
  • 深度解析传输控制协议TCP和UDP
    传输协议的引入:如果两台计算机已经处于连接状态,那怎样让数据从一端传送到另外一端?(采用TCP和UDP协议) 一、TCP用户传输协议TCP协议是TransmissionControlProtocol传......
  • 用户态协议栈之tcpip设计
      实现一个协议栈,要拿到最原始的数据,最原始的数据,以太网的数据方法1:rawsocket,方法2:旁路,关掉之前的driver,建立一个driver:netmap,dpdk 方法3:hook......
  • Netty(一)深入理解网络通信和TCP/IP协议
    一、前言为什么要学Netty?实话说工作中真正用到netty开发的场景可能不算特别多,但是为啥要学这玩意呢?有一说一,变强的路上技能可以用不到,但是不能没有~Java生态圈......
  • TCP-Socket项目
    项目描述TCP协议,客户端和服务端,支持多机发送和接受文件和图片发送字符串信息,记录到文本编译工具,makefile,cmake,检查工具知识点抓包工具wireshark,分析数据包文件I......