一、三次握手的过程

TCP需要三次握手才能建立连接,整个过程如下图所示:

假设A运行的是TCP客户端进程,而B运行的是TCP服务端进程。最开始的时候两端的TCP进程都处于ClOSED(关闭)状态。

这时候,A主动打开连接,而B被动打开连接,B在打开连接之后进入LISTEN(收听)状态。

(1)第一次握手

A的TCP客户进程向B发出建立连接请求报文段,其中SYN(同步位)=1,ACK(确认位)=0,seq(序号)=x。

TCP规定,当报文段的SYN=1且ACK=0时,表明这是一个请求建立连接的;SYN报文段(SYN=1的报文段)不能携带数据,但是要消耗掉一个序号。

在A发送完毕之后,A的TCP客户端进程进入SYN-SENT(同步已发送)状态。

(2)第二次握手

B在收到连接请求报文段之后,如果同意建立连接,则向A发送确认报文段。其中SYN=1,ACK=1,ack(确认号)=x+1,同时设置自己的初始序号seq=y。

TCP规定,当报文段的SYN=1且ACK=1时,表明这是一个同一建立连接响应报文段;这个报文段也不能携带数据,同样需要消耗掉一个序号。

在B发送完毕之后,B的TCP服务端进程进入SYN-RCVD(同步收到)状态。

(3)第三次握手

A在收到B的确认报文段之后,还需要向B给出确认报文段。其中ACK=1,seq=x+1,ack=y+1。

TCP规定,这个ACK报文段可以携带数据;如果不携带数据则不消耗序号,即A下一个数据报文段的序号仍然是seq=x+1。

在A发送完毕之后,A的TCP客户端进程进入ESTABLISHED(已建立连接)状态;B在接收到A的确认报文段之后,B的服务端进程也进入ESTABLISHED(已建立连接)状态。

以上就是所说的三次握手过程。

二、三次握手的原因

为什么A还需要发送一次确认,进行第三次握手呢?主要是为了防止已失效的请求连接报文段突然又传送到了B,因而产生错误。

原因如下:

先假如出现了一种异常情况,即A发出的第一个连接请求报文段因为在某些网络节点上滞留了。由于超时重传,于是A又向B发起请求并成功建立了连接,在传输完数据之后,AB同之间释放了连接。

而在A和B已经释放连接之后,那个在网络上滞留的报文段又达到了B。这时候,B接收到报文以为是A发起的新的一次建立连接的请求,于是就向A发出确认建立连接报文段。而A此时并没有发起建立连接的请求,于是不予理睬。但是B以为新的连接已经建立,一直等待A发送数据,于是B的许多资源就浪费了。

参考资料:

1、TCP协议中的三次握手和四次挥手(图解) http://blog.csdn.net/whuslei/article/details/6667471

2、简析TCP的三次握手与四次分手 http://www.jellythink.com/archives/705

3、TCP三次握手详解及释放连接过程  http://blog.csdn.net/oney139/article/details/8103223

TCP三次握手建立连接相关推荐

  1. TCP三次握手建立连接的过程

    来源:TCP三次握手建立连接的过程 TCP 是面向连接的协议,所以每次发出的请求都需要对方进行确认.TCP 客户端与 TCP 服务器在通信之前需要完成三次握手才能建立连接. 下面详细讲解三次握手的过程 ...

  2. TCP三次握手建立连接和四次挥手关闭连接

    TCP三次握手 是指建立TCP连接协议时,需要在客户端和服务器之间发送三个包,握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据. 第一次握手:客户端发送第一个包,其中S ...

  3. Wireshark抓包示范:TCP三次握手建立连接和四次握手断开连接

    转载请标注: 披萨大叔的博客 http://blog.csdn.net/qq_27258799/article/details/51379508 如果您觉得这篇文章对您有帮助,请点下文章最下面的赞~ ...

  4. 43.TCP三次握手建立连接的过程

    TCP 是面向连接的协议,所以每次发出的请求都需要对方进行确认.TCP 客户端与 TCP 服务器在通信之前需要完成三次握手才能建立连接. 下面详细讲解三次握手的过程. 第 1 次握手 第 1 次握手建 ...

  5. TCP三次握手建立连接四次挥手断开连接

    仅用于做笔记,转载自https://blog.csdn.net/whuslei/article/details/6667471 首先Client端发送连接请求报文,Server段接受连接后回复ACK报 ...

  6. TCP的三次握手(建立连接)和四次挥手(关闭连接)

    随心所意 博客园  :: 首页  :: 新随笔  :: 联系  :: 订阅   :: 管理 posts - 437, comments - 52, trackbacks - 0 公告 昵称:higir ...

  7. TCP的三次握手建立连接和四次握手释放连接

    1.socket中TCP的三次握手建立连接详解 我们知道tcp建立连接要进行"三次握手",即交换三个分组.大致流程如下: 客户端向服务器发送一个SYN J 服务器向客户端响应一个S ...

  8. TCP网络编程-三次握手建立连接-四次挥手断开连接

    客户端与服务器进行TCP通信连接时,要进行三次握手建立连接. 客户端与服务器进行TCP断开连接时,要进行四次挥手断开连接.

  9. HTTP 三次握手  建立连接 和  四次握手断开连接

    三次握手建立连接  第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机: 第二次握手:主机B收到请求后要确认联 ...

最新文章

  1. win 下squid的配置
  2. 成员资格、授权和安全性(一)
  3. 8.0强行转换后变成了7_【自学C#】|| 笔记 12 数据类型转换
  4. 多值参数-数字累加案例演练
  5. LINUX添加一块网卡地址配置及问题
  6. DOS批处理不支持将UNC 路径作为当前目录的巧妙解决方案
  7. opencv-contrib-Python编译module ‘cv2.cv2‘ has no attribute ‘xfeatures2d‘
  8. WinAPI: Rectangle - 绘制矩形
  9. 使用Homebrew安装Git与Github在idea中的配置
  10. QGC使用国内天地图卫星图并添加注记图层
  11. 2021年中国纯碱行业发展现状分析,下游需求快速增长,供需关系紧张导致价格走高「图」
  12. CentOS7创建桌面快捷方式
  13. golang隐藏window系统下自身cmd窗口
  14. can't find compiler executable in your configured search path's for GUN GCC Complier的应对办法
  15. via浏览器皮肤html,Via浏览器 v4.2.1 身材小巧功能全面
  16. 好程序员大数据培训分享大数据概述
  17. 正则表达式匹配连续相同字符,如...aaa..bbb...11111...2222...
  18. (AAAI-2019)STA:用于大规模基于视频的行人重识别的时空注意力
  19. 舒舍:学生狗租房详解
  20. GEE关于像元大小或分辨率的一些问题

热门文章

  1. 网页版消消乐快速实现,无代码吗iVX 真那么简单?
  2. 最大尺寸分辨率_未来就在眼前——视涯科技推出最高分辨率硅基OLED显示屏幕...
  3. xshell通过隧道连接_DNS安全之隧道攻击
  4. 计算机导论上机模拟,计算机导论模拟考试题6份完整版.doc
  5. 一颗钉子能承受多大的重量?
  6. 理工男都能有多痴情?
  7. 史上最难逻辑题!据说99.9%的人都做不出来……
  8. 一个常见的物理现象,直今还是未解之谜!
  9. 12星座程序员写代码
  10. wdcp服务器/虚拟主机管理系统,wdcp服务器/虚拟主机管理系统1.1发布(最后更新20110423)...