运维面试题之关于“TCP三次握手“的几个“为什么”

运维面试题之关于TCP三次握手的几个“为什么”

1.请你说出TCP报文的结构?

  • TCP处于运输层,处理端口到端口通信,因此:报文头部的开端有源端口号和目的端口号;
  • 32位的序号Seq,单位为字节,指的是报文数据部分开头第一个字节的序号;
  • 32位确认序号ack,单位为字节,指的是,希望对方端口发送数据从第几个字节开始;
  • 4位首部长度,范围0-15,单位是4个字节,头部长度最多60字节,但头部因为有必要的报文标识信息和协议内容约束(上下文),约定最少20字节
  • 保留位6位,置零,留给子孙用。
  • 功能位:URG,ACK,PSH,RST,SYN,FIN
    • URG:紧急位,标识数据是不是紧急数据,和头部尾部的数据指针配套使用,即从第一个字节开始到紧急指针指定的字节为紧急数据,应该尽快传送。
    • ACK,不是前面的ack哦请记住,只有ACK为1确认号字段才有效,为0确认号ack无效;所以有人问你TCP建立连接后,ACK是多少你会回答吗?当然是1了。
    • PSH:传输层尽快交给接受应用进程,不再等到整个缓存填满了运输层再向上交付,所以你明白这个位是针对谁了吗?没错,接收端的传输层。
    • RST:复位位(好别扭!),RST=1的时候,表面TCP连接过程当中出现严重的连接错误的时候,就必须释放连接,然后在重新建立传输层TCP连接。所以你知道什么时候这个位是有用的了吗?没错,在TCP连接过程和连接成功之后!连接过程当中,第三次握手失败,接收方必须发送一个RST=1的报文,强制关闭本次TCP连接!连接成功之后呢?输出传输双方有一方出现了,主机崩溃啊等原因,这个位也派上用场!这个位经常被问到,必须背下来。
    • SYN:同步位,为1表示这个包是一个连接请求(第一次握手),或连接接收报文(第二次握手),明白了吗?在连接成功之后,或者第三次握手,这个为0哦。
    • FIN:终止位,用来释放一方到另一方的连接,所以我问你,在四次挥手的过程当中,FIN=1的报文出现了几次没错两次,因为是全双工通信,一方要告诉另一方,我对你不再发送新的数据了哦。
  • 窗口字段:2字节。指出现在的传输层缓存空间情况看,对方还可以发送多少字节的数据过来。所以我问你,这个**缓存数据包括头部吗?**当然是不包括了!
  • 校验和:2B,校验首部和数据。背下来
  • 紧急指针:2B,指出有多少字节紧急数据,从数据部分开始数起。
  • 选项字段:长度可变。
  • 数据部分。
    在这里插入图片描述

2. 请你描述三次握手的过程?

在这里插入图片描述

  • 第一次握手:客户端(Client)向服务器端(Server)发送第一个包,其中标志位:SYN=1、ACK=0,发送序号Seq=x。客户端(原先CLOSED状态)进入:SYN-SEND状态,等待服务器确认;

  • 第二次握手:服务器收到客户端发送的包,后发送第二个包,其中包的SYN=1、ACK=1,接收顺序号ack为x+1,发送序号Seq为y,服务器进入SYN-RCVD状态;

  • 第三次握手:客户端收到服务器端传过来的包后,向服务器发送最后一个包,其中标志位SYN=0、ACK=1,发送顺序号Seq为x+1,ack为y+1。此包发送完毕,客户端和服务器都相继进入ESTABLISHED状态。至此三次握手完成。

3. 为什么要第三次握手而不是两次握手?

  • 双向握手只允许一方建立ISN,而另一方则承认它。 这意味着只有一方可以发送数据
  • TCP是一种双向通信协议,这意味着任何一端都应该能够可靠地发送数据。 双方都需要建立一个ISN(即随机生成的初始序号),双方都需要承认对方的ISN,并且将这个值告诉对方,实现双方同步,保证了可靠传输
  • 简而言之,一方必须确认另一方发送的seq序列号,才算单方向连接成功,所以为例双方都承认,最少要三次握手,明白了吗?

4. 第三次握手失败会怎样?

  • 接受端一直处于SYN-RCVD状态后,没有收到ACK报文,超时了,不会重传ack报文,而是直接发送含RST=1的报文段,进入CLOSED状态,重新再来。进入LISTEN状态。
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值