HTTP总结

本文深入解析网络结构分层,对比OSI七层模型与TCP/IP四层模型,详解HTTP协议的发展历程及其工作原理,探讨TCP的三次握手与四次挥手过程,回顾SSL/TLS协议的演变历史,阐述HTTPS如何保障网络安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络结构分层

1.OSI七层模型

        OSI七层模型(OSI是指Open System Interconnect,开放式系统互联)

OSI七层模型模型描述
应用层应用程序(电子邮件、文件服务)、用户接口
表示层数据的表示,压缩和加密(数据格式化、代码转换、数据加密)
会话层建立、管理和终止回话
传输层提供端到端可靠报文段传递和错误恢复
网络层提供数据报从源到宿的传递和网际交互
链路层将比特组装成帧和点到点的传递
物理层传输比特流,以二进制数据形式在物理媒体上传输数据

2.TCP/IP四层模型

        TCP/IP四层模型(传输控制协议/网间协议)

TCP/IP四层模型模型描述
应用层负责处理特定的应用程序细节
传输层主要为两台主机上的应用提供端到端的通信
网络互联层处理分组在网络中的活动,比如分组的选路
链路层包括操作系统中的设备驱动程序、计算机中对应的网络接口卡

七层模型和四层模型的区别

1.OSI采用七层模型,TCP/IP是四层模型;
2.TCP/IP网络接口层没有真正的定义,只是概念性的描述。OSI把它分为2层,每一层功能详尽;
3.协议开发之前就有了OSI模型,所以OSI模型具有共通性,TCP/IP是基于协议建立的模型,不适用于非TCP/IP的网络;
4.实际应用中,OSI是理论上的模型,没有成熟的产品;TCP/IP已经成为国际标准;


HTTP协议

        Http是基于TCP/IP协议的应用程序协议,不包括数据包的额传输,主要规定了客户端和服务器的通信格式,默认使用80端口;
        1991年发布Http/0.9版本,只有Get命令,且服务端直返HTML格式字符串,服务器响应完毕就关闭TCP连接;
1996年发布Http/1.0版本,
        优点:可以发送任何格式内容,包括文字、图像、视频、二进制。也丰富了命令Get、Post、Head。请求和响应的格式加入头信息;
缺点:每个TCP连接只能发送一个请求,而新建TCP连接的成本很高,导致Http/1.0性能很差;
        1997年发布Http/1.1版本,完善了Http协议,直至今天也是最流行的版本;
        优点:引入持久连接,TCP默认不关闭,可被多个请求复用,对于一个域名,多数浏览器允许同时建立6个持久连接;
引入管道机制,在同一个TCP连接中,可以同时发送多个请求,不过服务器还是按顺序响应;
        在头部加入Content-Length字段,一个TCP可以同时传送多个响应,所以就需要该字段来区分哪些内容属于哪个响应;
分块传输编码,对于耗时的动态操作,用流模式取代缓存模式,即产生一块数据,就发送一块数据;
        增加了许多命令,头信息增加Host来指定服务器域名,可以访问一台服务器上的不同网站;
        缺点:TCP连接中的响应有顺序,服务器处理完一个回应才能处理下一个回应,如果某个回应特别慢,后面的额请求就会排队等着(对头阻塞);
        2015年发布Http/2版本,它有几个特性:二进制协议、多工、数据流、头信息压缩、服务器推送;


HTTP请求和响应格式

1.Request

GET /barite/account/stock/groups HTTP/1.1
QUARTZ-SESSION: MC4xMDQ0NjA3NTI0Mzc0MjAyNg.VPXuA8rxTghcZlRCfiAwZlAIdCA
DEVICE-TYPE: ANDROID
API-VERSION: 15
Host: shitouji.bluestonehk.com
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.10.0

2.Response

HTTP/1.1 200 OK
Server: nginx/1.6.3
Date: Mon, 15 Oct 2018 03:30:28 GMT
Content-Type: application/json;charset=UTF-8
Pragma: no-cache
Cache-Control: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Content-Encoding: gzip
Transfer-Encoding: chunked
Proxy-Connection: Keep-alive
字段字段描述
Host指定服务器域名,可用来区分访问一个服务器上的不同服务;
Connectionkeep-alive表示要求服务器不要关闭TCP连接,close表示明确要求关闭连接,默认值是keep-alive;
Accept-Encoding说明自己可以接收的压缩方式;
User-Agent用户代理,是服务器能识别客户端的操作系统及相关信息。作用是帮助服务器区分客户端,并且针对不同客户端让用户看到不同数据,做不同操作;
Content-Type服务器告诉客户端数据的格式,常见的值有text/plain,image/jpeg,image/png,video/mp4,application/json,application/zip;这些数据类型总称为MIME TYPE;
Content-Encoding服务器数据压缩方式;
Transfer-Encodingchunked表示采用分块传输编码,有该字段则无需使用Content-Length字段;
Content-Length声明数据的长度,请求和回应头部都可以使用该字段;

TCP三次握手与四次挥手

        Http和Https协议请求时同会通过Tcp三次握手建立Tcp连接。通过三次握手,Client和Server都能确认自己和对方的收发信能力,相当于建立了相互的信任,就可以开始通信了。;
        当数据传输完毕,需要断开连接,断开连接经历了四次挥手;

字段字段描述
ACK响应标识,1表示响应,连接建立成功之后,所有报文段ACK的值都为1;
SYN连接标识,1表示建立连接,连接请求和连接接受报文段SYN=1,其他情况都是0;
FIN关闭连接标识,1表示关闭连接,关闭请求和关闭接受报文段FIN=1,其他情况都是0,跟SYN类似;
seq number序号,一个随机数X,请求报文段中会有该字段,响应报文段没有;
ack number应答号,值为请求seq+1,即X+1,除了连接请求和连接接受响应报文段没有该字段,其他的报文段都有该字段;

1.TCP的三次握手

Client Server SYN seq=x SYN seq=y,ACK=x+1 ACK = y+1 Client Server

第一次握手:Client向Server发送信息后,Server收到信息。Server可确认Client的发信能力和Server的收信能力;
第二次握手:Server向Client发消息,Client收到消息。Server可确认Client的发信能力和收信能力,Client也可确认B的收信能力和发信能力;
第三次握手:Client向Server发送信息,Server接收到消息。Server可确认Client的收信能力和Server的发信能力;

2.三次握手的具体流程

第一次握手:建立连接请求。客户端发送连接请求报文段,将SYN置1,seq为随机数x。然后,客户端进入SYN_SEND状态,等待服务器确认;
第二次握手:确认连接请求。服务器收到客户端的SYN报文段,需要对该请求进行确认,设置ack = x + 1(即客户端seq+1)。同时自己也要发送SYN请求信息,即SYN置位1,seq=y。服务器将SYN和ACK信息放在一个报文段中,一并发送给客户端,服务器进入SYN_RECV状态;
第三次握手:客户端收到SYN+ACK报文段,将ack设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕,客户端和服务券进入ESTABLISHED状态,完成Tcp三次握手。

3.TCP的四次挥手

主机1 主机2 FIN seq= x + 2 ACK = y + 1 ACK x + 3 FIN seq = y + 1 ACK = y + 2 主机1 主机2

第一次挥手:主机1(可以是客户端或服务器),设置seq和ack向主机2发送一个FIN报文段,此时主机1进入FIN_WAIT_1装填,表示没有数据要发送给主机2了;
第二次挥手:主机2收到主机1的FIN报文段,向主机1回应一个ACK报文段,表示同意关闭请求,主机1进入FIN_WAIT_2状态;
第三次挥手:主机2向主机1发送FIN报文段,请求关闭连接,主机2进入LAST_ACK状态;
第四次挥手:主机1收到主机2的FIN报文段,想主机2回应ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段后,关闭连接。此时主机1等待主机2一段时间后,没有收到回复,证明主机2已经正常关闭,主机1也关闭连接;


SSL发展史(互联网加密通信)

        1994年NetSpace公司设计SSL协议(Secure Sockets Layout)1.0版本,未发布;
        1995年NetSpace发布SSL/2.0版本,很快发现有严重漏洞;
        1996年发布SSL/3.0版本,得到大规模应用;
        1999年,发布了SSL升级版TLS/1.0版本,目前应用最广泛的版本;
        2006年和2008年,发布了TLS/1.1版本和TLS/1.2版本;

SSL原理及运行过程

1.SSL原理

        SSL/TLS协议基本思路是采用公钥加密法(最有名的的是RSA加密算法);
        大概流程是,客户端向服务器索要公钥,然后用公钥加密信息,服务器收到密文,用自己的私钥解密;
        为了防止公钥被篡改,把公钥放在数字证书中,证书可信则公钥可信。公钥加密计算量很大,为了提高效率,服务端和客户端都生成对话秘钥,用它加密信息,而对话秘钥是对称加密,速度非常快。公钥用来机密对话秘钥。

2.运行过程

        1.客户端给出协议版本号、一个客户端随机数A(Client random)以及客户端支持的加密方式;
        2.服务端确认双方使用的加密方式,并给出数字证书、一个服务器生成的随机数B(Server random);
        3.客户端确认数字证书有效,生成一个新的随机数C(Pre-master-secret),使用整数中的公钥对C加密,发送给服务端;
        4.服务端使用自己的私钥解密出C;
        5.客户端和服务器根据约定的加密方法,使用三个随机数ABC,生成对话秘钥,之后的通信都用这个对话秘钥进行加密;

SSL证书

1.认证级别分类

        SSL证书是一个二进制文件,里面包含经过认证的网站公钥和一些元数据,需要从经销商购买。整数有很多乐行,按认证级别分类:

认证级别分类类型描述
域名认证(DV=Domain Validation)最低级别的认证,可以确认申请人拥有这个域名;
公司认证(OV=Organization Validation)确认域名所有人是哪家公司,证书里面包含公司的信息;
扩展认证(EV=Extended Validation)最高级别认证,浏览器地址栏会显示公司名称;

2.覆盖范围分类

覆盖范围分类类型描述
单域名证书只能用于单域名,foo.com整数不能用于 www . foo . com;
通配符证书可用于某个域名及所有一级子域名,比如*.foo.com的整数可用于foo.com,也可用于www . foo . com;
多域名证书可用于多个域名,比如foo . com和bar . com;

        认证级别越高,覆盖范围越广的证书,价格越贵。也有免费的整数,为了推广Https,电子前哨基金会成立了Let’s Encrypt提供免费整数。证书的经销商也很多,知名度比较高的有亚洲诚信(Trust Asia)。

Https协议/SSL协议

        Https协议是以安全为目标的Http通道,就是安全版的Http;
        Http下加入SSL层(现在主流的是SLL/TLS),SSL是Https协议的安全基础。Https默认端口号为443.


Http存在的风险

风险种类风险描述
窃听风险Http采用明文传输数据,第三方可以获知通信内容;
篡改风险第三方可以修改通信内容;
冒充风险第三方可以冒充他人身份进行通信;

SSL/TLS协议是为了解决这些风险而设计,希望达到:
        1.所有信息加密传输,三方窃听通信内容;
        2.具有校验机制,内容一旦被篡改,通信双方立刻会发现;
        3.具备身份整数,防止身份被冒充;

Http和Https的对比

        1.Https协议需要到CA申请证书,大多数情况下需要一定费用;
        2.Http是超文本传输协议,信息采用明文传输,Https则是具有安全性SSL加密传输协议;
        3.Http和Https端口号不一样,Http是80端口,Https是443端口;
        4.Http连接是无状态的,Https采用Http + SSL构建可进行加密传输、身份认证的网络协议,更安全;
        5.Http协议建立连接的过程比Https协议快。因为Https除了Tcp三次握手,还要经过SSL握手。连接建立之后数据传输速度,二者无明显区别;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值