三次握手

前端需要了解的http知识

旧巷老猫 提交于 2020-02-02 04:02:22
http基本概念 http是一个无状态 ,无连接的基于TCP协议的单向应用层协议 一、无连接 无连接即每次链接只处理一个请求,请求和应答后就断开链接 二、无状态 http的每次请求都是独立的,不相关的,协议对事物处理没有记忆功能。 HTTP无状态的特性严重阻碍了这些交互式应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持HTTP状态的技术就应运而生了,一个是Cookie,而另一个则是Session。 HTTP请求报文 HTTP请求报文由3部分组成(报文行+报文头+报文体): 常见的HTTP响应报文头属性 Cache-Control 响应输出到客户端后,服务端通过该报文头属告诉客户端如何控制响应内容的缓存。 常见的取值有private、public、no-cache、max-age,no-store,默认为private。 private: 客户端可以缓存 public: 客户端和代理服务器都可缓存(前端的同学,可以认为public和private是一样的) max-age=xxx: 缓存的内容将在 xxx 秒后失效 no-cache: 需要使用对比缓存来验证缓存数据 no-store: 所有内容都不会缓存 默认为private,缓存时间为31536000秒(365天)也就是说,在365天内再次请求这条数据

HTTP详解1-工作原理

£可爱£侵袭症+ 提交于 2020-02-02 03:56:56
1. HTTP简介 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。 在了解HTTP如何工作之前,我们先了解计算机之间的通信。 2. 计算机相互之间的通信 互联网的关键技术就是TCP/IP协议。两台计算机之间的通信是通过TCP/IP协议在因特网上进行的。实际上这个是两个协议: TCP : Transmission Control Protocol 传输控制协议和IP: Internet Protocol 网际协议。 IP:计算机之间的通信 IP协议是计算机用来相互识别的通信的一种机制,每台计算机都有一个IP.用来在internet上标识这台计算机。 IP 负责在因特网上发送和接收数据包。通过 IP,消息(或者其他数据)被分割为小的独立的包,并通过因特网在计算机之间传送。IP 负责将每个包路由至它的目的地。 IP协议仅仅是允许计算机相互发消息,但它并不检查消息是否以发送的次序到达而且没有损坏(只检查关键的头数据)。为了提供消息检验功能,直接在IP协议上设计了传输控制协议TCP. TCP : 应用程序之间的通信 TCP确保数据包以正确的次序到达

HTTP请求-基础

巧了我就是萌 提交于 2020-02-02 01:30:54
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,和 TCP/IP 协议族内的其他众多的协议相同, 用于客户端和服务器之间的通信,请求访问文本或图像等资源的一端称为客户端, 而提供资源响应的一端称为服务器端。 HTTP协议交互的典型描述 为什么要“三次握手” 客户端和服务端通信前要进行连接,“三次握手”的作用就是双方都能明确自己和对方的收、发能力是正常的。 第一次握手:客户端发送网络包,服务端收到。也即客户端的发送能力、服务端的接收能力正常。 第二次握手:服务端发包,客户端收到。说明服务端的接收、发送能力,客户端的接收、发送能力是正常的。 从客户端的视角来看,我接到了服务端发送过来的响应数据包,说明服务端接收到了我在第一次握手时发送的网络包,并且成功发送了响应数据包,这就说明,服务端的接收、发送能力正常。而另一方面,我收到了服务端的响应数据包,说明我第一次发送的网络包成功到达服务端,这样,我自己的发送和接收能力也是正常的。 第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力,服务端的发送、接收能力是正常的。 第一、二次握手后,服务端并不知道客户端的接收能力以及自己的发送能力是否正常。而在第三次握手时,服务端收到了客户端对第二次握手作的回应。从服务端的角度,我在第二次握手时的响应数据发送出去了

HTML协议

拥有回忆 提交于 2020-02-01 01:16:18
HTTP协议 HTTP协议简介 超文本传输协议(英文: H yper T ext T ransfer P rotocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。 2014年12月,互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组将HTTP/2标准提议递交至IESG进行讨论,于2015年2月17日被批准。 HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。 HTTP协议概述 HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)

Tcp/Ip协议

假如想象 提交于 2020-01-31 07:22:32
网络由下往上分为: 物理层-- 数据链路层-- 网络层-- IP协议 传输层-- TCP协议 会话层-- 表示层和应用层-- HTTP协议 1、TCP/IP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。 建立起一个TCP连接需要经过“三次握手”: 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客户端交互,最终确定断开). 2、HTTP连接

7.3传(运)输层

时光怂恿深爱的人放手 提交于 2020-01-31 05:46:24
引入传输层的原因: 消除网络层的不可靠性; 向上层屏蔽通信子网的实现细节 弥补上次提出要求和下层提供服务间的差异 资源子网 传输层 通信子网 传输层的作用范围 提供从源端主机到目的端主机的可靠传输。主机进程间(进程端口到进程端口)的通信,IP协议考虑的是协议。 应用进程之间的通信: 运输层提供进程级的访问能力 两个主机进行通信实际上就是两个主机中的应用进程互相通信 应用进程之间的通信又称为端到端的通信 运输层的另一个重要功能就是复用和分用 传输服务 传输实体:完成传输层功能的硬软件; 传输层实体利用网络层提供的服务向高层提供有效、可靠的服务,用服务质量QoS来衡量; 传输层提供两种服务 面向连接的传输服务:连接建立,数据传输,连接释放; 无连接的传输服务:不可靠的传输。 Internet传输协议 传输服务原语 传输服务的要素 寻址方法:定义传输服务访问点TSAP,将应用进程与这些TSAP相连。 在Internet中,TSAP内容如下: (IP address, local port) **服务访问点TSAP: 传输层常用端口号 远方客户程序如何获得服务程序的TSAP? TSAP(Transport Service Access Point) 传输服务访问点 方法1:预先约定、广为人知的(Well-known),比如telnet是(IP地址,端口23); 方法2:从名字服务器

从tcp到netty(二)

两盒软妹~` 提交于 2020-01-30 14:31:17
(二) Netty源码分析 : 做一套rpc长连接框架,架构上其实没有多么难,只要具体里面的步骤包括即可: 一、 全双工的 socket连接; 二、心跳检测 三、超时重连、重传 四、白名单 五、编解码   这里还有相当多的技术规范与技术点,比如 tcp消息封装定义消息头、消息体;定义反射类与方法用于远程方法执行;主从线程与线程池的设定;编解码序列的定义;粘包、拆 包,涉及到tcp报文包的分片;网络的流量、拥塞控制;编解码中的大小端;buffer数据解析等。   其实,我不得不吐槽一下, netty源码分析那本书有些地方并不好,有些地方没有按照思维逻辑去讲解,而是按照执行顺序,这样其实并不符合这么一个项目的构建过程!   还有一点,讲太细致,太深入,如果要全部分析完成,恐怕会非常耗时,其实很多只需要整体把握,如果有时间再慢慢消化! 全双工连接 :   对于 java来说,原生的java nio,其存在固有的复杂性与bug,难以令人满意!而netty则将用户边界做了封装,降低用户的开发难度,实际上我对于netty这本书的讲解流程并不满 意,因为它是按照代码的执行顺序讲解的,实际上并不符合人的思维逻辑;接下来我将会先从书中将的内容顺序梳理,然后再通过思维流程进行梳理一遍。   首先要通过 epoll理解buffer与channal!这两者是不同的

从tcp到netty(一)

亡梦爱人 提交于 2020-01-30 14:25:39
  发现自己近一年有些毛病,自己也算是研习了不少的源代码,看了不少的技术书籍,但是自己就是记忆力不行,总是过段时间就会忘记,忘记之后还得从头开始啃源码、啃书籍。而且有些重要技术点也会遗忘,导致再学习的时候发现自己又回到了起点!我总结为,就是自己近一年期间犯懒,没有再写一下博客,技能点不能很好的再回顾!   趁着发现自己的问题,同时自己也在做前后端 rpc分离实践,现在将之前研习netty的结果再总结出来,写到博客上!   首先,我们要确定 java中的netty用来做什么的?具体的工作模式优势不解释,网上能找一大堆,主要讲它通信这块的rpc,高效稳定的协议栈绕不开 tcp/ip 协议!    本来是不想记录 tcp/ip的,这个实在是没有太多好说的,但是也发现虽然自己明白,有时候却也是会遗漏要点知识,所以也还是记录一下吧!   似乎作为上层程序员只需要了解 tcp的握手与挥手情况即可!   首先要了解 tcp/ip的头部结构 16位源端端口 | 16位目标端端口 32位序列号(发送端确认信息) 32位确认序号(服务端确认) 4位偏移量(每个数字表示1个4字节,所以最大表示15个4字节,也就是60字节)---- 6位保留位(记不太清了) | 标志位:包括 6种报文段 urg、ack、rst、syn、fin、psh 16位校验和 | 16位紧急指针 16位窗口大小

TCP的长连接与短连接

最后都变了- 提交于 2020-01-30 02:30:57
1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server(服务器)与client(客户端)之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的 2. TCP短连接 我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是client先发起close操作。为什么呢,一般的server不会回复完client后立即关闭连接的,当然不排除有特殊的情况。从上面的描述看,短连接一般只会在client/server间传递一次读写操作 短连接的优点是:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段 连接->传输数据->关闭连接 HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。 也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。 3.TCP长连接 接下来我们再模拟一下长连接的情况,client向server发起连接,server接受client连接,双方建立连接

网络编程——TCP状态转换图详解

孤街醉人 提交于 2020-01-30 01:39:51
在前面, 已经介绍了TCP协议的三路握手和四次挥手。如下图所示,TCP通信过程包括三个步骤:建立TCP连接通道(三次握手)、数据传输、断开TCP连接通道(四次挥手)。 这里进一步探究TCP三路握手和四次挥手过程中的状态变迁以及数据传输过程。先看TCP状态状态转换图。 上半部分是TCP三路握手过程的状态变迁,下半部分是TCP四次挥手过程的状态变迁。 CLOSED:起始点,在超时或者连接关闭时候进入此状态,这并不是一个真正的状态,而是这个状态图的假想起点和终点。 LISTEN:服务器端等待连接的状态。服务器经过 socket,bind,listen 函数之后进入此状态,开始监听客户端发过来的连接请求。此称为应用程序被动打开(等到客户端连接请求)。 SYN_SENT:第一次握手发生阶段,客户端发起连接。客户端调用 connect,发送 SYN 给服务器端,然后进入 SYN_SENT 状态,等待服务器端确认(三次握手中的第二个报文)。如果服务器端不能连接,则直接进入CLOSED状态。 SYN_RCVD:第二次握手发生阶段,跟 3 对应,这里是服务器端接收到了客户端的 SYN,此时服务器由 LISTEN 进入 SYN_RCVD状态,同时服务器端回应一个 ACK,然后再发送一个 SYN 即 SYN+ACK 给客户端。状态图中还描绘了这样一种情况,当客户端在发送 SYN 的同时也收到服务器端的