TCP三次握手相关面试题扩展

  • 1. TCP三次握手
  • 2. TCP三次握手可以变为两次握手吗?
  • 3. TCP可以采用四次握手吗?
  • 4. 第三次握手中,如果客户端的ACK未送达服务器,会怎样?
  • 5. 如果已经建立了连接,但客户端出现了故障怎么办?
  • 6. 初始序列号是什么?

1. TCP三次握手

直接上图 TCP三次握手

一些专业缩写单词

解释
TCP 传输控制协议(TCP,Transmission Control Protocol)
SYN 同步序列编号
SYN_SENT Client请求连接
ESTABLISHED 含义TCP:连接成功
ACK (Acknowledge character)即是确认字符,仅当ACK=1时,确认号字段才有效。TCP规定,在连接建立后所有报文的传输都必须把ACK置1;
SYN_RCVD SYN_RCVD是TCP三次握手的中间状态,是服务端口(监听端口,如应用服务器的80端口)收到SYN包并发送[SYN,ACK]包后所处的状态
RST TCP首部中的6个标志比特之一,表示重置连接、复位连接。复位RST,当RST=1,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立连接;
ISN 初始序列号(Initial Sequence Number)
FIN 来释放连接。当FIN=1,表明此报文的发送方的数据已经发送完毕,并且要求释放;
  • 最开始的时候客户端和服务器都是处于CLOSED状态。主动打开连接的为客户端,被动打开连接的是服务器。

第一次握手

  • 客户端Client将SYN(同步序列编号)赋值为1,并随机产生一个初始序列号seq发送给服务端Server,进入到SYN_SENT状态。
  • SYN_SENT表示请求连接,当你要访问其它的计算机的服务时首先要发个同步信号给该端口,此时状态为SYN_SENT,如果连接成功了就变为ESTABLISHED

第二次握手

  • Server服务端收到客户端Client的SYN(同步序列号)之后,知道客户端Client请求建立连接,将自己的SYN赋值为1,ACK赋值为1,产生一个acknowledge number=sequence number+1,并随机产生一个自己的初始序列号,发送给客户端,服务器端进入SYN_RCVD状态;客户端进入ESTABLISHED状态。

第三次握手

  • 客户端检查acknowledge number是否为序列号+1,ACK是否为1,检查正确之后将自己的ACK置为1,产生一个acknowledge number=服务器发的序列号+1,发送给服务器;进入ESTABLISHED状态;服务器检查ACK为1和acknowledge number为序列号+1之后,也进入ESTABLISHED状态;完成三次握手,连接建立。

2. TCP三次握手可以变为两次握手吗?

  1. 不可以
  2. 可能会出现已失效的连接请求报文段又传到了服务器端。
 client 发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达 server。本来这是一个早已失效的报文段。但 server 收到此失效的连接请求报文段后,就误认为是 client 再次发出的一个新的连接请求。于是就向 client 发出确认报文段,同意建立连接。假设不采用 “三次握手”,那么只要 server 发出确认,新的连接就建立了。由于现在 client 并没有发出建立连接的请求,因此不会理睬 server 的确认,也不会向 server 发送数据。但 server 却以为新的运输连接已经建立,并一直等待 client 发来数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源.采用 “三次握手” 的办法可以防止上述现象发生。例如刚才那种情况,client 不会向 server 的确认发出确认。server 由于收不到确认,就知道 client 并没有要求建立连接。
  1. 两次握手无法保证Client正确接收第二次握手的报文(Server无法确认Client是否收到),也无法保证Client和Server之间成功互换初始序列号。

3. TCP可以采用四次握手吗?

  1. 可以。但是会降低传输的效率。

  2. 四次握手是指:第二次握手:Server只发送ACK和acknowledge number;而Server的SYN和初始序列号在第三次握手时发送;原来协议中的第三次握手变为第四次握手。出于优化目的,四次握手中的二、三可以合并。

4. 第三次握手中,如果客户端的ACK未送达服务器,会怎样?

  1. Server端:
 由于Server没有收到ACK确认,因此会重发之前的SYN+ACK(默认重发五次,之后自动关闭连接进入CLOSED状态),Client收到后会重新传ACK给Server。
  1. Client端,两种情况:
 1. 在Server进行超时重发的过程中,如果Client向服务器发送数据,数据头部的ACK是为1的,所以服务器收到数据之后会读取 ACK number,进入 establish 状态2. 在Server进入CLOSED状态之后,如果Client向服务器发送数据,服务器会以RST包应答。

5. 如果已经建立了连接,但客户端出现了故障怎么办?

  1. 服务器每收到一次客户端的请求后都会重新复位一个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

6. 初始序列号是什么?

  1. TCP连接的一方A,随机选择一个32位的序列号(Sequence Number)作为发送数据的初始序列号(Initial Sequence Number,ISN),比如为1000,以该序列号为原点,对要传送的数据进行编号:1001、1002…三次握手时,把这个初始序列号传送给另一方B,以便在传输数据时,B可以确认什么样的数据编号是合法的;同时在进行数据传输时,A还可以确认B收到的每一个字节,如果A收到了B的确认编号(acknowledge number)是2001,就说明编号为1001-2000的数据已经被B成功接受。

计算机网络-----TCP三次握手相关面试题扩展相关推荐

  1. TCP三次握手相关面试题

    1.三次握手 最初客户端和服务端都处于 CLOSED(关闭) 状态.本例中 A(Client) 主动打开连接,B(Server) 被动打开连接. 一开始,B的TCP服务器进程首先创建传输控制块TCB, ...

  2. [计算机网络] - TCP三次握手和四次挥手

    转载自:https://blog.csdn.net/qq_34827674/article/details/105331617 1.TCP基本认识 TCP头部格式: ​​​​ 序列号:在建立连接时由计 ...

  3. 计算机网络tcp三次握手,快速掌握_计算机网络_TCP_三次握手

    虽然这个话题已经是老生常谈了,随手一搜资料一堆,但是让人快速掌握,我认为应该有几个概念先被明确指出,再放出那张大同小异的时序图. 01关注的字段 探讨三次握手问题前,不得不先了解TCP报文段中存在的这 ...

  4. 计算机网络tcp三次握手分析,tcp三次握手及原理

    TCP/IP 是很多的不同的协议组成,实际上是一个协议组,TCP 用户数据报表协议(也 称作TCP 传输控制协议,Transport Control Protocol.可靠的主机到主机层协议.这里要先 ...

  5. 硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题

    来自:小林coding 每日一句英语学习,每天进步一点点: 前言 不管面试 Java .C/C++.Python 等开发岗位, TCP 的知识点可以说是的必问的了. 任 TCP 虐我千百遍,我仍待 T ...

  6. 吊打面试官!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题

    作者 | 小林coding 来源 | 小林coding(ID:CodingLin) 不管面试 Java .C/C++.Python 等开发岗位, TCP 的知识点可以说是的必问的了. 任 TCP 虐我 ...

  7. djano 字段不重复_硬不硬你说了算!全图解被问千百遍的TCP三次握手和四次挥手面试题...

    前言 不管面试 Java .C/C++.Python 等开发岗位, TCP 的知识点可以说是的必问的了. 任 TCP 虐我千百遍,我仍待 TCP 如初恋. 遥想当年校招时常因 TCP 面试题被刷,真是 ...

  8. 【亡羊补牢】计算机网络灵魂之问 第11期 tcp三次握手

    这是博主面向腾讯学习的面试题大整理系列,可以在如下github仓库Issues中通过 Labels 标签分类查看相关内容,同时欢迎大家指正可能的错误并且提出自己的解答,希望大家学的鱼块,春秋招顺利! ...

  9. djano 字段不重复_硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题...

    脚本之家 你与百万开发者在一起 本文经授权转自公众号 小林coding (ID:CodingLin) 如若转载请联系原公众号 前言 不管面试 Java .C/C++.Python 等开发岗位,TCP的 ...

最新文章

  1. 路由交换-hc-文档
  2. java跳出指定循环
  3. 专科生,还有未来吗?
  4. Shell入门(八)之布尔运算
  5. 分支限界法 tsp java_基于分支限界法的旅行商问题(TSP)一
  6. DIY一个低成本多功能点阵时钟!
  7. java实现线性回归(简单明了,适合理解)
  8. java arraylist 赋值_ArrayList源码解析,老哥,来一起复习一哈?
  9. 开源库、jar包(要不要重新制造轮子)—— C/C++、Java、Python
  10. python入门经典代码-【python】编程语言入门经典100例--12
  11. 190227每日一句
  12. 2021最新十大无码工具
  13. 如何用程序哄老婆开心
  14. 常见Web安全问题及防御策略
  15. 杂记——贝叶斯可信区间与频率置信区间的区别
  16. CT图像重构方法详解——傅里叶逆变换法、直接反投影法、滤波反投影法
  17. 在Unity中使用ComputeShader
  18. 2021届硕士生年初java春招实习面试和正式校招面试经验汇总(收割腾讯,百度,美团,网易等offer)
  19. 使用adb命令卸载Android的apk软件失败
  20. 神经网络模型的基本原理,如何建立神经网络模型

热门文章

  1. python3-输入华氏度转化为摄氏度
  2. EMC Navisphere AGENT(NAVIAGENT) 安装日志
  3. 熬夜整理两万字Python知识点
  4. PLC高精度定时器(T法测速功能块)
  5. ThinkPHP 连接MSSQL PHP连接MSSQL
  6. python条件运算符_Python中的条件运算符
  7. 安卓学习日记——Shortcut
  8. ATLAS/ICESAT-2 NASA 数据介绍
  9. 招行193亿港元收购永隆银行53.1%股份
  10. 灰关联分析与语音/音乐信号识别