在讲三次握手之前,希望大家理解一个概念,什么概念呢?
就是在我们的客户端和我们的服务器之间进行http请求,发送和返回的过程当中,我们是需要去创建一个tcp connection的东西,因为http是不存在连接这么一个概念的,它只有一个请求和响应这么一个概念,那么请求和响应都是一个数据包,它们之间是需要一个传输的通道的,那么这个传输的通道在哪里呢?就在tcp里面,去创建了这么一个从客户端发起,服务端接收的这么一个连接,这个连接呢,是可以一直保持在那边,然后我们的http请求是在连接这个基础上面去发送的,那这里就有一个概念,就是在tcp连接上面,是可以发送多个http请求的,在不同的版本里面,这个模式是不一样的
在http/1.0里面,这个连接是在http请求创建的时候,就去创建这个tcp连接,然后连接创建完之后,然后请求发送过去,然后服务器响应之后呢,这个tcp连接它就关闭了
然后在http/1.1里面,这个连接我们可以通过某种方式去申明这个连接可以一直保持在那边,然后保持在那边是什么意思呢?就是我们这个请求,第一个请求发送之后,这个连接没有关,然后第二个请求进来的时候,它还可以在这个连接上面进行发送,这有什么好处呢?就是因为tcp连接,我们这节课要讲的,在创建过程当中,是有三次握手这么一个消耗的,三次握手就是代表着有三次网络传输,客户端发送一次,然后服务端返回一次,然后客户端再发送一次,这个时候才创建了tcp连接,然后才能去发送http请求,所以如果把连接一直保持在那边,那么第二个http请求就没有三次握手的开销
在http2里面还有一个好处就是,http2里面tcp连接上面的http请求是可以并发的,这就导致什么呢,就是说我们同一个用户对同一个服务器发起一个网页请求的时候,它只需要一个tcp连接,那么具体什么含义呢,我们后期课程会详细的讲,现在要清楚tcp连接和http请求之间的关系

在http的三次握手当中,首先客户端发起一个我要发送一个数据包的请求,发送到服务端,这里面呢会有一个标志SYN=1,Seq=X,syn是一个标识,就是我这是一个创建请求的数据包,然后seq等于一个数字,一般来说都是1,然后服务端接收之后,知道了我有一个客户要跟我创建连接了,那创建这个连接之后呢,服务端就会开启一个tcp,socket的一个端口,然后这个端口开启了之后,它返回给客户端,它返回的数据里面也是一个SYN=1,ACK=X+1,Seq=Y,然后它会返回一个ACK,ACK就等于第一次发送过来的Seq,就是X,然后+1,然后它再发送一个Seq,这个是服务器端的一个Seq,然后客户端拿到之后,服务端允许我们打开创建这个连接,然后客户端再去发送它的ACK=Y+1,Seq=Z,它再发送一个Seq,等于一个新的数字Z,这就是tcp去创建的一个过程
为什么要进行这样一个三次握手呢,这是为了防止服务端这边开启一些无用的连接,因为我们知道网络传输是有延迟的,因为我们之间可能隔着非常远的距离,要通过一个光纤,然后各种中间的代理服务器来进行一个传输,在传输的过程当中,比如客户端发送一个SYN=1,创建连接的请求,如果服务端就直接创建了这个连接,然后返回内容给客户端,但是这个数据包因为网络传输的原因,它丢了,丢了以后,客户端就一直没有接收到服务器返回到这个东西,然后客户端可能设置了一个超时时间,关闭了,关闭了之后才发现一个新的创建连接的请求,这个时候服务端是不知道的,如果没有第三次握手,服务端根本不知道客户端有没有接收到我返回到信息,并且没有说要去创建还是关闭这个请求,服务端就开在那边,等着客户端发送实际到请求数据,那么这个时候服务端这个开销就浪费了,因为它不知道这个连接已经创建失败了,可能客户端已经创建新到连接去了,所以呢,我们需要三次握手,让客户端和服务端察觉到我们因为网络原因端一些问题导致数据没有查到,这个端口,这个连接已经关闭了,我们需要一直等在那边的情况,三次握手主要是规避网络传输当中延迟而导致服务器开销的一些问题
接下来看下三次握手数据包的相信内容,Wireshark抓包工具

13789是本机的一个端口,80是服务器端的一个端口,因为有三次握手,客户端和服务器之间有三个来回,只要找到同一个端口的来回,就可以找到这三次握手

如图,这三次是完整的三次握手的过程,第一次握手可以看到发送了一个SYN标示位,为了简单演示,说SYN=1,其实,就是SYN占据了第一个标识位,用图片只是为了更形象的展示这三个过程,返回的时候是一个SYN,再加上一个ACK。最后客户端再发送一个ACK给服务端,作为第一个标识位,这样一个过程就完成了一个三次握手

HTTP的三次握手的更多相关文章

  1. TCP三次握手的正确使用姿势

    背景 和女朋友异地恋一年多,为了保持感情我提议每天晚上视频聊天一次. 从好上开始,到现在,一年多也算坚持下来了. 问题 有时候聊天的过程中,我的网络或者她的网络可能会不好,视频就会卡住,听不到对方的声 ...

  2. TCP三次握手/四次挥手详解

    一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能.包含以下四个层次: 1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程 ...

  3. python网络编程-TCP协议中的三次握手和四次挥手(图解)

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

  4. 简析TCP的三次握手与四次分手

    TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续.它只是一个超级麻烦的协议,而它又是互联网的基础,也 ...

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

    参照: http://course.ccniit.com/CSTD/Linux/reference/files/018.PDF http://hi.baidu.com/raycomer/item/94 ...

  6. wireshark抓包工具简介以及tcp三次握手的一些含义

    wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示网络封包的详细信息.使用wireshark的人必须了解网络协议,否则就看不懂wireshark了.为了安全考虑, ...

  7. 使用winshark分析三次握手,四次挥手

    三次握手 ip 106.120.167.67捕获的数据 数据信息   分析: 从图中可以看出,前三条为三次握手过程,使用TCP协议. 结合图,第一条为建立连接请求,客户端向服务器发送SYN=1的报文, ...

  8. TCP/IP协议三次握手与四次握手流程解析

    原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议三次握手与四次握手流程解析 TCP/IP协议的详细信息参看<TCP/IP协议详 ...

  9. tcp三次握手、四次挥手

    TCP的三次握手(建立连接)和四次挥手(关闭连接):http://blog.csdn.net/whuslei/article/details/6667471/ TCP协议中的三次握手和四次挥手(图解) ...

  10. 简述TCP连接的建立与释放(三次握手、四次挥手)

    在介绍TCP连接的建立与释放之前,先回顾一下相关知识. TCP是面向连接的运输层协议,它提供可靠交付的.全双工的.面向字节流的点对点服务.HTTP协议便是基于TCP协议实现的.(虽然作为应用层协议,H ...

随机推荐

  1. spring 通过beanDefinition注册自定义规则的bean

    目的: 扫描某个自定义注解标注的类, 或者自定义xml 为这些类生成spring Bean 基本原理:org.springframework.beans.factory.support.Default ...

  2. 约瑟夫环问题poj1012

    题意: 有k个坏人k个好人坐成一圈,前k个为好人(编号1~k),后k个为坏人(编号k+1~2k) 现在有一个报数m,从编号为1的人开始报数,报到m的人就要自动死去. 问当m为什么值时,可以使得在出现好 ...

  3. Android NDK开发 Jni中Debug(三)

    下载LLDB 配置Android Native - Debugger 调式结果如下 #include <jni.h> #include <string.h> #include& ...

  4. list 增 删 改 查 及 公共方法

    # 热身题目:增加名字,并且按q(不论大小写)退出程序 li = ['taibai','alex','wusir','egon','女神'] while 1: username = input('&g ...

  5. maya2012安装失败如何卸载重装

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...

  6. jquery中load()加载页面,刷新之后,加载的页面不显示的解决办法

    <script language="javascript" type="text/javascript"> $(function(){ $(&quo ...

  7. pacman usage

    pacman使用 安装了系统时候, 应该立马使用pacman-mirrors -c China更新源, 再使用pacman -Syyn更新系统 编辑/etc/pacman.conf添加 [archli ...

  8. C#中实体集合和实体转换成相应的string、XDocument、XElement

    C#中实体集合和实体转换成相应的string.XDocument.XElement public class SimpleXmlConverter { public static string ToX ...

  9. PrintPreviewControl

    用于按文档打印时的外观显示PrintDocument对象.此控件没有按钮或其他用户界面元素,因此通常只有在希望编写自己的打印预览用户界面时才会使用PrintpreviewControl 属性 Docu ...

  10. JavaScript 数组(Array)

    //声明方式 //调用 Array构造函数创建并赋值 var users = new Array(); //new 可以省略 ); //new 可以省略 var users3 = new Array( ...