连接的三次握手

  1. 客户端向服务器发送SYN请求
  2. 服务器发送ACK回应请求,并同时发送一个SYN的请求给客户端
  3. 客户端回应ACK应答

关闭的四次握手

对于关闭流程,一共有三种情况:客户端主动关闭,服务器端主动关闭,客户端和服务器端同时主动关闭。这里仅仅以客户端主动关闭为例列出下图。

  1. 客户端主动关闭,发送FIN请求
  2. 服务器回应ACK应答
  3. 服务器被动关闭,发送FIN请求
  4. 客户端回应ACK应答

对于关闭流程,服务器端和客户端是对等的地位,其它两种场景处理过程类似。需要注意的是,由于对端是是可以主动关闭的,因此在代码中需要加上被动关闭的响应流程。

为什么连接和关闭握手次数不一样

看到上述流程,可能有一个疑问:为什么连接和关闭的握手次数不一样?其实,不论是连接还是关闭,客户端和服务器端都是发送了一次请求(SYN/FIN),回应了一次应答(ACK),它们是对称的。但是,在连接的时候服务器端的请求和应答是在一次握手中同时完成的,而关闭的时候却是分两次完成的,所以就造成了连接和关闭的握手次数不对称。

现在,新问题又来了:为什么连接时复用一次握手,而关闭的时候不复用握手?这个则是因为连接和关闭的行为不是一样所造成的。

  • 在连接过程中,客户端是主动连接,服务器端是被动连接,这个顺序是确定了的,因此,可以复用第二次握手。
  • 在关闭的过程中,客户端和服务器端可能同时主动关闭,此时就不能复用第二次握手了,因此请求和应答需要单独的发送。

Tcp连接的状态迁移图

前面只考虑了理想的情况,在实际的过程中,可能还需要处理一些异常操作,如下则是一个完成的TCP连接的状态迁移图。

半打开连接和半关闭连接

如前所述,建立或关闭一个连接时需要三或四步的,在这个过程中,TCP连接则会处于一个半打开或半关闭状态。例如,前面状态图中的FIN_WAIT_1和FIN_WAIT_2就是半关闭状态。

一般来说,半连接只是一个暂停的过程。但是,在一些异常的情况的时候(如远端主机故障)的时候常常会造成半关闭连接,由于Tcp连接处于半打开或半关闭状态的时候,仍然会占用相应的端口资源,尤其对于http之类的海量服务来说,会造成大量端口被占用,会造成资源的浪费。

另外,有的程序也针对Tcp协议的这一特征来恶意进行网络攻击。例如,对于一个服务器,大量的恶意客户端建立连接后,既不发请求,也不close套接字,这种情况下服务器如何保护自己呢。因为如果听之任之的话,大量的恶意连接会耗尽服务器的可用描述符,导致服务器不能服务。就算服务器主动close,如果客户端不close的话,那么这个连接还是不能完全释放。对于服务器来说,需要增加相应的机制进行半连接的处理。

Tcp连接的七次握手浅析相关推荐

  1. 为什么TCP连接要三次握手?

    TCP建立连接为什么不是两次握手?&TCP建立连接为什么是三次握手?(这两个问题的答案是一样的) 因为网络层是不可靠的.双方在通信的时候,就算是 TCP 连接,在网络层都有可能丢包,只不过是传 ...

  2. 三次握手和四次挥手图解_详解 TCP 连接的“三次握手”与“四次挥手”

    作者 | AhuntSun 责编 | Elle TCP connection 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西: 由于TCP不存在连接的概念 ...

  3. 详解 TCP 连接的“ 三次握手 ”与“ 四次挥手 ”

    作者 |  AhuntSun 责编 | Elle TCP connection 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西: 由于TCP不存在连接的概 ...

  4. 解析TCP连接之“三次握手”和“四次挥手”

    葡萄美酒夜光杯,欲饮琵琶马上催. 醉卧沙场君莫笑,古来征战几人回?----唐 · 王翰 · <凉州词> 前言 不管是面试别人还是被别人面试,有很大的可能会被问到TCP的"三次握手 ...

  5. TCP连接,三次握手问题

    参考引用 Waking-up--github 面向信仰编程 一.为什么TCP建立连接需要三次握手 什么是连接:用于保证可靠性和流控制机制的数据,包括 Socket.序列号以及窗口大小. 首要原因:为了 ...

  6. TCP 连接的“ 三次握手 ”与“ 四次挥手 ”

    TCP 协议简介 TCP 是互联网核心协议之一,本文介绍它的基础知识. 一.TCP 协议的作用 互联网由一整套协议构成.TCP 只是其中的一层,有着自己的分工. (图片说明:TCP 是以太网协议和 I ...

  7. 详解 TCP 连接的“三次握手”与“四次挥手”

    详解 TCP 连接的"三次握手"与"四次挥手" 前言 TCP的三次握手(Three-Way Handshake) 1."三次握手"的详解 2 ...

  8. TCP连接时三次握手与是否携带数据

    1.三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包.进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常.指定自己的初 ...

  9. 网络原理 | 传输层重点协议之TCP协议(TCP连接的三次握手与四次挥手、TCP的安全机制与效率机制)

    目录 TCP协议 安全机制 确认应答机制 超时重传机制 连接管理机制 三次握手 四次挥手 流量控制机制 ​编辑拥塞控制机制 效率机制 滑动窗口机制 延迟应答机制 捎带应答机制 TCP协议 · 传输层的 ...

最新文章

  1. 用Machin公式计算圆周率的源程序
  2. linux环境下中文乱码问题
  3. HTTP协议(1)—HTTP的连接
  4. MarkDown的介绍
  5. [2020.10.25NOIP模拟赛]序列【Splay】
  6. ddddocr打包不成功解决办法
  7. Win10电脑如何批量修改文件名
  8. 【转】SQL Server联机丛书:存储过程及其创建
  9. Java static变量
  10. java安装了怎么打开_怎么安装打开java
  11. 在线编辑Word——插入公式
  12. python win32gui使用_python win32 简单操作
  13. 高阻态是0还是1_FPGA/ASIC笔试面试题集锦(1)知识点高频复现练习题
  14. 数据结构:八大常见数据结构
  15. 用java画一个小猪佩奇_python 画个小猪佩奇
  16. P2P通信中的NAT/FW穿越
  17. 视频剪辑用计算机,剪辑视频用的电脑该如何配置 真的配置越高越好?
  18. 做电商的必须知道的事,线上、线下、海外聚合支付第三方及背景牌照!
  19. Centos中搭建多台Tomcat服务器
  20. Java毕业课设项目名称

热门文章

  1. 安装TokuDB引擎
  2. hdu 2026 首字母变大写
  3. 2013年3月百度之星A题
  4. js 验证各种格式类型的正则表达式
  5. 怎么查看和获取SQL Server实例名
  6. swig封装 c语言函数到python库,python swig 调用C/C++接口
  7. 云计算机教室怎么布线,云和县实验小学计算机教室综合布线及计算机安装预算方案.doc...
  8. Win10软件:推荐两款Windows操作系统下的远程软件,值得收藏!
  9. 后端技术:Spring Boot 项目优化和 JVM 调优,真实有效。
  10. 无线网络:家庭 WiFi 的安全隐患及实用的防范建议