TCP三次握手 四次挥手

三次握手

目的:保证传输的可靠性,为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。主要防止资源的浪费。

具体过程:当客户端发出第一个连接请求报文段时并没有丢失,而是在某个网络节点出现了长时间的滞留,以至于延误了连接请求在某个时间之后才到达服务器。这应该是一个早已失效的报文段。但是服务器在收到此失效的连接请求报文段后,以为是客户端的一个新请求,于是就想客户端发出了确认报文段,同意建立连接。假设不采用三次握手,那么只要服务器发出确认后,新的连接就可以建立了。但是由于客户端没有发出建立连接的请求,因此不会管服务器的确认,也不会向服务器发送数据,但服务器却以为新的运输连接已经建立,一直在等待,所以,服务器的资源就白白浪费掉了。

四次挥手

由于 TCP 的半关闭造成的。因为 TCP 连接是全双工的(即数据可在两个方向上同时传递)所以进行关闭时每个方向上都要单独进行关闭。这个单方向的关闭就叫半关闭。当一方完成它的数据发送任务,就发送一个 FIN 来向另一方通告将要终止这个方向的连接。

常见问题

  1. 为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
    这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

  2. 为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
    虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

[计算机网络][总结][常见问题][TCP][三次握手][四次挥手]相关推荐

  1. TCP三次握手四次挥手(图解)

    <TCP-IP协议栈概略图与TCP三次握手四次挥手> 目录 1 TCP过程详解 1.1 三次握手 1.2 四次挥手 2 使用tcpdump分析三次握手的过程 2.1 tcpdump抓包和t ...

  2. java 中的网络编程(Socket、TCP三次握手四次挥手、TCP/UDP/URL)

    文章目录 前言 一.网络编程概述 二.网络通信要素概述 1.如何实现网络中的主机互相通信 2.网络通信协议 3.IP和端口号 4.InetAddress类 5.网络协议 6.TCP/IP协议簇 7.T ...

  3. java锁一次交互二次握手_Java后台开发面试实战(二):TCP三次握手四次挥手

    感谢牛客网网友提供的面试经验! 1. 解释一下TCP三次握手四次挥手 图片来源于微信公众号:码农求职小助手 答: 嗯(稍作思考)- 三次握手简单来说,在数据传输开始前: 第一次握手:客户端向服务端发送 ...

  4. TCP三次握手四次挥手过程及其中的状态量

    网上看到过一些有关TCP三次握手四次挥手的过程,觉得有必要总结一下了,对于了解TCP的过程还是有帮助的 1.变量含义 SYN表示建立连接, FIN表示关闭连接, ACK表示响应, PSH表示有 DAT ...

  5. TCP三次握手四次挥手简介

    TCP三次握手四次挥手简介 图解三次握手.四次挥手 建立连接:三次握手 关闭连接:四次挥手 上图传递过程中出现的几个字符(SYN,ACK,FIN,seq,ack)各代表什么意思 SYN,ACK,FIN ...

  6. TCP三次握手四次挥手详解

    TCP三次握手四次挥手 1. TCP报文格式 2. TCP连接需要解决的问题 3. 三次握手 4. 四次挥手 5. 一些补充问题 1. TCP报文格式 在了解三次握手和四次挥手之前,先知道TCP报文内 ...

  7. 深入浅出TCP三次握手四次挥手

    每每想起TCP三次握手这个问题,就会陷入如下的困惑: var forget = ? while(forget) {百度/Google } 而重点在于forget永远等于true,无情的消耗着我这颗只有 ...

  8. TCP三次握手四次挥手 TCP/UDP区别

    三次握手 第一次握手: 建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认:  SYN:同步序列编号(Synchronize Sequence Numbe ...

  9. Wireshark验证TCP三次握手四次挥手

    本文介绍如何通过Wireshark抓包工具验证TCP的三次握手四次挥手过程. 首先本地起了一个tomcat服务器,跑了一个简单的基于SpringMVC的rest服务. 打开Wireshark,捕获指定 ...

最新文章

  1. 互联网绑上美国外交政策战车
  2. 前端工程师必须知道的vue前端面试题目汇总
  3. 路由器网口1一直闪烁正常吗_电信光猫上的网口1一直在闪 网络一直都在闪断
  4. “.Net 社区虚拟大会”(dotnetConf) 2016 Day 1 Keynote: Scott Hunter
  5. sklearn逻辑回归参数设置_【机器学习笔记】:逻辑回归实战练习(二)
  6. ML - 常用数学符号
  7. springBoot上传文件时MultipartFile报空问题解决方法
  8. Bluetooth L2CAP介绍
  9. php 复制一张图片,PHP 生成一张图片的两种方法
  10. hadoop完全分布式集群下安装sqoop
  11. oracle查看数据库文件大小
  12. Windows下安装 Apache 步骤
  13. 深入理解Amazon Alexa Skill(四)
  14. mysql 小于号转义_mybatis sql语句配置大于号小于号的处理
  15. 湍流公式推导系列——(一) 不可压湍动能方程的推导与含义
  16. 搭建svn://模式的svn服务器
  17. Docker系列---docker cgroup资源管理 | TLS通讯加密 | 详细讲解
  18. SQL NULL Values(空值)
  19. 信号与系统控制理论计算机控制实验台QY-DPJ01
  20. Uniapp实现微信群聊头像|九宫格合并图片

热门文章

  1. java初学者笔记总结day6
  2. 中反应器体积_缠绕管式反应器大幅提高能效,移热能力较列管式反应器提升逾50%...
  3. Android 多线程实现异步执行demo,线程池使用demo
  4. AsyncTask使用详解
  5. EventBus使用实例,观察者模式
  6. android 动态设置View的高度和宽度,ViewTreeObserver使用
  7. Fiddler过滤指定域名
  8. linux内核双向循环队列,读书笔记之linux内核设计与实现(2)进程调度
  9. java stringutils_Java 笔记----- StringUtils 拼接字符
  10. 【C语言进阶深度学习记录】十 C语言中:struct的柔性数组和union分析