《深入分析 javaweb 技术内幕》P38 读书扩展

作者:淮左白衣

写于2018年4月12日20:58:36

目录


听了刘德华的《17岁》,华仔在中间喊话:还记不记得我17岁的时候你们多少岁啊?是不是和我一样都是17岁啊?亦是当时只是小孩子啊?莫名哀伤时间流逝
17岁的华仔,那时刚出道!想想我的17岁,青春既没开花,也没喂狗,只是平淡的流走了!没有人永远17岁,但是永远有人17岁!

TCP状态转换图解

TCP的一次通信,分为建立连接(三次握手)、关闭连接(四次挥手);


图解三次握手

实线代表服务器 的状态转换、虚线代表客户端 的转态转换;

文字讲解三次握手:

  1. 最开始客户端和服务器,都处于 CLOSED 状态,二者之间没有任何联系;
  2. 客户端向服务器发起连接请求,具体操作是发送一个 SYN 给服务器,客户端状态转而变为 SYN-SENT ,这是第一次握手
  3. 由于客户端向服务器发送请求了,服务器被动的进入 LISTEN 状态;
  4. 如果服务器没有想要客户端的请求,则客户端得不到服务器的回应,请求就会超时,一旦请求超时,客户端的状态,就会再次进入 CLOSED
  5. 如果服务器响应了这个请求,具体操作是:接收到了客户端发送的 SYN,同时向客户端发送回应 SYN+ACK,表示我收到你的请求了;然后服务器的状态,进入 SYN-RECEIVED ; 这是第二次握手
  6. 客户端收到服务器的回应 SYN+ACK,然后再次向服务器发送一个 ACK,表示我收到你的回应了 ;客户端的状态进入 ESTABLISHED这是第三次握手
  7. 服务器收到客户端的响应 ACK 以后,状态进入 ESTABLISHED
  8. 至此,三次握手完成,客户端与服务器建立了可靠的连接,可以进行数据传输了 ;

上面有个特殊的地方:

假如客户端发送请求报文SYN的时候,服务器也发送了请求报文SYN ,则客户端进入 SYN-RECEIVED 状态,角色变为服务器; 一般这种情况是,没有绝对的客户端、服务器;通信的两台机器,可以在客户端和服务器之间进行角色的切换 ;


图解四次挥手

实线代表主动关闭方 的状态转换、虚线代表被动关闭方 的转态转换;

文字讲解四次挥手:

  1. 主动关闭方,发送 FIN 给被动关闭方,然后进入 FIN-WAIT-1 状态 ;
  2. 被动关闭方,收到主动关闭方的 FIN,会送一个回应 ACK 给主动发送方,然后进入 CLOSE-WAIT
  3. 主动方收到被动方回应的ACK,并且也回应一个ACK,然后进入 FIN-WAIT-2 ;
  4. 既然主动方要关闭连接,那么被动方也不能死皮赖脸的不关啊,它也就向主动方发送一个请求FIN,然后进入 LAST-ACK
  5. 被动方收到主动方的回应ACK,进入 CLOSED
  6. 主动方收到被动方发送的 FIN 之后,发送回应 ACK(主动方在接收到被动方发送的FIN,将不再接受任何信息,但是可以发送信息),进入 TIME-WAIT

    上面是有一方先于对方,发起关闭请求 ,下面说下,双方同时发起关闭请求的情况;

    当双方同时发起关闭请求的时候,双方在发送完FIN 以后,都进入 FIN-WAIT-1 状态;然后如果双发又同时收到对方的FIN,以及同时收到对方回应的ACK,则直接进入 TIME-WAIT

    如果双方同时收到FIN,但是没有同时收到ACK,则先进入 CLOSING,然后,在双方都收到 ACK 以后,再进入 TIME-WAIT ;

为什么在进入 TIME-WAIT 的状态以后,会等待 2MSL 的时间,再进入 CLOSED

MSL 翻译为:报文最大生存时间 ;,2MSL则是两个报文最大生存世时间,等待这个时间的原因:是因为在网络不好的时候,有时候,需要重新发送报文,因此进入这里的等待下 ;

TCP状态转换(图解+文字解说)的更多相关文章

  1. TCP状态转换

    最近笔试遇到一个题目:如果tcp建立连接时第三次握手失败,tcp会做何操作?该问题的本质是判断我们对tcp的状态转换是否能有比较深刻的理解.只要理解了下面的状态转换图,很容易回答上述问题. 在此,将& ...

  2. 《UNP》学习之TCP状态转换

    CLOSED:TCP起始状态 LISTEN:绑定端口后进入listen状态,一般是服务端 SYN_SENT:发送SYN连接请求,主动打开连接的一方进入SYN_SENT SYN_RCVD:接收到SYN连 ...

  3. TCP 连接建立和断开,以及状态转换

    1. TCP报文结构 TCP是一种可靠.面向连接.全双工的传输层协议,其报文格式如下所示:      源端口.目的端口:16位长.标识出远端和本地的端口号.     顺序号:32位长.表明了发送的数据 ...

  4. TCP的状态转换

    TCP的状态转换图 手写的状态转换图 一.服务端状态变迁:​ 服务端创建套接字之后调用listen函数将套接字有一个未连接的主动套接字转换为被动套接字,指示内核应接受指向该套接字的连接请求,套接字状态 ...

  5. java 22 - 18 多线程之 线程的状态转换、线程组

    线程的状态转换图解:图片 线程的线程组: 线程组: 把多个线程组合到一起.    它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制. 首先创建一个Runnable的实现类 publi ...

  6. 传输控制协议(TCP) -- TCP状态转换图

    TCP状态转换图 在<UNIX网络编程 卷1>一书中,作者给出了TCP状态转换图(如下).本文也将围绕此图进行阐释. 注:上图红框表示比较特殊的地方. TCP状态转换两条主线 图2-4中的 ...

  7. TCP状态转换图解析

    本文参考Unix网络编程卷1,对TCP状态转换进行总结,方便掌握TCP链接中各个状态及故障分析. 1.Linux下TCP相关工具 基于Linux系统查看网络状态,首先了解几个基本查看指令. Linux ...

  8. TCP状态知识总结(图解)

    tcp状态:   LISTEN:侦听来自远方的TCP端口的连接请求 SYN-SENT:再发送连接请求后等待匹配的连接请求 SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认 ...

  9. TCP连接建立与终止,及状态转换

    TCP连接建立 三路握手 三路握手发生在客户端发起connect请求到服务端accept返回中,在三路握手发生前,服务端必须准备好接受外来连接,这通常通过服务端调用 (socket.bind.list ...

随机推荐

  1. HDU 4609 3-idiots ——(FFT)

    这是我接触的第一个关于FFT的题目,留个模板. 这题的题解见:http://www.cnblogs.com/kuangbin/archive/2013/07/24/3210565.html. FFT的 ...

  2. Java项目开发

    项目开发整体构建: MVC+DAO设计模式 用面向对象的方式理解和使用数据库,一个数据库对应一个java项目 数据库--项目 表--类 字段--属性 表中的一条数据--类的一个对象 M:模型层 Jav ...

  3. Java 面向对象(六)

    抽象类和抽象方法 抽象方法 在方法前面添加了一个关键字 abstract 抽象方法的特点 (1)抽象方法是没有方法体的. (2)抽象方法必须得要定义在抽象类 或 接口当中 (在类前面添加上了一个abs ...

  4. ML_Review_GMM(Ch10)

    Note sth about GMM(Gaussian Mixtrue Model) 高斯混合模型的终极理解 高斯混合模型(GMM)及其EM算法的理解 这两篇博客讲得挺好,同时讲解了如何解决GMM参数 ...

  5. API 设计 POSIX File API

    小结: 1. https://mp.weixin.qq.com/s/qWrSyzJ54YEw8sLCxAEKlA API 设计最佳实践的思考 谷朴 阿里技术 昨天   阿里妹导读:API 是模块或者子 ...

  6. 论文翻译 DOTA:A Large-scale Dataset for Object Detection in Aerial Images

      简介:武大遥感国重实验室-夏桂松和华科电信学院-白翔等合作做的一个航拍图像数据集 摘要: 目标检测是计算机视觉领域一个重要且有挑战性的问题.虽然过去的十几年中目标检测在自然场景已经有了较重要的成就 ...

  7. windows通过企业内部授权服务器激活方法

    OFFICE KMS 激活方法: # 进入office安装目录 cscript ospp.vbs /sethst:kms.domain.com #设置KMS服务器 cscript ospp.vbs / ...

  8. 002-01-RestTemplate-配置使用说明

    一.概述 Spring RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写 ...

  9. ARM程序的RO段、RW段和ZI段 --Image

    Limit 含义了解RO,RW和ZI需要首先了解以下知识:ARM程序的组成此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别. ...

  10. osg RTT 多相机-局部放大镜

    #ifdef _WIN32 #include <Windows.h> #endif // _WIN32 #include<iostream> #include <osgV ...