浅谈“三次握手与四次挥手”

  之前在张神的QQ群里偶尔间聊到了关于这个的问题,我这里写一下我所认知的三次握手&四次挥手,若有错误之处,请路过的大佬们指正。

  首先简单的科普一下什么是三次握手,什么是四次挥手。

1、三次握手:

  C-->S:[SYN]   在么                                                                syn:synchronization(同步)

  S-->C:[SYN,ACK]   在                                                           ack:acknowledgement(确认:告知已收到)

  C-->S:[ACK]   知道了                                                             fin:finish(结束)

2、四次挥手:

  C-->S:[FIN]    我要关闭连接了

  S-->C:[ACK]   知道了,等我先把数据发完

  S-->C:[FIN]    我也关闭连接了

  C-->S:[ACK]   好的,知道了

  首先明确一点,TCP协议是一种可靠的传输层协议,而http协议是属于应用层的协议。所谓的三次握手和四次挥手是针对TCP连接来说的。建立TCP连接时,会发生三次握手,用来保障通讯双方有通信的基础。关闭TCP连接时会发生四次挥手,用来保障通讯双方可以安全的释放TCP通信的数据。

  那么为什么时常听到有人说“为什么http请求需要三次握手&四次挥手”?

  这句话本身是有点毛病的,就像上面说的,三次握手与四次挥手针对的是TCP连接,http协议本身是不会去关注这一块的,也不会去处理任何的[SYN]、[ACK]、[FIN]等。仅仅是因为现有的http协议用的是TCP作为传输层(http协议没有规定具体使用哪个传输层协议),我去百度翻了一波HTTP 1.1 RFC 261,找了段话,见下图

所以如果传输层使用的不是TCP的话,那就不一定是有三次握手之类的。

--------------------------------------分隔线---------------------------------------

  PS:五一放假,开发们都跑了,Bug都没人改,点个外卖继续写点什么吧。

  https,是以安全为目标的HTTP通道,简单的来说就是http的安全版。可以这样理解https=http+SSL(TLS)。那么https是怎么来保证安全的呢,说一个故事吧:

1、A和B通信,通过信鸽传送。

  这种情况下,第三者C可以截获信鸽得知AB之间的通信内容。

2、为了防止这种情况,AB约定用一种加密方式进行信息的传输。(对称加密)

  但是这种情况下,AB见不到面,约定的这个加密方式如何通知对方呢?

3、A先把信鸽给B,然后B收到信鸽寄回一个开着的盒子,钥匙在B自己手中。然后A把信放进盒子,锁上寄送给B。B收到之后用钥匙打开阅读信的内容。(术语中,盒子称之为公钥,打开盒子的钥匙称之为私钥)(非对称加密)

  这种情况,又会有一个新的问题,如何确定这个盒子是B给的?

4、B可以在盒子上签名做个标记

  这种情况,C可以通过模仿B的签名来更改盒子而获得通信的内容。

5、找个会给任何人签名且所有人都信任他只会对确定的合法的人签名标记盒子。即这个人只有真正确定要签名的人是B,才会在盒子上签上属于B的标记(术语中,这个人称之为认证机构)

  故事说完了,说的不是很详细。有兴趣的看客,可以专门去看看对应的书籍,这里只是做一个简单的科普说明。上面用颜色标记了两个名词,这里简单解释下:

1)对称加密:同一个密钥可以同时用作信息的加密和解密,也称之为单密钥加密。简单的来说就是你知道加密方式,那么你也就知道了解密方式。

2)非对称加密:区别于对称加密,需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(简称公钥)和私有密钥(简称私钥)。

  非对称加密和对称加密相比,安全性更好(毕竟不需要像对称加密那样在通信之前先同步秘钥)。但是它的加解密消耗时间长,速度慢,性能不佳,只适合少量数据的加密。所以实际应用场景中,一般用非对称加密来传输对称加密的密钥。

  以上,就是这篇博客的全部了。要去点点点了......

___山水一程,三生有幸

原文地址:https://www.cnblogs.com/zichuan/p/8966648.html

时间: 2024-10-13 01:26:21

浅谈“三次握手与四次挥手”的相关文章

浅谈浏览器解析 URL+DNS 域名解析+TCP 三次握手与四次挥手+浏览器渲染页面

(1)浏览器解析 URL 为了能让我们的知识层面看起来更有深度,我们应该考虑下面两个问题了: 从浏览器输入 URL 到渲染成功的过程中,究竟发生了什么? 浏览器渲染过程中,发生了什么,是不是也有重绘与回流? OK,兴致来了,我们就先从 浏览器解析 URL 看起,先来看看当用户输入 URL,到浏览器呈现给用户页面,经历了以下过程: 版本 A: 用户输入 URL 地址. 对 URL 地址进行 DNS 域名解析. 建立 TCP 连接(三次握手). 浏览器发起 HTTP 请求报文. 服务器返回 HTTP

让你彻底明白TCP三次握手,四次挥手

今天我们来讲一下TCP的三次握手和四次挥手,先来张思维导图.  一.TCP是什么 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议. 我们知道了上述了解到了TCP的定义,通俗一点讲,TCP就是一个双方通信的一个规范标准(协议). 我们在学习TCP握手的过程之前,首先必须要了解TCP报文头部的一些标识信息.因为TCP握手的过程中,会使用到这些报文信息,如果没有掌握这些信息,在学习握手的过程中,整个人都处于懵逼状态

硬不硬你说了算!35 张图解被问千百遍的 TCP 三次握手和四次挥手面试题

每日一句英语学习,每天进步一点点: 前言 不管面试 Java .C/C++.Python 等开发岗位, TCP 的知识点可以说是的必问的了. 任 TCP 虐我千百遍,我仍待 TCP 如初恋. 遥想小林当年校招时常因 TCP 面试题被刷,真是又爱又狠…. 过去不会没关系,今天就让我们来消除这份恐惧,微笑着勇敢的面对它吧! 所以小林整理了关于 TCP 三次握手和四次挥手的面试题型,跟大家一起探讨探讨. TCP 基本认识 TCP 连接建立 TCP 连接断开 Socket 编程 PS:本次文章不涉及 T

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

建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. [更新于2017.01.04 ]该部分内容配图有误,请大家见谅,正确的配图如下,错误配图也不删了,大家可以比较下,对比理解效果更好.这么久才来更新,抱歉!! 错误配图如下: 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了. 那如何断开连接呢?

TCP三次握手和四次挥手

TCP三次握手和四次挥手 在了解TCP三次握手和四次挥手之前我们先来了解一下TCP的标志位,这样有助于我们理解TCP三次握手和四次挥手的过程 TCP标志位: URG:表示TCP包的紧急指针域有效,用来保证TCP连接不被中断 ACK:表示确认序号有效 PSH:表示Push操作; 所谓Push操作就是指在数据包到达接收端以后, 立即传送给应用程序,不在缓冲区排队 RST:表示连接复位请求; 用来复位那些产生错误的连接 SYN:表示同步序号, 用来建立连接;SYN和ACK搭配使用,请求连接时,SYN=

【linux】关于TCP三次握手和四次挥手

1.TCP是什么 关于OSI的七层模型 TCP在第四层——Transport层,第四层的数据叫Segment->报文 IP在第三层——Network层,在第三层上的数据叫Packet->数据包 ARP在第二层——Data Link层:在第二层上的数据,我们把它叫Frame->帧 数据从应用层发下来,会在每一层都会加上头部信息,进行封装,然后再发送到数据接收端,就是每个数据都会经过数据的封装和解封装的过程. wireshark抓到的包与对应的协议层如下图所示 Frame 36441: 物理

TCP/IP三次握手与四次挥手(转)

一.TCP报文格式        TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下:        (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记.        (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1.        (3)标志位:共6个,即URG.ACK.PSH.RST.SYN.F

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

tcp协议: tcp是面向连接.可靠的进程到进程之间的协议.tcp提供全双工服务:即:数据可在同一时间双向传输. tcp报文段首部格式: 各字段含义: 源端口号:16位字段,为发送端进程对应的端口号 目标端口:16位字段,为接收端进程对应的端口号,接收方接收到数据包之后根据这个字段确定将数据发送给对应程序来处理 序号:32位字段,当tcp从进程中接收到数据之后,就会把他存储在发送缓存中.并对每一个字节进行编号,形成的序列号.特点如下: 会生成一个随机数作为第一个字节的编号,成为序列号(ISN),

TCP/IP协议 三次握手与四次挥手

一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下:        (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记.        (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1.        (3)标志位:共6个,即URG.ACK.PSH.RST.SYN.FIN等,具体含