zoukankan      html  css  js  c++  java
  • tcp的三次握手及四次挥手(连接与中断流程)

    连接的三次握手:
    1握、client向server发送连接请求,发送的报文是:syn=1,seq number=生成的随机数x 。  这时client的状态是SYN_SEND
    2握、server从syn=1知道client要进行连接。 然后向客户端回复信息,即ack number=x+1(x是client向server发送的seq number),syn=1,ack=1,seq=随机数y ,同时在server中为client分配系统资源。  这时server的状态是SYN_RECV
    3握、client收到请求后检查ack number是否正常。(即是不是等于seq number+),同时检查ack是否为1.  如果都正确 ,client会再向server 发送ack number=y+1,ack=1。 server收到后确认seq与ack ,正确则连接建立成功。   并分配client资源。  最后client与server的状态皆是ESTABLISHED
     
    中断的四次挥手:
    中断的发起端可以是client,也可以是server
    假设是client发起中断请求
    1、client向server发送FIN报文, 告知server我要中断连接。 这时client的状态是FIN_WART_1
    2、server收到FIN后,如果没有数据发送完毕,那么向client发送ACK。  代表我收到你的中断申请,但是我还有数据发送给你。  这时client状态为FIN_WAIT_2。  server的状态为CLOSE_WAIT
    3、当server已经没有数据往client发送时,这时代表可以中断连接了,那么向client发送FIN,意思是说,OK啦,我这边数据已经给你都发送完毕了,已经准备好中断边接了。  这时server的状态是LAST_ACK
    4、client接收到server的FIN后,向server回复ack,这时状态变为TIME_WAIT。 并不会马上关闭连接。 而是在30秒(这个是可配置的)后关闭连接(原因是server是收到ack后才会关闭连接,但是可能因为网络的原因server收到ack出现了延迟,所以就等30秒后再关闭client的连接)
    5、server收到ack后,关闭连接。状态变为CLOSED。
    6、过30秒(可配置)后,client关闭连接。 状态变为CLOSED。
     
     
    有时间时,应该自己再补一张流程。 这样记忆起来就更加清晰了。
     
    参考:
  • 相关阅读:
    PHP 获取js中变量的方法
    Golang文件操作整理
    Golang的文件处理方式-常见的读写
    golang中文件以及文件夹路径相关操作
    服务器常用的状态码及其对应的含义
    left join on 和where条件的放置
    golang 文件导入数据追加sheet
    使用io/ioutil进行读写文件
    Go语言编程中字符串切割方法小结
    Golang学习
  • 原文地址:https://www.cnblogs.com/hark0623/p/4326083.html
Copyright © 2011-2022 走看看