TCP建立连接的三次握手过程
TCP是因特网中的传输层协议,使用三次握手协议建立连接,下面是TCP建立连接的全过程。
上图画出了TCP建立连接的过程。假定主机A运行的是TCP客户程序,B运行的是TCP服务器程序。最初两端的TCP进程都处于CLOSED状态。图中在主机下面的是TCP进程所处的状态。A是主动打开连接,B是被动打开连接。
B的TCP服务器进程先创建传输控制模块TCB,准备接受客户进程的连接请求,然后服务器进程就处于LISTEN(监听)状态,等待客户的连接请求
首先A的TCP客户进程向B发出连接请求报文段,这时首部中的同步位SYN=1,同时选择一个初始序号seq=x。TCP规定,SYN报文段(即SYN=1的报文段)不能携带数据,但要消耗掉一个序号。这时,A的客户进程就进入SYN-SENT(同步已发送)状态。
B收到连接请求报文段后,向A发送确认。在确认报文段中把SYN和ACK位都置为1,确认号是ack=x+1,同时也为自己选择一个初始序号seq=y。请注意,这个报文段也不能携带数据,但同样要消耗掉一个序号。这时B的TCP服务器进程就进入SYN-RCVD(同步已收到)状态。
A的TCP客户进程收到B的确认后,还要向B给出确认。确认报文段的ACK置为1,确认号ack=y+1,而自己的序号seq=x+1。这时,TCP连接已经建立,A进入ESTABLISHED(已建立连接)状态,
当B收到A的确认后,也会进入ESTABLISHED状态。
以上给出的连接建立过程就是常说的TCP三次握手。
为什么A还要发送一次确认呢?这主要是为了防止已失效的连接请求报文段突然又传送到了B,因而产生错误。
假定A发出的某一个连接请求报文段在传输的过程中并没有丢失,而是在某个网络节点长时间滞留了,以致延误到连接释放以后的某个时间才到达B。本来这是一个早已失效的报文段。但B收到此失效的连接请求报文段后,就误以为A又发了一次新的连接请求,于是向A发出确认报文段,同意建立连接。假如不采用三次握手,那么只要B发出确认,新的连接就建立了。
由于A并未发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据。但B却以为新的运输连接已经建立了,并一直等待A发来数据,因此白白浪费了许多资源。
采用TCP三次握手的方法可以防止上述现象发生。例如在刚才的情况下,由于A不会向B的确认发出确认,B由于收不到确认,就知道A并没有要求建立连接。
TCP建立连接的三次握手过程相关推荐
- startupinfo为什么需要初始化_为什么 TCP 建立连接要三次握手
为什么这么设计(Why's THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点.对具体实现造成的影响 ...
- mobaxterm为什么无法连接_为什么 TCP 建立连接需要三次握手
为什么这么设计(Why's THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点.对具体实现造成的影响 ...
- TCP建立连接的三次握手
TCP建立连接的三次握手 TCP头的构成 TCP建立连接的过程就是三次握手,三次握手成功完成,TCP连接就建立了.在三次握手之前先看一下TCP报文中的TCP头由哪些部分组成. 上图中有几个字段需要重点 ...
- 为什么TCP建立连接需要三次握手
为什么TCP建立连接需要三次握手 很简单,因为TCP的目的是相对高效地建立可靠的连接. 虽然说2次握手,请求方就已经能够确认双方路径已经没有问题了.但是接受方这边接收到的信息却仅仅是,你发起了建立连接 ...
- TCP建立连接『三次握手』
三次握手 TCP建立连接 TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而建立连接是通过三次握手而进行的. 面试回答: TCP/IP协议是传输层一个面向的连接的安全的协议,三次握手的协 ...
- TCP建立链接的三次握手
TCP建立链接的三次握手 TCP是面向链接的协议,该协议主要是为应用层服务的,比如说FTP,HTTP等. 而TCP建立链接使用了三次握手. TCP报文段的头部格式如下: www.2cto.com ...
- TCP建立连接三次握手及其断开过程
TCP是一个面向连接的服务,也就是在数据通信之前,发送端需要建立连接.等数据发送之后,就要断开连接. 1. TCP建立连接 TCP建立连接需要三次握手.建立的过程如下: 2. TCP断开连接 转载于: ...
- TCP连接,三次握手问题
参考引用 Waking-up--github 面向信仰编程 一.为什么TCP建立连接需要三次握手 什么是连接:用于保证可靠性和流控制机制的数据,包括 Socket.序列号以及窗口大小. 首要原因:为了 ...
- Wireshark抓包示范:TCP三次握手建立连接和四次握手断开连接
转载请标注: 披萨大叔的博客 http://blog.csdn.net/qq_27258799/article/details/51379508 如果您觉得这篇文章对您有帮助,请点下文章最下面的赞~ ...
- TCP的连接和释放连接(三次握手和四次挥手的过程)
参考文章: javascript - 看图理解TCP的三次握手和四次挥手_个人文章 - SegmentFault 思否 TCP'三次握手'和'四次挥手'(通俗易懂)_大黄的Java笔记的博客-CSDN ...
最新文章
- Nhibernate3循序渐进(三): 一对多映射和级联保存
- Oracle 升级10.2.0.5.4 OPatch 报错Patch 12419392 Optional component(s) missing 解决方法
- golang 修改nginx配置文件_「系统架构」Nginx调优,不可错过的几点
- P4146 序列终结者 平衡树 + lazy维护
- python页面驱动mxd_如何利用python 批量导出mxd至jpg
- STM8单片机低功耗---活跃停机(Active Halt)模式实现-1
- LAMP+LNMP视频教程
- Android Multimedia框架总结(二十二)MediaCodec中C++中创建到start过程及状态变换
- 苹果分屏软件_Mac软件推荐
- displaytag 使用
- 如何彻底卸载3dmax2020_完全卸载3DMAX的方法
- 很酸-2021年全球程序员收入报告出炉
- Java实习生常规技术面试题每日十题Java基础(二)
- js与php与mysql_PHP、MySQL和JavaScript入门经典(第6版)
- LaTeX 多层列举 条目 编号
- 机器学习的数学基础1:集合、关系、元组
- 数字藏品在国内现状是怎样的?
- 老路《用得上的商学课》学习笔记(21-25课)
- 操作系统和应用程序漏洞评估
- HCIP/HCIE RoutingSwitching / Datacom备考宝典系列(一)OSPF知识点全面总结
热门文章
- geemap_01_安装geemap
- error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用
- ArcGIS修改矢量边界(土地利用图图斑)
- python爬虫总结之xpath元素定位
- nodejs实现redis ORM
- KMP算法 学习笔记
- LinearLayout removeAllViews后再 addView页面不展示
- nsis打包php项目加环境,NSIS制作安装文件全攻略(一) zz
- 在java中什么是所有类的父类_java中object是所有类的父类吗
- 获取oracle日志文件,ORACLE关于日志文件基本操作