三次握手

TCP建立连接
TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而建立连接是通过三次握手而进行的。

面试回答
TCP/IP协议是传输层一个面向的连接的安全的协议,三次握手的协议是为了保证能够建立一个安全的传输环境。

第一次握手,是由客户端发起的,客户端会向服务端发送一个报文,在报文中,SYN位标志位置1,同时生成一个随机的32 位序列号seq,当服务端收到这个请求后,就知道,客户端想跟我建立一个连接,于是服务端就会向客户端回复一个确认消息报文,报文中SYN位标志位置1,同时生成一个新的序列号seq,不仅如此,确认标志位ACK置1,确认序号ack=客户端的序列号seq+1。

此时两次握手过后,其实客户端已经知道了,我既能给服务端发送消息,还能够接收到服务端发送给我的消息,但服务端只是接收到了客户端的消息,但不能确认,自己的消息能不能被客户端接收到,故还需要第三次握手。

第三次握手,是客户端向服务端的一个确认消息报文,告诉服务端,我已经接收到了消息,同时SYN标志位置1,确认序号ack=服务器序列号+1.

至此,三次握手就已经建立完毕了,客户端与服务端就可以正式进行数据传输了。

三个方面分析三次握手的原因

  • 三次握手才可以阻止历史重复连接的初始化(主要原因)

三次握手的首要原因是为了防止旧的重复连接初始化造成混乱

  • 三次握手才可以同步双方的初始序列号

两次握手只保证了一方的初始序列号能被对方成功接收,没办法保证双方的初始序列号都能被确认接收

  • 三次握手才可以避免资源浪费

不使用[两次握手]和[四次握手]的原因:

  • 「两次握手」:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号;
  • 「四次握手」:三次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数。

总结:
TCP 建立连接时,通过三次握手能防止历史连接的建立,能减少双方不必要的资源开销,能帮助双方同步初始化序列号。序列号能够保证数据包不重复、不丢弃和按序传输。

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

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

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

  2. mobaxterm为什么无法连接_为什么 TCP 建立连接需要三次握手

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

  3. 为什么TCP建立连接需要三次握手

    为什么TCP建立连接需要三次握手 很简单,因为TCP的目的是相对高效地建立可靠的连接. 虽然说2次握手,请求方就已经能够确认双方路径已经没有问题了.但是接受方这边接收到的信息却仅仅是,你发起了建立连接 ...

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

    TCP建立连接的三次握手 TCP头的构成 TCP建立连接的过程就是三次握手,三次握手成功完成,TCP连接就建立了.在三次握手之前先看一下TCP报文中的TCP头由哪些部分组成. 上图中有几个字段需要重点 ...

  5. TCP建立链接的三次握手

    TCP建立链接的三次握手   TCP是面向链接的协议,该协议主要是为应用层服务的,比如说FTP,HTTP等. 而TCP建立链接使用了三次握手. TCP报文段的头部格式如下: www.2cto.com ...

  6. TCP建立连接三次握手及其断开过程

    TCP是一个面向连接的服务,也就是在数据通信之前,发送端需要建立连接.等数据发送之后,就要断开连接. 1. TCP建立连接 TCP建立连接需要三次握手.建立的过程如下: 2. TCP断开连接 转载于: ...

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

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

  8. 唤醒手腕 TCP/IP 协议进行三次握手、四次挥手建立连接详细介绍

    访问域名的 IP 地址,User-Agent(一般是指浏览器)会以一个随机端口(1024 < 端口 < 65535)向服务器的 WEB 程序(常用的有 Apache(httpd), ngi ...

  9. TCP的连接和释放连接(三次握手和四次挥手的过程)

    参考文章: javascript - 看图理解TCP的三次握手和四次挥手_个人文章 - SegmentFault 思否 TCP'三次握手'和'四次挥手'(通俗易懂)_大黄的Java笔记的博客-CSDN ...

最新文章

  1. C# 单精度转换双精度丢失的问题
  2. Spring事务管理(详解+实例)
  3. Python之pypmml:pypmml的简介、安装、使用方法之详细攻略
  4. 以个人身份加入.NET基金会
  5. linux访问windows共享目录开机自动挂载
  6. 【Vegas原创】重建Exchange 2007 OWA的虚拟目录
  7. java 方法详解_Java方法详解
  8. 指针01:指针的定义与使用
  9. 【传统编码技术对比】汉明码,RS,卷积码三种编码技术的对比
  10. php mysql敏感词_用PHP如何实现敏感词过滤
  11. 工字型钢弹性截面模量计算公式_Q235工字钢计算公式
  12. 手机app的性能测试工具——GT、、Emmagee
  13. 图解千兆网线水晶头接法(存档备用)
  14. [多媒体] 10大开源视频剪辑软件
  15. 快速将PDF转换为图片:使用在线转换器的步骤
  16. html [JS]随机密码生成[运维工具]
  17. 江苏大学的计算机,毛启容-江苏大学计算机科学与通信工程学院
  18. 【贪心】(雾)小Y的炮
  19. 怎么让照片变年轻_如何用ps把人变年轻水嫩
  20. 给图片加水印--手把手教新码农如何把技术变成产品

热门文章

  1. centos 7 虚拟机安装k8s
  2. Lambda何晓阳:白皮书不能改是愚蠢的,区块链在探索中前进
  3. 利用路由器外网访问tomcat
  4. Java安全(十五) 一些链子之C3P0
  5. Spring Data JPA是什么?以及简单的使用(联表查询)
  6. Python的socket网络编程(一)
  7. hello world、hello 计科人
  8. java开发的框架有哪些_java开发中常用框架有哪些
  9. DESeq2筛选差异OTU及绘制火山图
  10. 企业网站建设的必要性