三次握手的过程


第一次握手:客户端发送一个SYN=1,序列号随机生成的报文给服务器(假设为j),进入SYN_SENT状态;
第二次握手:服务器收到客户端SYN=1的报文之后,知道客户端请求建立连接。发送一个SYN=1,ACK=1,acknowledge number=j+1,序列号随机生成(假设为k)的报文发送给客户端,告诉客户端自己接受到了这个请求报文并愿意与客户端建立连接;进入SYN_RCVD状态;
第三次握手:客户端检查acknowledge number是否为j+1,ACK是否为1,检查正确之后发送一个ACK=1,产生一个acknowledge number=k+1,发送给服务器;进入ESTABLISHED状态;服务器检查ACK为1和acknowledge number为k+1之后,也进入ESTABLISHED状态;完成三次握手,连接建立。

TCP连接可以只进行两次握手吗?为什么?

不可以。有一下两个原因:
原因一:假设客户端发出的第一个连接请求数据包没有到达服务器但他没有丢失,而是在某个网络结点长时间的滞留了。后面客户端重新发送了一个请求报文,并顺利进行了连接。但那个被滞留的数据包在连接释放以后的某个时间才到达了服务器。本来这是一个早已失效的数据包。但服务器收到此失效的数据包,就误认为是 客户端再次发出的一个新的连接请求。于是就向 客户端发出确认报文,同意建立连接。假设不采用 “三次握手”,那么只要服务发出确认,新的连接就建立了。由于现在客户端并没有发出建立连接的请求,因此不会理睬服务器的确认报文,也不会向服务器发送数据。但服务器却以为新的运输连接已经建立,并一直等待客户端发来数据。这样,服务器的很多资源就白白浪费掉了。采用 “三次握手” 的办法可以防止上述现象发生。例如刚才那种情况,客户端不会向服务器的确认发出确认。服务器由于收不到客户端确认,就不会与客户端建立连接。
原因二:服务器无法包证自己发送的报文能被客户端接受到。

可以采用四次握手吗?为什么?

可以。但是会降低传输的效率。
四次握手是指:第二次握手:服务器只发送ACK=1和acknowledge number=j+1的报文;而服务器的SYN=1和初始序列号在第三次握手时发送;原来协议中的第三次握手变为第四次握手。

如果三次握手中客户端发个服务器的ACK报文丢失怎么办?

由于服务器没有收到客户端的ACK报文,因此会重发之前的SYN+ACK报文(默认重发五次,之后自动关闭连接进入CLOSED状态),客户端收到后会重传ACK报文给服务器。

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

服务器每收到客户端发送的一个数据包,就会将一个计时器复位。当一定时间没有收到客户端发送的数据包(一般是2个小时),就会给客户端发送一个探测报文,之后每隔一小段时间(一般为75秒)就发送一个探测报文。连续发送10个探测报文都没有得到客户端的响应,就认为客户端出问题了,就会断开连接。

初始序列号是什么?

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

三次握手中那几次可以携带数据?

第三次握手可以携带数据,因为当第三次握手发送后,对于客户端来说已经进入链接状态了,而且通过前面的握手已经知道服务器接受发送信息能力没啥问题了,网络环境也没太大问题了,带点数据更没问题了

第一次为什么不能携带数据?

为了防止人恶意攻击服务器,如果有人想要攻击服务器,那么就可以将大量数据放入第一次报文中,那么服务器就会花大量的时间和精力处理这些数据,就更容易被攻击了。

TCP三次握手及其相关问题相关推荐

  1. TCP三次握手的相关问题及解答

    TCP三次握手的相关问题及解答 TCP三次握手的原理及及面试回答可以参考怎么回答面试中TCP的三次握手问题 目录 TCP三次握手的相关问题及解答 为什么需要三次握手,两次不行吗? 什么是半连接队列? ...

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

    TCP三次握手相关面试题扩展 1. TCP三次握手 2. TCP三次握手可以变为两次握手吗? 3. TCP可以采用四次握手吗? 4. 第三次握手中,如果客户端的ACK未送达服务器,会怎样? 5. 如果 ...

  3. TCP三次握手以及UDP相关知识

    报文:数据传输单元都叫报文 协议层: 负责穿过网络传输数据,需要有可靠性和高质量性 传输层增加了网络层的可靠性,为应用程序提供无连接(如UDP)和面向连接(如TCP)服务 UDP 传输层(数据段)–& ...

  4. 淘宝二面,面试官居然把TCP三次握手问的这么详细

    TCP 的三次握手和四次挥手,可以说是老生常谈的经典问题了,通常也作为各大公司常见的面试考题,具有一定的水平区分度.看似是简单的面试问题,如果你的回答不符合面试官期待的水准,有可能就直接凉凉了. 本文 ...

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

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

  6. 【转载】Wireshark基本介绍和学习TCP三次握手

    Wireshark基本介绍和学习TCP三次握手 转载自:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html 之前写过一篇博客 ...

  7. Wireshark基本介绍和学习TCP三次握手

    记得大学的时候就学习过TCP的三次握手协议,那时候只是知道,虽然在书上看过很多TCP和UDP的资料,但是从来没有真正见过这些数据包, 老是感觉在云上飘一样,学得不踏实.有了wireshark就能截获这 ...

  8. 抓包工具Wireshark基本介绍和学习TCP三次握手

    原文链接:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html#threehand,肖佳 之前写过一篇博客:用 Fiddler ...

  9. TCP三次握手原理,你真的了解吗?

    最近碰到一个问题,Client 端连接服务器总是抛异常.在反复定位分析.并查阅各种资料搞懂后,我发现并没有文章能把这两个队列以及怎么观察他们的指标说清楚. 问题描述 场景:Java 的 Client ...

最新文章

  1. 斯坦福大学 计算机视觉方面课程资料
  2. 简单动画函数封装及缓动效果
  3. GDI+中常见的几个问题(6)
  4. android root 挂载分区,adb — adb disable-verity, adb remount 实现重新挂载system分区为可读写分区...
  5. LinkedList理解(1)结构
  6. linux下安装jmeter
  7. 泰森中国宣布与阿里云达成战略合作
  8. OSI参考模型和TCP/IP参考模型
  9. QT实现头像图片剪切框
  10. 1.什么是计算机图形学?
  11. 常用来进行钢结构节点输出的软件是什么_钢结构深化设计BIM应用方法总结
  12. Python如何抓取APP数据?抓包工具Fiddler介绍
  13. Guava--Joiner使用方式以及java8实现Joiner
  14. hash+跳表,玩转Redis有序集合
  15. gcc cross compiler 问题
  16. 在MT终端模拟器中使用Termux命令
  17. iPhone/iPad/Touch苹果设备型号对应名称表
  18. 毕业十年,唯有独立面对——记 贺利坚老师新书《逆袭大学——传给IT学子的正能量》
  19. 高级面试题--SpringBoot启动流程解析
  20. 前端开发精华网站(强烈推荐!)

热门文章

  1. Java-名片管理系统
  2. Linux系统UID和GID详解
  3. 导师为了让大弟子毕业,不得已自写论文...
  4. php详情页图片尺寸,拼多多主图轮播图详情页图片尺寸要求大全
  5. 5图片展示_作为一名跨境卖家,产品图片不这样拍还怎么靠“脸”吃饭?
  6. mac重新登陆前部分账户服务将不可用
  7. 基于英飞凌TLE8242-2L的开关/比例电磁阀驱动电路
  8. TopCoder 详细规则入门(灰常实用)
  9. 网站报错检查502 bad gateway是怎么回事?怎么解决?
  10. ASEMI-QL5010是如何成为工业电磁灶用整流桥的