HTTP总结

一、TCP总结

OSI的七层模型:
这里写图片描述

OSI对应的功能与协议族:
这里写图片描述

TCP是一个协议,协议是如何定义的,先看看它的数据格式,每个字段的含义,如下图:
这里写图片描述
具体说明如下:

  • Source Port和Destination Port:分别占用16位,表示源端口号和目的端口号;用于区别主机中的不同进程,IP地址用来区分不同主机的,源端口号和目的端口号配合上IP首部中的源IP地址就能确定为一个TCP连接
  • Sequenece Number:用来标识从TCP发送端向TCP接收端的数据字节流,他表示在这个报文中的第一个数据字节流在数据流中的序号;主要用来解决网络乱序的问题。
  • Acknowledgment Number:32位确认序号包发送确认的一端所期望收到的下一个序号,因此,确认需要应该是上次已成功收到数据字节序号+1,不过只有当标志位中的ACK标志(下面介绍)为1时该确认序列号的字段才有效。主要用来解决不丢包的问题。
  • Offset:给出首部中32bit字的数目,需要这个值是因为任选字段的长度是可变的。这个字段占4bit(最多能表示15个32bit的字,即4*15=60个字节的首部长度),因此TCP最多有60个字节的首部。然而,没有任选字段,正常的长度是20字节。
  • TCP Flags:TCP首部中有6个比特,它们总的多个可同时被设置为1,主要是用于操控TCP的状态机,依次为URG,ACK,PSH,RST,SYN,FIN。
  • Window:窗口大小,也就是有名的滑动窗口,用来进行流量控制;

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)
现在来介绍一下这些的标志位:

URG:次标志表示TCP包的紧急指针域(后面马上就要说到)有效,用来保证TCP连接不被中断,并督促中间层设备要尽快处理这些数据。
ACK:此标志表示应答域有效,就是说前面所说的TCP的应答将会包含在TCP数据包中;有两个取值:0和1,为1的时候表示应答域有效,反之为0。
PSH:这个标志位表示Push操作。所谓Push操作就是是在数据包到达接受端以后,立即传送给应用程序,而不是在缓冲区排队。
RST:这个标志位表示连接复位请求。用来复位哪些产生错误的链接,也被用来拒绝错误和非法的数据包。
SYN:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1,ACK=0;连接被响应的时候,SYN=1,ACK=1。这个标志的数据包常常被用来进行端口扫描。扫描者发送一个只有SYN的数据包,如果对方主机响应了一个数据包回来,就表明这台主机存在这个端口,但是由于这种扫描只是进行TCP三次握手的第一次握手,因此这种扫描的成功表明被扫描的机器很不安全,一台安全的主机将会强制要求一个连接严格的进行TCP的三次握手。
FIN:表示发送端已经达到数据末尾,也就是说双方数据传送完成,没有数据可以传送了,发送FIN标志位的TCP数据包后,连接将断开。这个表示的数据包也经常被用于进行端口扫描。

二、TCP3次握手和4次挥手

这里写图片描述
3次握手
1、第一次握手:建立连接,客户端先发送连接请求报文,将SYN位置为1,Sequence Number为X;然后,客户端进入SYN+SEND状态,等待服务器的确认;
2、第二次握手:服务器收到SYN报文。服务器收到客户端的SYN报文,需要对这个SYN报文进行确认,设置Acknowledgment Number为x+1(Sequence+1);同时,自己还要送法SYN消息,将SYN位置为1,Sequence Number为y;服务器将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN+RECV状态。
3、第三次握手;客户端收到服务器的 SYN+ACK报文段。然后将Acknowlegment Number设为y+1,向服务器发送ACK报文段,这个报文段发送完毕后,客户端端服务器都进入ESTABLISHED状态,完成TCP三次握手。
4次挥手
1、客户端(也可以是服务器),设置Sequence Number和Acknowledgment Number,向服务器发送一个FIN报文段。此时客户端进入FIN_WAIT_1状态;这表示客户端没有数据发送给主机了。
2、服务器收到客户端发来的FIN报文段,向客户端回一个ACK报文段,Acknowledgement Number为Sequence Number加1;客户端进入FIN_WAIT_2状态,服务器进入CLOSE_WAIT状态;服务器告诉客户端,我同意你的”关闭”请求。
3、服务器向客户端发送FIN报文段,请求关闭连接,同时服务器进入LAST_ACK状态。
4、客户端收到服务器发送的FIN报文段,向主机发送ACK报文段,然后客户端进入TIME_WAIT状态,服务器收到客户端的ACK报文段以后,就关闭连接,此时,客户端等待2MSL后一次没有到收到回复,则证明Server端已正常关闭,那好,客户端也可以关闭连接了。

相关问题:
1、为什么握手要“3”次?
在谢希仁的<计算机网络>中是这样说的
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”

2、为什么握手要“3”次,而挥手要”4”次?
假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说”我Client端没有数据要发给你了”,但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,”告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息”。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,”告诉Client端,好了,我这边数据发完了,准备好关闭连接了”。Client端收到FIN报文后,”就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,”就知道可以断开连接了”。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

3、为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假设网络是不可靠的,一切都可能发生,比如有可能最后一个ACK丢失。所以TIME_WAIT状态是用来重发可能丢失的ACK报文。

三、HTTPS

1、什么是HTTPS?
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer/基于安全套接字层的超文本传输协议,或者也可以说HTTP OVER SSL)是网景公司开发的web协议。SSL的版本最高为3.0,后来的版本被称为TLS,现在所用的协议版本一般都是TLS,但是由于SSL出现的时间比较早,所以现在一般指的SSL一般也就是TLS,本文中后面都统一使用SSL来代替TLS。HTTPS是以安全为目标的HTT通道,简单讲就是HTTP的安全版,所以你可以理解HTTPS=HTTP+SSL。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容是SSL。

2、HTTP协议的那些安全缺点:
1、通信使用明文(不加密),内容可能被窃听(抓包工具可以获取请求和响应内容)
2、不验证通讯方的身分,任何人都坑你发送请求,不管对方是谁都返回相应
3、无法证明报文的完整性,可能会遭到篡改,即没有办法确认发出的请求/相应前后一致。

这里先简单的说下HTTPS说下他的优势:
1、内容加密,建立一个信息的安全通道,来保证数据传输过程的安全性。
2、身份认证,确认网站的真是性。
3、数据完整性,防止内容被第三方冒充或者篡改。
HTTPS并非应用层的一种新协议,只是HTTP通讯接口部分用SSL(secure socket layer)和TLS(transport layer security)协议代替,通常HTTP直接和TCP通信时,当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通讯,因此所以HTTPS其实就是身披SSL保护外衣的HTTP

3、HTTP与HTTPS的不同点:
- HTTPS需要用到CA申请证书。
- HTTP是超文本传输协议,信息是明文的;HTTPS则是具有安全性的SSL加密传输协议。
- HTTPS和HTTP使用的是完全不同的连接方式,用的端口也不一样,HTTP是80,HTTPS是443。
- HTTP的连接很简单,是无状态的,HTTPS是HTTP+SSL协议构建的,可进行加密传输、身份认证的网络协议,比HTTP协议安全。

四、加密和证书

1、加密算法:
加密的2种技术:

  • 对称加密(也叫私钥加密),是指加密和解密使用相同的密钥的加密算法。有时又叫传统加密算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥或者单密钥算法,常见的对称加密有DES(Data
    Encryption Standard)、AES(Advanced Encryption Standard)、RC4、IDEA。
  • 非对称加密,是指和甲酸算法不同,非对称加密算法有两个密钥:公开密钥(public key)和私有密钥(private
    key);并且加密密钥和解密密钥是成对出现的。非对称加密算法在加密和解密过程使用了不同的密钥,非对称加密也称公钥加密,在密钥对中,其中一个密钥是对外公开的,所有都可以获取到,称为公钥,其中一个密钥是不公开的称为私钥。非对称加密算法对加密内容的长度有限制,不能超过公钥长度。常见的非对称加密RSA、DSA/DSS等。

2、数字摘要
数字摘要是采用单项Hash函数将需要加密的明文”摘要”成一串固定长度(128位)的密文,这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文摘要必定一定。“数字摘要”是https能确保数据完整性和防篡改的根本原因。常用的摘要主要有MD5、SHA1、SHA256等。
3、数字签名
数字签名技术就是对”非对称密钥加解密”和”数字摘要”两项技术的应用,它将摘要信息用发送者的私钥加密,与原文一起传送给接受者。接受者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原因产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输的过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。
数字签名的过程:
明文——>服务器公钥加密——>密文——>hash运算——>摘要——>私钥加密——>数字签名
发送:密文+签名

数字签名的两种功效:
1、能确定消息确实由发送方签名并发出来的,因为别人假冒不了发送方的签名。
2、数字签名能确定消息的完整性。
这里写图片描述
非对称加密
1、客户端发起HTTPS请求
2、向客户端传送证书
3、客户端解析证书
4、客户端生成随机密钥
5、用证书加密客户端密钥 传送给服务器密钥和加密算法
6、服务端自己的私钥解密获取密钥
对称加密
7、服务端用该密钥加密数据传输给客户端
8、客户端也用该密钥加密数据传输给服务端

4、数字证书
对于请求方来说,它怎么能确定它所得到的公钥一定是从目标主机哪里发送的,
而且没有被篡改过呢?亦或者请求的目标主机本身就是从事窃取用户信息的不正当行为呢?这时候,我们需要一个权威的值得信赖的第三方机构(一般是由政府机构审核并授权的机构)来统一对外发送主机机构的公钥,只要请求方这种机构获取公钥,就避免了上述问题
(1)数字证书的颁发过程:
用户首先产生自己的密钥对,并将公共密钥及部分个人身份信息传送给认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发送给用户一个数字证书,该证书内包含用户的人信息和他的公钥信息,同时还附有认证中心的签名信息(根证书私钥)签名。用户就可以使用自己的数字证书进行相关的各种活动。数字证书由独立的证书发行机构发布,数字证书各不相同,每种证书可提供不同级别的可信度。
(2)证书包含哪些内容

1、证书颁发机构的名称
2、证书本身的数字签名
3、证书持有者的公钥
4、证书签名用到的Hash算法
(3)验证证书的有效性
浏览器默认都是会内置CA跟证书,其中根证书包含了CA的公钥

防伪造证书1:如果证书颁发机构是伪造的,浏览器不认识,直接认为是危险证书
防伪造证书2:证书颁发机构是的确存在的,于是根据CA名,找到对应内置的CA根证书、CA的公钥。用CA的公钥,对伪造的证书的摘要进行解密,发现解密不了,认为是危险证书
防篡改:对于篡改的证书,使用CA的公钥对数字签名进行解密得到摘要A,然后再根据签名的Hash算法计算出证书的摘要B,对比A与B,若相等则正常,若不相等则是被篡改过的。
防过期失效验证:正式课在其过期前辈吊销,通常情况是该证书的私钥已经失密。较新的浏览器如果Chrome、Firefox、Opera和Internet Explored 都实现了在线证书的状态协议(OCSP)以排除这种情况:浏览器将网站提供的证书序列号通过OCSP发送给证书颁发机构,后者会告诉浏览器证书是否还是有效的。

五、SPDY、HTTP2.0

1、SPDY(读作“SPeeDY”)是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。新协议的功能包括数据流的多路复用、请求优先级以及HTTP报头压缩。谷歌表示,引入SPDY协议后,在实验室测试中页面加载速度比原先快64%。

  1. 降低延迟,针对HTTP高延迟的问题,SPDY优雅的采取了多路复用(multiplexing)。多路复用通过多个请求stream共享一个tcp连接的方式,解决了浏览器阻hol
    blocking的问题,降低了延迟同时提高了带宽的利用率。
  2. 请求优先级(request prioritization)。多路复用带来一个新的问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。SPDY允许给每个request设置优先级,这样重要的请求就会优先得到响应。比如浏览器加载首页,首页的html内容应该优先展示,之后才是各种静态资源文件,脚本文件等加载,这样可以保证用户能第一时间看到网页内容。
  3. header压缩。前面提到HTTP1.x的header很多时候都是重复多余的。选择合适的压缩算法可以减小包的大小和数量。
  4. 基于HTTPS的加密协议传输,大大提高了传输数据的可靠性。
  5. 服务端推送(server push),采用了SPDY的网页,例如我的网页有一个sytle.css的请求,在客户端收到sytle.css数据的同时,服务端会将sytle.js的文件推送给客户端,当客户端再次尝试获取sytle.js时就可以直接从缓存中获取到,不用再发请求了。
    注意:
    浏览器阻塞(HOL blocking):浏览器会因为一些原因阻塞请求。浏览器对于同一个域名,同时只能有 4 个连接(这个根据浏览器内核不同可能会有所差异),超过浏览器最大连接数限制,后续请求就会被阻塞。
    2、HTTP2.0:SPDY的升级版
    HTTP2.0可以说是SPDY的升级版(其实原本也是基于SPDY设计的),但是,HTTP2.0 跟 SPDY 仍有不同的地方,如下:
    HTTP2.0和SPDY的区别:
    HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS
    HTTP2.0 消息头的压缩算法采用 HPACK http://http2.github.io/http2-spec/compression.html,而非 SPDY 采用的 DEFLATE http://zh.wikipedia.org/wiki/DEFLATE

3、HTTP2.0和HTTP1.X相比的新特性
新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。

  1. header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
    fields表,既避免了重复header的传输,又减小了需要传输的大小。
  2. 服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能。
  3. 服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能。

3、HTTPS与HTTP的一些区别

  1. HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
  2. HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
  3. HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  4. HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值