zoukankan      html  css  js  c++  java
  • TCP三次握手/四次挥手过程详解

    TCP协议提供可靠的连接服务,采用三次握手建立一个连接。以下步骤概述了通常情况下客户端计算机请求与服务器计算机简历TCP的过程:

      TCP三次握手图解

      TCP图解3次握手

      TCP图解3次握手

    • 1. 客户端向服务器发送一个SYN置位的TCP报文,其中包含连接的初始序列号x和一个窗口大小(表示客户端上用来存储从服务器发送来的传入段的缓冲区的大小)。
    • 2. 服务器收到客户端发送过来的SYN报文后,向客户端发送一个SYN和ACK都置位的TCP报文,其中包含它选择的初始序列号y、对客户端的序列号的确认x+1和一个窗口大小(表示服务器上用来存储从客户端发送来的传入段的缓冲区的大小)。
    • 3. 客户端接收到服务器端返回的SYN+ACK报文后,向服务器端返回一个确认号y+1ACK报文,一个标准的TCP连接完成。

    TCP关闭连接,四次握手图解

    TCP断开连接-四次握手图解

    TCP断开连接-四次握手图解

      几点注意事项:
    • 默认情况下,当调用close( or closesocket)时,如果发送缓冲中还有数据,TCP会继续把数据发送完。
    • 发送了FIN只是表示这端不能继续发送数据(应用层不能再调用send发送),但是还可以接收数据。
    • 被动关闭端可能会将ACK和FIN合到一起发送,所以这也算不上严格的四次握手—四个报文段。
    • 应用层如何知道对端关闭?通常,在最简单的阻塞模型中,当你调用recv时,如果返回0,则表示对端
      关闭。在这个时候通常的做法就是也调用close,那么TCP层就发送FIN,继续完成四次握手。
    • 关闭TCP连接的最后微妙之处在于对Time-Wait状态的需要。TCP规范要求在终止连接时,两端的关闭握手都完成后,至少要有一个套接字在Time-Wait状态保持一段时间。这个要求的提出是由于消息在网络中传输时可能延迟。如果在连接两端都完成了关闭握手后,它们都移除了其底层数据结构,而此时在同样一对套接字地址之间又立即建立了新的连接,那么前一个连接在网络上传输时延迟的消息就可能在新连接建立后到达。由于其包含了相同的源地址和目的地址,旧消息就会被错误地认为是属于新连接的,其包含的数据就可能被错误地分配到应用程序中。
  • 相关阅读:
    hdwiki 学习笔记 01
    hdwiki model目录下的函数类
    hdwiki 的模板和标签
    Linux下CPU内存占用过高思路分析
    Linux下后台运行jar包
    Arrays.asList集合类的集合转换方法的坑!!!(不支持的操作异常:UnsupportedOperationException)
    Linux下定时备份mysql数据库
    解决Navicat远程连接数据库出现错误:1130-host ... is not allowed to connect to this MySql server
    深入JVM学习
    JUC的等待唤醒机制(wait/notify await/singal)之生产者和消费者问题
  • 原文地址:https://www.cnblogs.com/dartagnan/p/2199286.html
Copyright © 2011-2022 走看看