TCP实现原理和为什么需要三次握手?两次握手不可以?四次握手不可以?读者可以带着疑问,看一遍本篇博客的详细讲解

ok,首先解释原因之前还是要先复习一下TCP的基本知识和三次握手协议:

1、什么是TCP协议?

TCP:Transmission Control Protocol翻译过来就是传输控制协议,TCP协议是一个面向连接的、可靠的、基于字节流传输层协议

RFC 793对TCP连接的定义:

Connections:
The reliability and flow control mechanisms described above require that TCPs initialize and maintain certain status information for each data stream.
The combination of this information, including sockets, sequence numbers, and window sizes, is called a connection.

其大致意思是TCP连接是为了用于保证可靠性和流控制机制的,包括 Socket、序列号及窗口大小。

其中Socket是由IP加端口组成的,序列号是用来解决乱序问题的,而窗口大小则是用来做流量控制的。

2、TCP协议的特性

  • 面向连接:是指TCP是通过服务端和客户端进行连接的协议
  • 面向字节流:TCP服务端和客户端之间的数据通讯是通过字节流数据传输的
  • 可靠的:是指TCP服务端客户端之间的数据传输是很稳定的,即使网络很差的情况,TCP都能保证将数据传输到接收方。

ps:TCP传输的可靠性得益于TCP会记录信息的发送状态,哪些数据收到了,哪些数据没收到,TCP都是会记录的,然后哪些丢包的情况,就是发送不成功的情况,TCP会重新发包,所以TCP的可靠性就是这么保证的

3、TCP三次握手执行流程

TCP的三次握手执行过程是面试中的一个很常见的问题,因为这个问题也是计算机的一个很重要的基础,所以需要认真学习


关键字说明:

  • SYN:Synchronize Sequence Numbers,同步序列编号
  • ACK:Acknowledge Character,确认字符
  • SEQ:Sequence Number,序列号

TCP三次握手执行过程:

  • 1、 首先,服务端和客户端都是处于CLOSED状态的,然后服务端启动,监听端口,状态变为LISTEN(监听)状态
  • 2、客户端为了请求资源,发送连接,发送同步序列号SYN,此时客户端就变成了SYN-SEND状态
  • 3、服务端接收到客户端请求之后,发送SYNACK,然后服务端状态就变成SYN-RCVD状态
  • 4、客户端接收到信息之后,再次发送ACK,然后变成ESTABLISHED(已确认)状态,服务端接收到返回信息后,状态也变成ESTABLISHED(已确认)状态

4、TCP协议为什么需要三次握手?

ok,知道了TCP的三次握手的基本工作原理之后,就可以解释为什么TCP需要三次握手?为什么不设计成两次握手就可以?

  • 原因:避免重复连接
    其实在RFC 793 Transmission Control Protocol里就有指出为什么要三次握手的原因

The principle reason for the three-way handshake is to prevent old duplicate connection initiations from causing confusion.

翻译为中文大致意思是主要原因是为了防止旧的重复连接引起连接混乱问题

比如在网络环境比较复杂的情况,客户端可能会连续发送多次请求。如果只设计成两次握手的情况,服务端只能一直接收请求,然后返回请求信息,也不知道客户端是否请求成功。这些过期请求的话就会造成网络连接的混乱。

所以设计成三次握手的情况,客户端在接收到服务端SEQ+1的返回消息之后,就会知道这个连接是历史连接,所以会发送报文给服务端,告诉服务端。

所以TCP设计成三次握手的目的就是为了避免重复连接

然后可以设计成四次握手?五次握手?不可以?答案是也是可以的,不过为了节省资源,三次握手就可以符合实际情况,所以就没必要设计成四次握手、五次握手等等情况

TCP协议为什么需要三次握手?相关推荐

  1. Python常见面试题:TCP 协议中的三次握手与四次挥手相关概念详解

    今天来聊聊Python常见面试题中面试频率特别高的一个题目:TCP 协议中的三次握手与四次挥手. 涉及到的知识点有: 1.TCP.UDP 协议的区别 2.TCP 头部结构 3.三次握手与四次挥手过程详 ...

  2. 十人面试就我通过,只因我答对了这题TCP协议为什么需要三次握手

    一位5年工作经验的小伙伴面试被问到这样一道面试题,说,TCP协议为什么要设计三次握手.当时这位小伙伴被问得哑口无言.后来,他找到我,说希望做一期视频分享一下.今天,我给大家分享一下我的理解. 1 TC ...

  3. tcp协议报文和三次握手与四次挥手

    tcp协议: tcp是面向连接.可靠的进程到进程之间的协议.tcp提供全双工服务:即:数据可在同一时间双向传输. tcp报文段首部格式: 各字段含义: 源端口号:16位字段,为发送端进程对应的端口号 ...

  4. TCP协议为什么是三次握手而不是两次

    1)主要是为了防止已经失效的连接请求报文突然有传送到了服务器,从而导致不必要的错误和资源的浪费. 2)两次握手只能保证单项连接时通常的.因为TCP是一个双向传输协议,只有经过第三次握手,才能确保双向都 ...

  5. TCP协议为什么是三次握手而不是两次呢?

    原因1:主要是为了防止已经失效的连接请求报文突然又传送到了服务器,从而导致不必要的错误和资源的浪费. 如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送的第一个请求连接并且没有丢失,只是因为 ...

  6. 【转载】万字详文彻底弄懂TCP协议:从三次握手和四次挥手说起

    今日头条 腾讯技术工程 作者:morganhuang,腾讯 IEG 后台开发工程师 说到 TCP 协议,相信大家都比较熟悉了,对于 TCP 协议总能说个一二三来,但是 TCP 协议又是一个非常复杂的协 ...

  7. 【转】TCP协议中的三次握手和四次挥手(图解)

    建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资 ...

  8. 图解TCP协议中的三次握手和四次挥手

    最近在复习计算机网络,看到TCP这一章,总结一下. 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 1.jpg 先来看看如何建立连接的: 2.png 首先Client端 ...

  9. [转]TCP协议中的三次握手和四次挥手(图解)

    本文转自:http://blog.csdn.net/whuslei/article/details/6667471 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来 ...

最新文章

  1. 2015c语言成绩查询,2015年3月全国计算机二级C语言选择第1套
  2. jzoj1281-旅行【dp】
  3. 微软云之路——Windows Azure 学习
  4. 在javascript使用EL表达式注意事项
  5. 控制反转(IOC)入门
  6. 【系统架构】小型电商网站的架构(一)
  7. vray渲染器的工作流程你清楚吗?
  8. Android ndk开发C调用C++
  9. i18n 支持参数的写法
  10. 《蜗居》经典台词100句
  11. 银河麒麟Kylin_s10_sp3安装Oracle11g(FS)(官方补丁认证)(亲测有效)
  12. 内网渗透(五十三)之域控安全和跨域攻击-利用域信任密钥获取目标域控
  13. 旧电脑装什么系统最快_【老旧电脑装什么系统】老电脑装什么系统流畅_老旧电脑收藏...
  14. office2003正版验证
  15. 【NOIP2018】摆渡车
  16. 5000词学英语——DAY10
  17. webpack4 搭建 Vue 开发环境笔记
  18. 电影点评系统论文java_电影评论网站系统毕业设计(论文)论文参考.doc
  19. 艾永亮:运用超级产品战略解决这三大问题,提升企业的竞争优势
  20. 互联网高并发解决方案(2)--高并发服务限流特技

热门文章

  1. TCP/UDP 端口及部分端口的作用
  2. web前端入门到实战:JavaScript字符串转换数字
  3. C++类的交叉引用问题
  4. tekton TriggerTemplate资源
  5. 开放原子开源基金会OpenHarmony开发者大会2023圆满举办
  6. Win10 文件管理器右侧pdf 无法预览
  7. matlab从mp4文件中提取音频,怎么提取MP4视频中的音频,将MP4格式转换为MP3格式
  8. 在Delphi下使用迅雷APlayer组件进行免注册开发
  9. Camunda流程引擎 Modeler (二)
  10. docker-compose详解