《深入分析 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. P3956 棋盘——普及题,儿童搜索

    P3956 棋盘 这道搜索弄得我很难受. 第一,一定要看清楚题在写.第二,弄清楚判断条件: 首先图的大小是m*m不是n*m; 然后就是当前有颜色的点是不用变颜色的: #include<cstdi ...

  2. [bzoj 4887] [Tjoi2017]可乐

    传送门 Description 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且 放在了加里敦星球的1号城市上.这个可乐机器人有三种行为:停在原地,去下一个相邻的 城市 ...

  3. 2019 ICPC 沈阳网络赛 J. Ghh Matin

    Problem Similar to the strange ability of Martin (the hero of Martin Martin), Ghh will random occurr ...

  4. Windows下的apache tomcat安装与配置

    在官网http://tomcat.apache.org下载apache tomcat,我下载的是7可以自行选择版本: 解压缩,把解压文件放入C盘根目录下 配置环境变量,变量名位CATLINA_HOME ...

  5. mybatis的maven配置

    <!-- mybatis依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId ...

  6. Logback 输出 JPA SQL日志 到文件

    Logback 输出 JPA SQL日志 到文件 使用Spring Boot 配置 JPA 时可以指定如下配置在控制台查看执行的SQL语句 spring.jpa.show-sql=true Sprin ...

  7. 【Oracle/Java】以Insert ALL方式向表中插入百万条记录,耗时9分17秒

    由于按一千条一插程序长期无反应,之后改为百条一插方式,运行完发现插入百万记录需要9m17s,虽然比MySQL效率差,但比单条插入已经好不少了. 对Oracle的批量插入语法不明的请参考:https:/ ...

  8. linux nand flash常用命令

    使用命令前用cat /proc/mtd 查看一下mtdchar字符设备:或者用ls -l /dev/mtd*#cat /proc/mtddev:    size   erasesize  namemt ...

  9. OpenJudge计算概论-自整除数

    /*=================================================== 自整除数 总时间限制: 1000ms 内存限制: 65536kB 描述 对一个整数n,如果其 ...

  10. VS2015编译gdal库

    gdal下载地址:http://trac.osgeo.org/gdal/wiki/DownloadSource 修改nmake.opt中的一些配置.1. GDAL_HOME = “C:\warmerd ...