• tcp有限状态机分析

  • 2011-11-23      0 个评论

  • 收藏    我要投稿

  • 这幅图是TCP的状态机,看了2个小时,分析总结如下:

    (1)CLOSED 状态时初始状态。

    (2)LISTEN:被动打开,服务器端的 状态变为LISTEN(监听)。被动打开的概念:连接的一端的应用程序通知操作系统,希望建立一个传入的连接。这时候操作系统为连接的这一端建立一个连 接。与之对应的是主动连接:应用程序通过主动打开请求来告诉操作系统建立一个连接。

    (3)SYNRECVD:服务器端收到SYN后,状态为SYN;发送SYN ACK;

    (4) SYN_SENTY:应用程序发送SYN后,状态为SYN_SENT;

    (5)ESTABLISHED:SYNRECVD收到ACK后,状态为ESTABLISHED; SYN_SENT在收到SYN ACK,发送ACK,状态为ESTABLISHED;

    (6)CLOSE_WAIT:服务器端在收到FIN后,发送ACK,状态为CLOSE_WAIT;如果此时服务器端还有数据需要发送,那么就发送,直到数据发送完毕;此时,服务器端发送FIN,状态变为LAST_ACK;

    (7)FIN_WAIT_1:应用程序端发送FIN,准备断开TCP连接;状态从ESTABLISHED——>FIN_WAIT_1;

    (8)FIN_WAIT_2:应用程序端只收到服务器端得ACK信号,并没有收到FIN信号;说明服务器端还有数据传输,那么此时为半连接;

    (9)TIME_WAIT:有两种方式进入 该状态:1、FIN_WAIT_1进入:此时应用程序端口收到FIN+ACK(而不是像FIN_WAIT_2那样只收到ACK,说明数据已经发送完毕)并 向服务器端口发送ACK;2、FIN_WAIT_2进入:此时应用程序端口收到了FIN,然后向服务器端发送ACK;TIME_WAIT是为了实现TCP 全双工连接的可靠性关闭,用来重发可能丢失的ACK报文;需要持续2个MSL(最大报文生存时间):假设应用程序端口在进入TIME_WAIT后,2个 MSL时间内并没有收到FIN,说明应用程序最后发出的ACK已经收到了;否则,会在2个MSL内在此收到ACK报文;

    2011.9.14补充:

    关闭的状态转换比较复杂:现在设通信双方是A,B,A是主动发起关闭方

    (1)      主动发起关闭方:

    A首先主动发起FIN报文,准备关闭TCP连接,然后进入FIN_WAIT1状态;然后,如果A收到了ACK报文,就进入FIN_WAIT2状态;而如果A收到的是ACK + FIN,A进入TIME_WAIT状态。

    进入FIN_WAIT2状态,说明B还有数据发给A。过了不久之后,B发送FIN给A,然后,A发送ACK,并进入TIME_WAIT状态。当2个MSL内,没有收到FIN信号,那么TIME_WAIT就自动转化为CLOESD。(为什么TIME_WAIT状态要进过2个MSL(Maximum Segment Lifetime.)才能进入CLOSED状态?假设网路是不可靠的,最后A发出的ACK信号丢失,那么B就没有收到ACK,此时B还需要重新发一个FIN给A,这个过程最多需要2MSL,所以如果过了2MSL,没有再次收到B的FIN,那么,说明之间A发出的ACK被B收到了,所以可以可靠地关闭连接。)

    (2)      被动接收方

    B在收到A的FIN报文后,知道A准备关闭 TCP连接了(注意只是A单方面关闭,也就是说,A还可以收数据,但是不准备发数据了)。B将发送ACK给A,然后B进入CLOSED_WAIT状态。如 果此时B也有数据发送给A,那么就一直发送好了,反正A不会发数据了。此时A处于FIN_WAIT2状态。当B的数据发送完毕之后,那么B发送FIN给 A,B进入LAST_ACK状态。当收到A发过来的ACK信号后,A进入CLOSED状态。

    问题:

    1、 为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
    这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在 一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以 未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报 文和FIN报文多数情况下都是分开发送的。

    TCP的关闭连接的时候,状态很多,以刚才的例子分类:一个是主动发起方涉及的状态,一个被动发起方涉及的状态:

    主动发起方:

    FIN_WAIT1(发出FIN信号)

    FIN_WAIT2(收到ACK信号)

    TIME_WAIT(收到FIN信号)

    CLOSED(2个MSL后,没有再次收到FIN,进入)

    被动接收方:

    CLOSED_WAIT(收到FIN信号)

    LAST_ACK(发出FIN信号)

    CLOSED(收到ACK信号,如果没有,再次发出FIN信号)

    2.为什么能三次握手、四次挥手可靠地建立关闭连接?

    注意可靠。

    答:在建立连接的时候,首先需要发起方发出请求(即发出带有SYN的报文),接收方收到后必须给发起方一个回应(ACK+SYN)

    ,关键是这里还没有完毕。因为网络是不可靠地,(a)如果发起方没有收到应答方的ACK+SYN报文,显然,说明报文丢失,必须重发请求;(b)如果发起方收到ACK+SYN后,不再向接收方发出ACK信号(更正于2011.9.17)(也 就是只有两次握手,此时开始传递报文),那么从发起方的角度来看,它认为自己发出的ACK+SYN报文丢失了,接收方没有收到,所以它会再次重发。(c) 当发起方发出ACK信号后,如果没有收到接收方再次发来的ACK+SYN报文,那么说明接收方收到了自己发出的ACK报文,所以可以建立连接了。

    举个例子,如何保障可靠通信:

    现在A和B两支军队准备在10:00同时发起进攻,如何才能保证这两支军队同时呢?

    现在A发出电报,“要求在10:00同时发起进攻”;

    B收到后,显然必须向A回复“收到,可以”。

    A在收到“收到,可以”的消息后,直到B已 经收到了自己发出的消息。注意,这里还没有完,如果你站在B的角度去思考:“我发出了‘收到,可以’的消息,必须要求A给我一个回应。如果我没有收到回 应,那么就说明我的这个消息没有送到A那里去”,那么,我得再传一次“收到,可以”的消息跟A。所以,A必须再次发出“你的消息已经收到”的消息发送给 B。此时,如果A没有再次收到B发来的“收到,可以”的消息,就可以认为自己的“你的消息已经收到”送给了B。而实际上,如果B收到A发来的“你的消息”我已经收到,说明,自己此前发出的消息已经被A收到。

    这样,就可以保证A,B可靠地收到消息,保证他们在10:00准时发起进攻

转载于:https://blog.51cto.com/3639953/1657009

tcp有限状态机分析相关推荐

  1. 思科服务器远程管理,Telnet远程访问思科交换机、路由器 TCP协议分析工具

    Top 1 Telnet远程访问思科交换机.路由器 1.1 问题 在企业中为方便网络管理员对Cisco设备的配置,一般需事先在Cisco交换机及路由器上开启远程管理的服务,借助网络通过telnet方式 ...

  2. TCP、UDP、TCP三次握手与四次挥手、TCP如何保证可靠传输、TCP异常分析、拆包和粘包等

    4.OSI模型 4.1.OSI七层模型 4.2.七层模型功能 ​ 物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输,如网线:网卡标准. ​ 数据链路层:接收来自物理层的位流形式的数据 ...

  3. TCP头部分析与确认号的理解

    TCP头部分析与确认号的理解 https://www.cnblogs.com/xcywt/p/8075623.html TCP协议(1)--TCP首部 https://blog.csdn.net/la ...

  4. FTP协议中的登录 上传 下载 新建目录 删除目录 的wireshark包分析(一文看完TCP包分析,附源文件,ppt,操作视频)

    ​​​​​​​目录 一原理 二.FTP登录 三.FTP下载 四.FTP上传 五.FTP新建目录 六.FTP删除目录 一原理 前言:TCP/IP四层模型和OSI模型对照,以及FTP在模型中的位置. • ...

  5. 计算机网络大作业telnet,计算机网络大作业-TCP包分析.pdf

    计算机网络大作业-TCP包分析 2010 无84 吴文昊 2008011146 吴超 2008011137 张舸 2008011133 [计算机网络课程大作业] [实验报告] 目录 1 数据收集和初步 ...

  6. ModBus/TCP协议分析

    ModBus/TCP协议分析 一.术语 1 word = 2 byte; 1 byte = 8 bit. 校验码:校验码是由前面的数据通过某种算法得出的,用以检验该组数据的正确性.代码作为数据在向计算 ...

  7. 计算机网络实验报告 实验4 TCP协议分析

    实验4 TCP协议分析 1.实验目的 了解运输层TCP协议基本概念.报文结构 分析TCP报文头部 分析TCP连接建立过程.TCP连接释放 掌握利用tcpdump和wireshark进行tcp协议分析技 ...

  8. linux /proc/net/tcp 文件分析

    /proc/net/tcp文件提供了tcp的连接信息,是由net/ipv4/tcp_ipv4.c中的tcp4_seq_show()实现信息打印的 本文内容来源于 linux官方文档proc_net_t ...

  9. linux tcp连接计算机,计算机基础知识——linux socket套接字tcp连接分析

    2016.7.4 今天晚上对项目顶层文件(daemon)进行了分析,对其中的TCP连接进行具体的代码级分析. 1.需求分析 首先得知道我们这里为什么要用TCP连接,我们的整个测试系统是由上位机作为客户 ...

最新文章

  1. 文献记录(part59)--多任务学习
  2. HTML5表单新增元素与属性(form、formaction、formmethod、formenctype、formtarget、autofous、required、labels)
  3. 复习JavaFile类_递归_综合案例
  4. (计算机组成原理)第二章数据的表示和运算-第二节3:定点数的移位运算(算数移位、逻辑移位和循环移位)
  5. 大学 C语言程序设计第一讲,c语言程序设计1第一讲(第一章上).ppt
  6. pagehelper的使用_Spring Boot 2.x(十三):你不知道的PageHelper
  7. prototype、JQuery中跳出each循环的方法
  8. android软键盘挡住输入框问题解决方法
  9. 东财mysql作业_20春东财《MySQL数据库系统及应用》单元作业三(答案100分)
  10. GB2312 一二级中文汉字字库(带拼音)
  11. 基于matlab的电力系统潮流计算,基于matlab电力系统潮流计算
  12. oj1047: 对数表
  13. 【图像去噪】基于高斯滤波、均值滤波、中值滤波、双边滤波四种滤波实现椒盐噪声图像去噪附matlab代码
  14. 餐饮点餐外卖小程序源码(外卖订餐系统源码)
  15. WebDriver与浏览器版本对应关系
  16. 免费动态域名解析软件dnspod每步nat123体会
  17. 职场人做会议记录的法宝——讯飞智能录音笔SR101
  18. 纯CSS3实现常见多种相册效果
  19. 手风琴效果(jQuery)
  20. Java如何使用new来创建对象

热门文章

  1. Datatable/Dataset 转 JSON方法
  2. 什么原因接触接触impala的
  3. 如何改变XCode的默认设置
  4. struts2+jquery 实现ajax登陆
  5. 理解面向连接和无连接协议之间的区别
  6. 用DDA Convolution和Perlin Noise来模拟水粉画笔触
  7. 认识因特网络(小学计算机课件),小学信息技术认识因特网ppt课件.ppt
  8. mysql内置的变量,MySQL服务器模式及相关内置变量
  9. ARM(IMX6U)裸机之I.MX6ULL硬件启动方式的选择
  10. gdb pwndbg插件安装