计算机网络基础
结合着各种资料本人把计网的内容整理了一下,可能不是特别的全面,若有错误还请指正,同时也是作为复习的资料,有错误会尽快的更新。
OSI七层模型
osi(open system interconnection reference model)开放式系统互联通信参考模型
名称 | 作用 |
---|
物理层 | 物理设备的传输标准,比如网线的接口类型、光纤的接口类型等等。 物理设备之间通过比特流形式进行传递(将01数据转换成电流强弱来进行传输,到达目的地后再转换成0,1)。比特:二进制 0101 | 数据链路层 | 将物理层中的数据进行接受,数据存储的地址位于MAC(物理地址)中,这一层通常称作帧。这一层工作的设备是交换机,数据通过交换机来传输。 | 网络层 | 将帧中的数据进行IP地址的封装与解封装。这层工作的设备是路由器,这层的通常称作数据包 | 传输层 | 定义了数据的传输协议和端口号。这一层通常称为段。 TCP(传输控制协议)和UDP(用户数据报协议)就是非常典型的传输协议。TCP特点:传输效率低,可靠性强(不会丢数据),传输数据量大UDP特点: 传输效率高,可靠性低(容易丢数据),传输数据量小。 | 会话层 | 通过传输层(端口号:传输端口和接受端口)建立数据传输通路。主要在系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者主机名) | 表示层 | 数据的表现形式,比如将传入的数据进行解释、加密与解密、压缩与解压缩等等 | 应用层 | 一些终端的应用,面向用户的接口,比如:FTP(文件传输)、WEB(浏览器)、QQ。 |
osi模型终究是一个理想中的模型,具有通用性,然后现实中并不是按照七层模型来设计的,在osi的基础上有了新的模型产生TCP/IP四层模型。
TCP/IP模型
TCP/IP模型将osi模型进行了整合,最终分成了4层模型。
TCP/IP协议不是TCP和IP这两个协议的合成,而是指因特尔网整个TCP/IP协议族。
TCP/IP四层从下往上依次是:网络接口层(物理层(比特)+数据链路层(帧))、网络层、传输层、应用层(应用层+表示层+会话层)
名称 | 作用 |
---|
网络接口层 | 网络接入层与OSI参考模型中的物理层和数据链路层相对应。它负责监视数据在主机和网络之间的交换。事实上,TCP/IP本身并未定义该层的协议,而由参与互联的各网络使用自己的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接。地址解析协议(ARP)工作在此层,即OSI参与模型的数据链路层。 | 网络层 | 主要解决主机到主机的通信问题。它所包含的协议设计数据包在整个网络上的逻辑传输。该层有三个主要协议:网际协议(IP)、互联网组管理协议(IGMP)和互联网控制报文协议(ICMP) | 传输层 | 为应用层体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。使源端和目的端机器上的对等实体可以进行会话,定义了两个主要的协议:传输控制协议(TCP)和用户数据报协议(UDP).TCP 是面向连接的协议,UDP 是面向无连接的不可靠传输的协议。 | 应用层 | 包含所有的高层协议,这些协议为用户提供所需要的各种服务。例如:FTP(文本传输协议)、SMTP(电子邮件传输协议)、DNS(域名服务)、HTTP(超文本传送协议)、TELNET(虚拟终端协议)等等 |
TCP三次握手和四次挥手
先来简单说一说TCP三次握手,再说之前举一个例子方便理解。
TCP的握手就和两军之间通讯类似。
蓝军A向蓝军B发送明早5点一起攻打红军的消息,消息发送完毕后,蓝军B接受消息后,需要给蓝军A发送一个消息告诉蓝军A自己已经接到消息了,蓝军A在接收到蓝军B返回的消息后再给蓝军B发送一次消息说你发来的信息我已经接受到了,这下确保了两军都能够知道对方接受到了消息,不会影响到作战。
说明一次计划的执行需要三次的交互,才能保证计划顺利执行。
先看看TCP中的结构组成
?
- 源端口号: 标识源主机ip地址的一个应用进程。
- **目标端口号:**标识目标主机ip地址的一个应用进程。源端口号+目标端口号确定了一个TCP连接开始和结束的地方
- 顺序号 seq:用来标识从TCP源端口向TCP目标端口发送的数据字节流,标识在报文段中第一个数据字节的顺序号。如果将字节流看作是两个应用之间的单向流动,则TCP用顺序号对每个字节进行计数。序号是32bit的无符号数,序号到达2的32次方-1后又从0开始。当建立一个新的连接时,SYN(控制位:同步序号)标志位1。
- 确认号 ack:表示发送确认的一端所期望收到的下一个顺序号。因此,确认序号应当是上次已成功收到数据字节顺序号+1。只有ACK(控制位:确认号有效标志)为1时确认号才能够生效。TCP 为应用层提供全双工服务,这意味数据能在两个方向上独立地进行传输。因此,连接的每一端必须保持每个方向上的传输数据顺序号
- **TCP报头长度(首部长度):**指明数据从哪里开始。
- **保留位:**保留给将来使用,一般情况下置为0.
- 控制位:TCP报头中有6个标志bit,它们中的多个可同时被设置为1
- **URG:**为1表示紧急指针有效,0表示无效。
- **ACK:**为1表示确认号有效,0表示无效。
- **PSH:**为1表示带有PUSH标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。
- **RST:**用于复位由于主机崩溃或其他原因而出现错误的连接。
- **SYN:**同步序号,为1表示连接请求,用于建立连接和使顺序号同步。
- **FIN:**用于释放连接,为1表示发送发已经没有数据发送,即关闭本方数据流。
- 窗口大小:数据字节数,表示从确认号开始,本报文的源方可以接收的字节数,即源方接收窗口大小
- **校验和:**此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。
- 紧急指针:只有当 URG 标志置 1 时紧急指针才有效。TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。
- 选项:最常见的可选字段是最长报文大小,又称为 MSS(Maximum Segment Size) 。每个连接方通常都在通信的第一个报文段(为建立连接而设置 SYN 标志的那个段)中指明这个选项,它指明本端所能接收的最大长度的报文段。选项长度不一定是 32 位字的整数倍,所以要加填充位,使得报头长度成为整字数。
- 数据: TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。
三次握手过程
-
第一次握手:客户端主动向服务器发起的请求,服务器被动接收,这个过程客户端携带两种参数,分别是SYN、seq。 SYN:TCP包头中控制位中的同步序号,SYN= 1,表示建立连接请求。 **seq:**顺序号,客户端发给服务端的数据字节流,seq用来标识和记录该数据,seq = x。 -
第二次握手:服务器接受到客户端的请求后,会返回四个参数,分别是SYN、seq、ack、ACK **SYN:**SYN=1 服务器向客户端建立连接请求 **ack:**确认号,ack = x+1,表示已经接收到来自客户端的请求,用来告诉客户端。 ACK:位于控制位中,用来表示ack是否有效的标志。ACK =1 seq:服务器端返回给客户端数据,就来标识服务器端发送的数据字节流,seq = y -
第三次握手:客户端接受到服务器返回的数据,通过ack来判断第一次握手发送数据是否成功。若发送成功,客户端会返回给服务器三个参数,分别是:ack、ACK、seq。 **ACK:**确保ack有效 **ack:**ack = y+1,表示已经接收到服务器发来的请求,用来告诉服务器端 **seq:**seq = x +1,服务器端收到客户端发送的seq值后,成功建立连接
- 第一次握手:client syn 2322326583 —> server
- 第二次握手:server syn 3573692787, ack 2322326583 + 1 —> client
- 第三次握手:client ack 3573692787 + 1 –>server
客户端和服务器端建立连接进行三次握手的过程,归根到底:保证双方都能够知道自己和对方发送和接收的过程是正常的。
四次挥手
客户端到服务器端的连接过程是三次,客户端请求服务器端断开连接过程是四次。
原因:TCP连接时全双工(数据可以同时在两个方向上传递)所以进行关闭时每个方向上都是单独关闭的,单方向上的关闭就叫做半关闭。
客户端<--------------->服务器
-
第一次挥手:客户端只剩下最后一些数据,发送给服务器后就将通道关闭。客户端主动发起连接释放,传给服务器的参数有两个,FIN、seq。此时客户端进入Fin-Wait状态 FIN:控制位中用于释放连接的标志,FIN=1 **seq:**顺序号,最后的一部分数据,seq = u -
第二挥手:服务器接收到客户端发送的连接释放消息,立刻返回消息给客户端,ACK、ack、seq。 ACK:确保ack有效 ack:ack = u+1,表明服务器收到了客户端发来的消息,用来告诉客户端。 seq:seq = v,服务器发送数据给客户端。 此时,服务器进入了Close-Wait状态,TCP服务器就通知高层应用程序,客户端向服务器方向的通道就被关闭了,现在就是一种半关闭状态,只能是服务器向客户端发送数据。 客户端在接收到来自服务器的消息后,进行ack的验证,进入了Fin-Wait2状态 -
第三次挥手:当服务器中的数据发送完毕后,这次就是服务器向客户端发送连接释放的消息,FIN、ACK、seq、ack。 ACK: 确保ack有效 ack: ack = u +1 seq: seq = w ,服务器中剩余的数据 **FIN:**控制位中用于释放连接的标志,FIN=1 服务器进入Last-ACK状态,等待客户端的响应 -
第四次挥手:客户端接收到来自服务器的连接释放请求,必须向服务器端返回消息,ACK、ack、seq ACK: 确保ack有效 ack: ack = w +1 表明客户端收到来自服务器的消息 seq: seq = u +1 客户端进入Time-Wait状态,注意:此时TCP连接还没有释放掉,必须经过2 * MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入Closed状态。 服务器接收到客户端发出的确认,立刻进入Closed状态。 服务器结束TCP连接的时间要早于客户端。
UDP包头
TCP和UDP区别
UDP:是一种不可靠的数据传输方式,该协议不能保证数据准确无误的到达目的地。但是它的优点在于数据低非常快,当某个程序的目的是在一定时间内尽可能传送更多的数据时,就可以使用UDP协议进行传输。在生活中能够看见UDP协议:QQ语音,QQ视频、消息。
TCP协议保证传输的可靠性
-
应用数据被TCP分割成最适合传输的数据块 -
TCP将传输的数据字节流进行计数、编号、包装,接收方把数据包进行排序,把有序数据传送给应用层。 -
校验:通过校验和验证整个TCP的报文段,包括:TCP头部和TCP数据,这是一个端到端的校验和,目的是检测数据在传输过程中是否产生变化,若数据被检测出存在差异性,TCP就会丢弃这段报文段,表明没有收到这段报文。 -
TCP的接受端会丢弃重复的数据 -
**流量控制(TCP使用滑动窗口实现):**TCP连接的每一方都设有固定大小的缓冲空间,TCP接收方要求发送方只能发送缓冲区能够接收的数据。若发送方发送的数据超过了接收方所能承受的数据,为了防止数据包丢失,提示发送发降低发送速率。 -
**阻塞控制:**当网络拥堵时,减少数据的发送。 -
ARQ控制(Automatic Repeat-reQuest自动重传请求) ARQ协议通过确认和超时两个机制实现了在不可靠的传输路径中保证了传输的可靠性。 ARQ协议包括:等待ARQ协议和连续ARQ协议
-
等待ARQ协议 基本原理:将分组的数据一组一组进行传输,当请求端每发送一个分组数据后就停止等待,等待接收方返回确认已经接收完毕后(ACK),再继续发送下一组数据。若在一定时间内,发送方没有接收到来自接收方发送的确认消息(超时),表明没有发送成功,需要重新发送,知道接收确认(ACK)再发送下一组数据。 优点:简单 **缺点:**等待时间长,信道利用率低,只能一个一个传输 -
连续ARQ协议 它的出现最大的特点就是:提高的信道利用率。采用发送方维持一个发送窗口,对应窗口的分组数据可以连续进行发送,不需要每次发送一组确认一次,而是按照累计数目的方式确认,接收方对按序到达的最后一个分组数据返回确认(ACK),表明该数据块对应的分组数据已经全部传送完成。 **缺点:**因为连续传输的,发送方发送完毕后,若当中某个分组数据丢失,发送放无法知晓具体是哪个中间数据丢失了,只能重新发送。例如:发送方发送五组数据,当中第三条数据丢失了,接收方在接收到第五组数据后发现,少了一条,接收方不知道是哪个数据,发送方也不知道,只能重新发送。 -
**超时重传:**当 TCP 发出?个段后,它启动?个定时器,等待?的端确认收到这个报?段。如果不能及时收到?个确认,将重发这个报?段。
常见端口号
FTP (文件传输协议) : 20、21
SSH (安全shell协议) :22
telnet (远程登录协议):23
DNS (域名系统):53
http (超文本传输协议):80
SMTP (简单邮件传输协议): 25
POP3 (邮局协议3代): 110
IP地址
IP包头
5行:每行32bit,4个字节 20个字节
32位二进制转换成十进制
注意: 0.0.0.0 不代表地址,因此IP地址的起始位置是:1.0.0.0
127.0.0.1 == localhost:计算机本机地址
A类IP地址:
在这个之间变化的表示不同网段,不同网段之间通过路由来进行访问。
第一位不变,后三位变化表示同一网段中不同的主机,不同主机之间通过交换机来访问。
B类IP地址:
前两位不同表示不同网段,后两位表示同一网段的不同主机
C类IP地址:
前三位不同表示不同网段,后一位表示同一网段的不同主机。
公网IP地址的资源有限,因此有了私有IP地址的出现,它允许IP地址重叠,但是私有IP地址无法直接访问公网IP,需要进行转换。
子网掩码
一个IP地址对应一个子网掩码,因此IP地址和子网掩码不能分开
A类IP:
10.1.1.200 -------> 255.0.0.0
B类IP:
172.16.1.200 ----------> 255.255.0.0
C类IP:
192.168.1.200---------------> 255.255.255.0
子网掩码用来区分不同网段IP地址和同一网段的不同主机地址。
**补充:**子网掩码中并不是所有的都是255,它要求对应二进制中的1要是连续的即可。
DNS
DNS(Domain Name System):域名解析
例子:http://www.baidou.com/ => 域名
192.168.80.68 => ip地址
ip地址和域名之间的相互转换
hosts文件
windows中的位置:C:\windows\System32\drivers\etc\hosts
作用:做静态IP和域名对应
从Hosts文件到DNS
早期Hosts文件解析域名
? 名称解析效能下降
? 主机维护困难
DNS服务
? 层次性
? 分布式
DNS作用
将域名解析为IP地址
? 客户机向DNS服务器发送域名查询请求
? DNS服务器告知客户机Web服务器的IP地址
? 客户机与Web服务器通信
域名空间结构
组织域
国家或地区域
DNS查询过程
·
DNS查询类型
- 从查询方式上分
– 递归查询
- 要么做出查询成功响应,要么做出查询失败的响应。一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机。
– 迭代查询 - 服务器收到一次迭代查询回复一次结果,这个结果不一定是目标IP与域名的映射关系,也可以是其他DNS服务器的地址。
- 从查询内容上分
– 正向查询由域名查找IP地址 – 反向查询由IP地址查找域名
上述DNS查询过程经历了6步终于获取到了IP地址,这个过程存在多次请求,请求的方式是UDP形式还是TCP形式呢?
DNS用的是TCP协议还是UDP协议 - cs_wu - 博客园 (cnblogs.com)
DNS同时占用UDP和TCP端口53是公认的。DNS协议同时使用TCP和UDP两种传输协议。
DNS在区域传输时使用TCP协议传输
DNS的规范规定了两种类型的DNS服务器:
区传送:当辅助DNS服务器启动时,它需要与主DNS服务器通讯,并加载数据信息。
使用TCP协议区传送时需要注意的两点:
-
辅助DNS服务器会**定时(一般3小时)**向主DNS服务器查询数据以了解数据是否产生变化;如果有变动,进行一次区域传送,同步数据, 数据同步的过程耗费时间长,数据量大并且保证数据的一致性。 -
TCP协议保证了数据的可靠性。
了解一下TCP和UDP传送字节的长度限制:
UDP报文的最大长度为512字节,而TCP允许报文长度超过512字节。当进行DNS查询时超过512字节,就采用TCP协议。
通常传统的UDP报文一般不会超过512字节
DNS在域名解析时使用UDP协议传输
客户端向DNS服务器查询域名时,一般返回的内容都不会超过512字节,使用UDP协议传输。不需要经过TCP三次握手,DNS服务器负载更低,响应更快。
如果说每次访问同一个域名都进行DNS查询过程,这样就非常蛮烦,并且耗费了额外的系统资源,有没有好的方式将这些对DNS查询进行优化呢?
DNS缓存
DNS服务器中存在着多级缓存,从最近的浏览器开始:浏览器缓存、系统缓存、路由器缓存、根域名服务器缓存、顶级域名服务器缓存、主域名服务器缓存。
DNS负载均衡
考虑一个问题:每次访问同一个域名,通过DNS服务器获取IP地址,那么是不是每次访问的都是同一个IP地址呢?
答案是:否定的。
如果说每次返回IP地址都是同一个,那么访问的资源都位于同一个主机,那世界上成百千上万量的访问都是同一个主机,这个主机能否承受的了呢?实现中一台服务器肯定无法满足,就需要将这些访问量分摊到许多个服务器上,虽然访问的是同一个域名,但是返回的IP地址不一定都是一样的。用户只关心到达这个域名所在的网站,不关心是哪个服务器提供的。
DSN可以根据用户地理位置和用户的请求等因素,选择适合的服务器返回给用户IP地址,这就是DNS负载均衡,又叫做DNS重定向。
最常见的**CDN(Content Delivery Network 内容分发)**就是利用DNS重定向技术,就近性原则返回一个跟用户最接近的点的IP地址,CDN结点服务器负责响应用户,提供服务。
网关
网关(Gateway)又称网间连接器、协议转换器
网关在网络层以上实现网络连接,是最复杂的网络互联设备,仅用于两个高层协议不同的网络互连。
- 网关既可以用于广域网互连,也可以用于局域网互连。
- 网关是一种充当转换重任的服务器或路由器
总结:
- 网关发生在内网计算机访问的不是本网段(不在局域网内)的数据包时使用。
- 网关负责将内网IP转换为公网IP,公网IP转换为内网IP。
HTTP和HTTPS
-
什么是协议 计算机之间为了实现网络通信而达成的一种约定,有了这种约定,不同厂商生产的设备,以及不同的操作系统组成的计算机之间就能够实现通讯。 -
HTTP协议 HTTP(Hyper Text Transfer Protocol)超文本传输协议。 从WEB服务器传输**超文本标记语言(HTML)**到浏览器的协议。 设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。 -
HTTP原理 HTTP是一个基于TCP/IP通讯协议来传输数据的,传输的数据类型为HTML文件、图片文件、查询结果等。 HTTP协议一般用于B/S架构,浏览器到服务器之间的通讯,浏览器作为HTTP客户端通过URL向服务器端发送请求数据。 举例: HTTP是一个无状态的协议,无状态是指:客户端和服务器端不需要建立持久的连接,这就意味着当客户端发起请求,服务器端接受请求返回数据后,它们之间的连接就被断开了,服务器端不保留连接的有关信息。 -
HTTP特点
-
支持B/S(客户端/服务端)模式,也是一种请求(Request)/响应(Response)模型 -
简单快速:发送请求,只需传送请求方法和路径。常见请求方法:GET、POST、HEAD。 -
灵活:允许传输任意类型的数据对象,传输的类型由Content-Type加以标记 -
**无状态:**前面也说到,限制每次连接只处理对应请求,服务器处理完毕后,就立刻断开连接。对于事务处理没有记忆能力,服务器不知道客户端是什么状态。 但是这样的做法却不利于客户端与服务器保持会话连接,用户状态如何确保? Cookie和Session出现弥补了这一缺陷。
-
Cookie 一般是在客户端中(浏览器)保存用户信息 比如:网页账户登录,我们将登录的信息存放在Cookie中,下次再次登录时就不需要再次填写账号信息,这个信息获取的过程其实是:在Cookie中存放对应用户信息的Token,根据Token值来找到对应用户信息。一般Cookie过期了,对应用户的信息也将失效,再次登录时需要重新Token值。 -
Session 是在服务器端记录用户的状态 比如:典型的场景购物车,当你添加商品到购物车时,系统需要知道对应是哪一位用户操作的,HTTP协议是无状态的,因此在服务器端给用户创建对应的Session,记录标识用户并跟踪用户状态。Session是有生命周期的,超过时间就会被销毁。 Session保存的方式:最常用的是内存或数据库(Redis)。 Session实现跟踪:大部分情况下,通过在Cookie中附加一个Session ID方来进行跟踪。 两者相比,相对来说 Session 安全性更高。如果要在Cookie 中存储?些敏感信息,不要直接写? Cookie 中,最好能将 Cookie 信息加密然后使?到的时候再去服务器端解密。 -
URI和URL的区别 HTTP使用统一资源标识符,来传输数据和建立连接。 URI:Uniform Resource Identifier 统一资源标识符 URL:Uniform Resource Location 统一资源定位符 URI用来标识具体资源,它如同身份证号码;URL用来定位具体资源的位置,它更像是地址。 互联网上的每个文件都有一个唯一的URL。 -
HTTP包头组成 请求报文构成
- 请求行:包括请求方法、URL、协议/版本
- 请求头(Request Header)
- 请求正文
响应报文构成
- 状态行
- 响应头
- 响应正文
-
常见的请求方法
- GET:请求指定的页面信息,并返回实体主体。
- POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
- HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
- PUT:从客户端向服务器传送的数据取代指定的文档的内容。
- DELETE:请求服务器删除指定的页面。
GET请求 POST请求 两者区别
-
GET直接将参数添加到URL后,例如:?name = 123。直接可以观察到具体的参数值。 POST将参数放到报文的内部,不是放在URL后面。 -
GET提交的数据长度有限制,因为URL的长度有限制。而POST是没有的。 -
相比于GET,POST多了body部分,这部分用来存放传递的参数值 -
GET多用来查询,请求参数放在url中,不会对服务器上的内容产生作用。POST用来提交数据,例如表单数据的提交 -
响应状态码 访问一个网页时,浏览器会向web服务器发出请求。此网页所在的服务器会返回一个包含HTTP状态码的信息头用以响应浏览器的请求。 状态码分类:
- 1XX- 信息型,服务器收到请求,需要请求者继续操作。
- 2XX- 成功型,请求成功收到,理解并处理。
- 3XX - 重定向,需要进一步的操作以完成请求。
- 4XX - 客户端错误,请求包含语法错误或无法完成请求。
- 5XX - 服务器错误,服务器在处理请求的过程中发生了错误。
常见状态码:
- 200 OK - 客户端请求成功
- 301 - 资源(网页等)被永久转移到其它URL
- 302 - 临时跳转
- 400 Bad Request - 客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized - 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
- 404 - 请求资源不存在,可能是输入了错误的URL
- 409(Conflict)表示请求的资源与资源的当前状态发生冲突
- 410(Gone)表示服务器上的某个资源被永久性的删除。
- 500 - 服务器内部发生了不可预期的错误
- 503 Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
-
HTTP长连接和短连接 HTTP协议与TCP/IP协议的关系 HTTP长连接和短连接本质上是TCP长连接和短连接。HTTP协议属于TCP/IP协议中应用层协议,在传输层使用TCP协议,网络层中使用的是IP协议。IP协议主要解决网络路由和寻址问题,TCP协议保证在网络层之上可靠的传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序与发送顺序一致。TCP协议是可靠的、面向连接的。 长连接和短连接 在HTTP1.0中默认使用短连接,客户端和服务器端没进行一次HTTP操作,就要建立一次连接,任务结束后断开。 当浏览器访问其他HTML或者Web资源时,没遇到一个Web资源,就要重新发起HTTP请求。 在HTTP1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头中加入 Connection:keep-alive
在长连接的情况下,客户端和服务器端建立起HTTP连接之后不会立刻关闭,让他们在一定时间内保持连接,在该时间内,若需要再次进行请求时,直接复用之前的HTTP连接即可。Keep-alive可以设定时长。 之前也说明了HTTP请求连接的过程,在建立起HTTP请求之间,需要进行TCP三次握手保证通讯的正常,因此HTTP长连接和短连接,实质是TCP的长连接和短连接。 长连接和短连接应用场景 **长连接:**适用于操作频繁,点对点的通讯,并且连接数不能太多。每次建立HTTP连接前,都需要TCP三次握手保证通讯正常,这过程需要时间,若每个操作都是先验证,再操作,处理起来的速度就会低很多,使用长连接在一段时间保持,就不需要再次TCP验证了,直接发送数据即可。例如:数据库采用的就是长连接。 **短连接:**适用于Web网站,Web网站是被频繁访问并且用户量大,若采用长连接每个用户都占用一个连接,结果可想而知。 操作不频繁适用短链接。 -
HTTPS的出现 现如今,几乎所有的网站都是使用HTTPS协议,目的是为了更加安全。 看到上面是采用http协议进行登录的过程,可以看到账户和密码都是明文的方式显示,很容易造成安全问题。 HTTP协议中存在的问题
- 请求信息明文传输,容易被窃听截取。
- 数据的完整性未校验,容易被篡改
- 没有验证对方身份,存在冒充危险
HTTPS(HyperText Transfer Protocol over Secure Socket Layer)超文本传输安全协议:HTTP+SSL/TLS 通过SSL验证服务器的身份,为浏览器和服务器之间通信进行加密。 SSL(Secure Socket Layer,安全套接字层) 1994年为 Netscape 所研发,SSL运行在TCP/IP层之上、应用层之下,为应用程序提供加密数据通道,它采用了RC4、MD5以及RSA等加密算法,为数据通讯提供安全支持。 TLS(Transport Layer Security,传输层安全) 其前身是 SSL,目前使用最广泛的是TLS 1.1、TLS 1.2。 主要围绕SSL来说明HTTPS加密的过程 理解SSL(https)中的对称加密与非对称加密 - hai_blog - 博客园 (cnblogs.com) SSL采用对称加密和非对称加密的形式保证数据安全 加密算法可以分为:对称加密和非对称加密 对称加密:加密解密使用同样的“ 钥匙” 非对称加密:加密和解密使用不同的 “钥匙” 对称加密 使用邮局的例子来说明对称加密 Alice在盒子里放了信息,并给盒子上锁(加密),Alice通过邮局将盒子邮寄给BOB,BOB收到盒子后,他手上有相同的钥匙(和Alice一样的钥匙),打开盒子获取信息。 非对称加密 还是使用邮局的例子 Alice和BOB各自都有一个盒子(公钥)。Alice要和BOB通信,她让BOB把开着的盒子邮寄给她。她收到盒子后,把信息放入盒子中锁上盒子后,再邮寄给BOB,BOB收到盒子后,用自己的钥匙(私钥)打开盒子获取信息。 反过来也是,BOB要和Alice通信,Alice就把开着的盒子给他,他放入信息后返回,Alice用自己的钥匙打开盒子。 这个做法最大的好处就是,双方都不需要得到对方的钥匙来解锁,用自己的钥匙就可以解锁。若和多个人进行加密通讯的话,送过来的盒子(公钥)是不同的,即使当中一个人的被窃取了信息,也不会导致其他人的信息泄漏。 非对称加密在进行明文的加密和解密的过程中使用的是不同的钥匙。 - 生成一对公钥和私钥 - 加密:公钥+明文->密文 - 解密:私钥+密文->明文 ? 签名过程 - 生成一对公钥和私钥 - 签名:私钥+内容->签名 - 验证:公钥+签名+内容->内容有没有改变 SSL通过对称加密和非对称加密的两种加密方法的结合保证数据安全。
-
当你的浏览器向服务器请求一个安全的网页(通常是 https://),通过URL访问服务器建立SSL连接, -
服务器接收到来自浏览器的请求,返回证书信息(包含服务器信息:域名、公钥、申请证书) -
浏览器就需要检查证书的安全和真实性,使用证书中公钥去判断签名是否有效,核对域名的一致性。 -
浏览器生成对称密钥使用公钥进行加密,通过加密URL返回给服务器 -
服务器接收到请求后,使用私钥进行解密,并且使用浏览器生成的密钥进行加密URL解密。 -
服务器使用浏览器生成的对称密钥进行加密,浏览器使用密钥解密。 -
HTTP和HTTPS区别
- 端口:HTTP默认使用80端口,HTTPS默认使用443端口
- 安全性和资源消耗:HTTP协议是运行再TCP之上,所传输的内容都是明文,安全性太差。HTTPS协议通过SSL/TLS把传输的内容进行了加密,加密采用对称加密,对称加密使用服务器端的公钥进行了非对称加密。因此HTTPS安全性高于HTTP,HTTP消耗的资源少。
HTTP基本优化
HTTP1.0、HTTP1.1 和 HTTP2.0 的区别 - _浪潮之巅.☆ - 博客园 (cnblogs.com)
影响HTTP传输速率的两个因素:带宽和延迟
HTTP1.0和HTTP1.1的区别
-
HTTP1.0使用短链接,HTTP1.1之后使用了长连接和请求流水线 -
**错误通知的管理:**在HTTP1.1中新增了24个错误状态响应码。 -
带宽优化及网络连接的使用:HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对 象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是 206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。 -
缓存处理:在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策 略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。 -
Host头处理:HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但 随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。 HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
HTTP1.X的优化:SPDY
SPDY_百度百科 (baidu.com)
SPDY(读作“SPeeDY”)是Google开发的基于TCP的会话层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。
-
降低延迟:采用了多路复用的形式,通过多个请求Stream共享一个TCP连接的方式,解决了浏览器阻塞的问题,降低了延迟提到了带宽。 -
**请求优先级:**多路复用降低了延迟但是可能因为多个请求共用一个TCP连接导致某些请求被阻塞,因此允许给每个request设置优先级,确保重要的请求优先处理响应。 -
基于HTTPS的加密协议传输:提高了数据传输的安全性 -
header压缩:前面提到HTTP1.x的header很多时候都是重复多余的。选择合适的压缩算法可以减小包的大小和数量。 -
**服务端推送:**服务端把客户端所需要的资源通过index.html一起发送到了客户端,就不需要客户端再次请求资源,例如一些静态资源,通过推送直接传给客户端,速度得到了极大的提高。
HTTP2.0:SDPY的升级版
HTTP2.0和SPDY的区别:
- TTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS
- HTTP2.0 消息头的压缩算法采用 HPACK,而非 SPDY 采用的 DEFLATE
HTTP2.0和HTTP1.X相比的新特性
-
新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样 性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式, 实现方便且健壮。 -
多路复用(MultiPlexing),即连接共享,即每一个request都是用作连接共享机制的。一个request对应一个id,这样一个连接上 可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务 端请求里面。 -
header压缩,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少 需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。 -
服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能。
HTTP2.0的多路复用和HTTP1.X中的长连接复用有什么区别?
- HTTP1.0:一个HTTP请求对应一个连接建立,请求-响应完成,连接断开
- HTTP1.1:长连接多个HTTP请求共用一个TCP连接,若干个请求是串行单线程模式,后面的请求需要等待前面的请求完成后才能够获取执行机会,一旦当中有请求发生问题,后面的请求只能被阻塞,无法请求响应。(线头阻塞)
- HTTP2.0:多路复用允许多个请求可以在同一个TCP连接上并行执行,各个请求之间互不干扰。
在浏览器中输入URL地址 到显示主页的过程
《图解HTTP》
- URL(资源定位)通过DNS服务器周到对应域名的IP地址,先查缓存、若缓存失效或者没有,再进行DNS查询
- TCP连接,保证双方通讯正常
- 发送HTTP请求
- 服务器处理请求返回HTTP报文
- 浏览器获取服务器的资源渲染页面
- 连接断开
各个协议与HTTP协议之间的关系
《图解HTTP》
HTTP2.0的多路复用和HTTP1.X中的长连接复用有什么区别?
- HTTP1.0:一个HTTP请求对应一个连接建立,请求-响应完成,连接断开
- HTTP1.1:长连接多个HTTP请求共用一个TCP连接,若干个请求是串行单线程模式,后面的请求需要等待前面的请求完成后才能够获取执行机会,一旦当中有请求发生问题,后面的请求只能被阻塞,无法请求响应。(线头阻塞)
- HTTP2.0:多路复用允许多个请求可以在同一个TCP连接上并行执行,各个请求之间互不干扰。
在浏览器中输入URL地址 到显示主页的过程
《图解HTTP》
- URL(资源定位)通过DNS服务器周到对应域名的IP地址,先查缓存、若缓存失效或者没有,再进行DNS查询
- TCP连接,保证双方通讯正常
- 发送HTTP请求
- 服务器处理请求返回HTTP报文
- 浏览器获取服务器的资源渲染页面
- 连接断开
各个协议与HTTP协议之间的关系
《图解HTTP》
|