tcp为什么要第三次握手,time_wait是做什么的? 
tcp有几种状态,画出所有的状态转换图。

晚上看到的面试题,TCP三次握手的印象很深,但为什么需要3次握手,还是想不起来了。

简单而言:如果不是三次握手的话,那么到底需要几次握手最佳呢?2次握手,或者4次以上的握手?

先看2次握手的情况:客户端给服务器发送建立连接的请求,服务器同意连接请求发回应给客户端,连接就此建立。

有问题的就是网络中经常会出现的包的延迟,如果客户端的某个包在路由器上延迟了,过了很久才发给服务器,服务器收到这个包后回应给客户端,服务器以为连接就此建立成功,分配资源,这样就会出现问题。

再看四次握手的情况:

①A发送SYN,

②B收到SYN后发送ACK+SYN

③A发送ACK

④B再发送ACK

实际上这样的过程可以一直循环下去,其实3次握手已经是能够使双方知道对方设备都是好用的最少次数。四次握手会浪费资源。

综上所述,TCP 3次握手最好。

下面是第二个问题:time_wait是做什么的?

假设客户端发送的最后一个ACK丢失了,服务器会重发它发送的最后一个FIN,所以客户端必须维持一个状态信息,以便能够重发ACK;如果不维持这种状态,客户端在接收到FIN后将会响应一个RST,服务器端接收到RST后会认为这是一个错误。如果TCP协议能够正常完成必要的操作而终止双方的数据流传输,就必须完全正确的传输四次握手的四个节,不能有任何的丢失。这就是为什么socket在关闭后,仍然处于 TIME_WAIT状态,因为他要等待以便重发ACK。

TCP为什么需要三次握手相关推荐

  1. TCP/IP协议三次握手与四次握手流程解析

    原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议三次握手与四次握手流程解析 TCP/IP协议的详细信息参看<TCP/IP协议详 ...

  2. 通俗易懂的TCP里面的三次握手以及四次挥手

    通过三次握手来建立连接. 连接建立之后,就会传送数据! 四次握手来释放TCP连接 关于TCP协议中三次握手中的大写ACK和小写ack number的区别 参考:https://blog.csdn.ne ...

  3. 一些通讯知识、TCP/IP、三次握手四次分手(正确的图,网上很多错了)、HTTP\HTTPS、DNS、UDP

    总述 这里会按照一个浏览器(客户端)是向服务器请求资源的路径来分享知识点 有些内容在之前的博客有,您可以自取 浏览器(客户端)是如何向服务器请求资源的呢? 见下图: 客户端输入网址(输入搜索内容也是一 ...

  4. TCP建立连接三次握手和释放连接四次握手

    TCP建立连接三次握手和释放连接四次握手     [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/52535294 在谈及T ...

  5. 通俗理解tcp/ip的三次握手和四次分手

    转载地址:https://github.com/jawil/blog/issues/14 最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最 ...

  6. 理解TCP为什么需要进行三次握手(白话)(转载)

    原文地址:http://www.cnblogs.com/yuilin/archive/2012/11/05/2755298.html#comment_tip 首先简单介绍一下TCP三次握手     在 ...

  7. TCP为什么是三次握手和四次挥手

    转载自   TCP为什么是三次握手和四次挥手 为什么建立连接是三次握手断开连接是四次挥手?  三次握手的流程和四次挥手的流程是什么? 三次握手与四次回收分别对应TCP连接与断开过程 tcp报文格式  ...

  8. 白话解说TCP/IP协议三次握手和四次挥手

    白话解说TCP/IP协议三次握手和四次挥手 1.背景 和女朋友异地恋一年多,为了保持感情我提议每天晚上视频聊天一次. 从好上开始,到现在,一年多也算坚持下来了. 1.1.问题 有时候聊天的过程中,我的 ...

  9. TCP协议的三次握手与四次挥手

    tcp协议的三次握手和四次挥手 三次握手: 第一次握手: 客户端发起一个链接(SYN) 第二次握手: 服务端就会返回一条(ACK)确认信息,同时服务端也会向客户端发起一个链接请求(SYN),此二者可合 ...

  10. TCP协议中三次握手

    TCP/IP是互联网相关的各类协议族的总称 TCP/IP协议族分为:应用层,传输层,网络层,数据链路层 应用层:向用户提供应用服务时的通讯的活动 传输层:提供处于网络连接中的两台计算机之间的数据传输 ...

最新文章

  1. 将数组A中的内容和数组B中的内容进行交换(数组一样大)
  2. linux 内核维护,Linux 4.18内核系列生命周期结束:用户需尽快更新内核
  3. Java面试题:如何将字符串反转?(翻转字符串)
  4. leetcode 496, 503, 556. Next Greater Element I, II, III | 496, 503, 556. 下一个更大元素 I,II,III(单调栈)
  5. vs2017字体最佳选择_如何为下一个项目选择最佳字体? 一个简单的游戏
  6. Acronis Disk Director 增大c盘
  7. 为何snapgene闪退?DNA序列无法显示?
  8. 数据库-MySQL约束-笔记
  9. 关于mysql的题目_关于MySQL的经典例题50道 答案参考
  10. 学php应该怎么学习数学,数学难学,数学到底该怎么学?
  11. identifier of an instance of
  12. Keras构建用于分类任务的Transformer(Vision Transformer/VIT)
  13. android屏幕 录制检测,Android 录制屏幕的实现方法
  14. oracle中distance用法,distance的用法和短语例句
  15. C#引用interop.taskscheduler.dll
  16. c++--标准模板库(STL)
  17. OpenGL像素绘制
  18. javaSwing+MySQL实现图书管理系统
  19. 网易邮箱登录页面html5布局,css实现tab效果仿163邮箱样式
  20. 华夏文明的传统气功到底是有一定科学性还是彻底的伪科学(ZZ)

热门文章

  1. oracle消除重复的行使用的什么函数,利用Oracle的row_number() over函数消除重复的记录...
  2. windows下配置odbc时userid填什么_BurpSuite + Xray 被动扫描配置
  3. java redis 批量删除key_Redis,就是这么朴实无华
  4. Mybatis获得参数值的两种方式:#{}和${}的区别
  5. 【opencv】13.摄像头焦距和视场角
  6. 【c++】15.订阅消息后转化为proto消息,再序列化,最后通过tcp发送出去
  7. 基于 Zookeeper 的分布式锁实现
  8. SqlServer基础之(触发器)
  9. Java集合框架之 Java HashMap 源码解析
  10. 有哪些LSTM(Long Short Term Memory)和RNN(Recurrent)网络的教程?