TCP/Socket连接的状态,为什么这样设计?怎样查看状态以及分析其问题?

1.TCP连接建立、连接释放和状态图



  • 1)粗实线箭头表示对客户进程的正常变迁
    2)粗虚线箭头表示对服务器进程的正常变迁
    3)细线箭头表示异常变迁

2.TCP三报文握手为什么不是两次或者四次?

  • 1)为什么不是两次?
    主要是为了防止已失效的连接请求报文突然又传送到了B,因为产生错误。
    A发出连接请求,第一次的连接请求在某些网络节点滞留超时,于是A再重传一次连接请求。第二次重传正常建立连接、传输数据、关闭连接。然后第一次滞留的连接请求有发送到了B。
    此时如果是两次,则B向A发送确认报文段,建立连接。但是A此时并没有建立连接的请求,不会理睬B的确认。B却一直等待A发来数据。B的资源就浪费了。
  • 2)为什么不是四次或者更多?
    首先,第三次A确认报文丢失后,并不影响正常工作,AB之间的连接不会建立,也就不会浪费资源;
    其次,这里涉及到一个无限确认的问题,如果再进行多次的确认,也无法真正确认双方的报文没有丢失,而且会导致协议复杂,资源浪费;
    最后,即使第三次ACK丢失,那么Server端该TCP连接的状态为SYN_RCVD,并且依次等待3秒、6秒、12秒后重新发送SYN+ACK包,以便Client重新发送ACK包。 如果重发指定次数后,仍然未收到ACK应答,那么一段时间后,Server自动关闭这个连接。但是Client认为这个连接已经建立,如果Client端向Server写数据,Server端将以RST包响应,方能感知到Server的错误。

3.怎样利用TCP的状态诊断故障原因?

参考

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、TCP状态linux查看tcp的状态命令:1)、netstat -nat 查看TCP各个状态的数量2)、lso...
    北辰青阅读 13,184评论 0 11
  • 1、TCP为什么需要3次握手,4次断开? “三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端...
    杰伦哎呦哎呦阅读 8,855评论 0 6
  • 运输层协议概述 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是...
    srtianxia阅读 7,378评论 0 2
  • 当 app 和服务器进行通信的时候,大多数情况下,都是采用 HTTP 协议。HTTP 最初是为 web 浏览器而定...
    Flysss1219阅读 5,130评论 0 4
  • 传输层-TCP, TCP头部结构 ,TCP序列号和确认号详解 TCP主要解决下面的三个问题 1.数据的可靠传输...
    抓兔子的猫阅读 9,983评论 1 46

友情链接更多精彩内容