目录

一、TCP相关概念:

二、TCP连接建立过程中要解决的问题:

三、TCP三次握手的过程:

四、可以两报文握手建立连接

五、总结:


一、TCP相关概念:

1.TCP是面向连接的协议。

2.TCP是基于传输连接(不是物理连接,是逻辑上的连接)来传送TCP报文段。

TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。

3.TCP运输链接有三个阶段:

(1)建立连接(三次握手) 。

(2)数据传送。

(3)释放连接(四次挥手)。

4.TCP的运输连接管理就是使运输连接的建立和释放都能正常地进行。

二、TCP连接建立过程中要解决的问题:

1.要使TCP双方能够确知对方的存在。

2.要允许TCP双方协商一些参数(如:最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等);

3.能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。

三、TCP三次握手的过程:

这里有两台主机,他们要基于TCP进行通信,主机A中的某个应用进程主动发起连接建立,建立称为TCP客户。而主机B中 被动等待的应用进程称为TCP服务器。,我们将TCP建立连接的过程比喻为握手,需要在TCP客户和服务器之间交换三个TCP报文段。


最初两端的TCP进程都处于关闭状态,一开始主机B的服务器进程首先创建传输控制块,用来存储TCP连接中的一些重要信息:例如TCP连接表、指向发送和接受缓存的指针、指向重传队列的指针等。之后就准备接受TCP客户进程的连接请求,此时TCP服务器进程就要进入监听状态,等待TCP客户进程的连接请求,TCP服务器进程是被动等待来自TCP客户进程的连接请求,而不是主动发送,因此成为被动打开连接


主机A中的TCP客户进程也是首先创建传输块,然后再打算建立TCP连接时向主机B发送TCP连接请求报文段并进入同步已发送状态,TCP连接请求报文段首部中的同步位SYN被设置为1,表明这是一个TCP连接请求报文段,seq字段被设置为x作为TCP客户进程可选择的初始序号。(TCP规定SYN被设置为1的报文段不能写携带数据,但要消耗掉一个序号)。


由于TCP连接,建立是由TCP客户进程主动发起的,因此称为主动打开连接。


主机B中的服务器进程收到TCP链接请求报文段后如果同意建立连接,向主机A的TCP客户进程发送TCP连接请求确认报文段,并进入同步已接收状态。TCP确认请求报文段中的首部位SYN = 1确认位ACK=1表明这是一个TCP连接请求确认报文段。seq(序号)字段被设置为y作为TCP服务器进程所选的初始序号, 确认字段ack被设置为x+1(这是对TCP连接请求所选序号字段(seq=x)的确认)。



主机A中的TCP客户端发送一个普通的TCP确认报文段,并进入连接已建立状态,TCP确认报文段的ACK=1(表明这是一个普通的TCP确认报文段),序号seq字段被设置为x+1(由于第一个发送的序号为x且不携带数据,第二个报文段的序号为x+1),确认号ack字段被设置为y+1 (这是对TCP服务器进程序号的确认)。


主机B的服务器进程收到改TCP报文段后,也进入连接已建立状态,现在TCP双方都进入连接已建立状态,他们可以进行数据的传输。


四、可以两报文握手建立连接吗?

不可以。

原因:

主机A 中的TCP客户进程发出一个TCP连接请求报文段,但该报文段在某些网络节点滞留了,这必然会造成该报文段的超时重传。


假设超时重传的TCP报文段到达TCP服务器端TCP服务器端给TCP客户端发送一个TCP连接请求确认报文段,并进入连接已建立状态,因为我们此时是两次握手所以TCP服务器端直接进入TCP连接请求已建立状态。


TCP客户进程收到TCP服务器端的TCP连接请求确认报文段后,也处于连接已建立状态,不会给TCP服务器端发送TCP确认报文段。他们之间已建立连接状态可以传输数据,之后通过四报文挥手释放连接。


他们双方都进入关闭状态,之后TCP服务器端进入监听状态, 准备接受客户进程的连接请求,而TCP客户进程将一直处于关闭状态(除非应用进程通知它需要进行新的进程连接)。


而此时失效的应用进程到达了主机B,TCP服务器进程会误认为这是TCP客户端重新发送的请求,于是给TCP客户端请求发送TCP连接请求报文段(并处于连接已建立状态 )。该主机的TCP连接请求报文段到达主机A,由于主机A处于关闭状态并没有发起TCP连接,因此不理睬该报文段,依然处于关闭状态。而此时主机B的资源就会浪费。


五、TCP三次握手总结:

1、第一次握手:TCP客户端和TCP服务器端都处于关闭状态。客户端向服务器端发送一个TCP请求连接,将同步位SYN设置为1,随机产生一个seq(序号)值为x,并将此报文段发送给客户端,自己处于同步位已发送状态。

2、第二次握手:TCP服务器端接受TCP客户端发送的请求连接,并发送一个SYN为1,ACK为1,seq(序号)为y,ack为x+1的TCP请求确认,此时自己处于同步已接收状态。

3、第三次握手:主机A中的TCP客户端发送一个普通的TCP确认报文段,并进入连接已建立状态,TCP确认报文段的ACK=1(表明这是一个普通的TCP确认报文段),序号seq字段被设置为x+1(由于第一个发送的序号为x且不携带数据,第二个报文段的序号为x+1),确认号ack字段被设置为y+1 (这是对TCP服务器进程序号的确认)。

注:视频资料参考《湖科大教书匠》。

TCP传输连接--建立连接阶段(TCP三次握手)相关推荐

  1. tcp要点学习-建立连接断开连接

    原文:http://www.cppblog.com/kevinlynx/archive/2008/05/14/49825.html 关于TCP的连接建立,断开的讲解,理论的核心内容基本提及,比较通俗. ...

  2. nodejs TCP server和TCP client如何建立连接

    首先客户端和服务器端通信得需要一个消息结构,我用如下的构造函数创建一个消息结构,包含消息正文和消息类型(method): function message(_data,_method = '') {_ ...

  3. 2021-07-27 详解TCP连接建立和释放的过程(三报文握手和四次挥手)

  4. TCP连接的建立和释放过程详解(三次握手、四次挥手)

    1. TCP是基于连接的协议 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议.所谓面向连接,是指通信双方在进行通 ...

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

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

  6. startupinfo为什么需要初始化_为什么 TCP 建立连接要三次握手

    为什么这么设计(Why's THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点.对具体实现造成的影响 ...

  7. 【计算机网络】传输层 : TCP 连接管理 ( TCP 连接建立 | 三次握手 | TCP 连接释放 | 四次挥手 )

    文章目录 一.TCP 连接管理 二.TCP 连接建立 三.TCP 连接建立 相关报文段 字段 四.SYN 洪泛攻击 五.TCP 连接释放 一.TCP 连接管理 TCP 传输数据过程 : 建立连接 -& ...

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

    TCP建立连接三次握手和释放连接四次握手     [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/52535294 在谈及T ...

  9. tcp建立连接为什么需要三次握手

    这是一个看似很"简单"的问题,但貌似并没有一个官方统一的答案.搜索了相关的资料,列举出一些答案. 以下部分转载自:tcp建立连接为什么需要三次握手 在<计算机网络>一书 ...

最新文章

  1. 网络营销——网络营销专员浅析如何合理设置网站关键词密度
  2. RESTful Web 服务 - 介绍
  3. ionic4 手机启动页进入首页慢问题修改
  4. jMeter CSV Data set config 的 sharing mode 和 Thread group loop 配合使用
  5. 整型数组中三个数的最大乘积
  6. java中怎么让原有的集合反转_Java如何反转集合中的元素?
  7. 用cmd来向mysql导入sql文件
  8. C# 序列化之二进制
  9. 毕业生推荐表计算机水平新国二,实用信息 | 2018届毕业指南:毕业生推荐表与三方协议...
  10. PHP基础--PDO的常用操作
  11. python 对象_python中对象可不可以
  12. oracle脱敏脚本
  13. 模拟器什么的都过时了!这样玩吃鸡才能真正的高清无延迟
  14. HTML+JS+websocket 实现联机“游戏王”对战(一)
  15. python语音转文字库_有没有语音转文字的APP?
  16. 前端VUE3+Vite -- 框架搭建
  17. 2020年全球救市两种方法的分析,从世界高度来理解富人思维
  18. Go实战--Design Patterns in Golang 之单利模式(Singleton)
  19. zblog php getlist,zblog使用getlist方法调用置顶文章
  20. 程序员年薪20万、30万、40万都是如何生活的?

热门文章

  1. 2018年单招考试计算机试题答案,2018年单招语文模拟试题及答案.doc
  2. 计算机工程与设计 北大核心,计算机工程与设计 统计源期刊北大核心期刊
  3. SourceInsight使用教程(持续更新)
  4. 互动百科与百度的百科大战对网络营销的影响
  5. leaflet清除图层
  6. 20172303 20172322 2017-2018-2 暑假作业 结对编程项目-舒尔特方格(及获小黄衫感想)...
  7. python求矩阵的谱半径
  8. 倍投计算机器在线,2021看图开特马50研究计算倍投【欢迎你】
  9. 520c语言程序表白,C语言实现520表白代码 祝你表白成功!
  10. FileNotFoundException 问题的解决