- 复杂的网络怎么传输数据的
- 为了简化网络的复杂度,网络通信的不同方面被分解为多层次结构,每- -层只与紧挨着的上层或者下层进行交互,将网络分层,这样就可以修改,甚至替换某-层的软件,只要层与层之间的接口保持不变,就不会影响到其他层。
- OSI( Open System Interconnection Reference Model):开放系统互联参考模型
- TCP/IP 协议族
- 一个HTTP请求的分层解析流程
1. HTTP
HTTP协议超文本传输协议(HyperText Transfer Protocol, HTTP):
一种无状态的, 以请求/应答方式运行的协议它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统灵活的互动
- HTTP报文格式
HTTP协议的请求报文和响应报文的结构基本相同,由三大部分组成:- 起始行(start line) :描述请求或响应的基本信息
- 头部字段集合(header) :使用key-value形式更详细地说明报文
- 消息正文(entity) :实际传输的数据,它不一定是纯文本,可以是图片、视频等_ -进制数据
- 请求行报文格式
● 请求方法:如GET/HEAD/PUT/POST,表示对资源的操作;
● 请求目标:通常是一个URI,标记了请求方法要操作的资源;
● 版本号:表示报文使用的HTTP协议版本。 - 响应行报文格式
● 版本号:表示报文使用的HTTP协议版本;
● 状态码: -个三位数,用代码的形式表示处理的结果,比如200是成功, 500 是服务器错误;
● 原因:作为数字状态码补充,是更详细的解释文字,帮助人理解原因 - HTTP头字段
头部字段是key-value的形式,key 和value之间用*:”分隔,最后用CRLF换行表示字段结束。
比如前后分离时经常遇到的要与后端协商传输数据的类型"Content-type:application/ison",这里key就是"Content-type", value 就是applicatinjson"。HTTP 头字段非常灵活,不仅可以使用标准里的Host. Connection 等已有头,也可以任意添加自定义头,这就给HTTP协议带来了无限的扩展可能。
头字段注意事项
- 字段名不区分大小写,字段名里不允许出现空格,可以使用连字符"”,但不能使用下划线“”(有的服务器不会解析带_ “的头字段)。字段名后面必须紧接着:”,不能有空格,而“:"后的字段值前可以有多个空格;
- 字段的顺序是没有意义的,可以任意排列不影响语义;
- 字段原则上不能重复,除非这个字段本身的语义允许,例如Set-Cookie.
- 常用头字段
HTTP协议中有非常多的头字段,但基本上可以分为四大类:
● 请求字段:请求头中的头字段;如Host, Referer。
● 响应字段:响应头中的头字段,如: Server, Date ; .
● 通用字段:在请求头和响应头里都可以出现,如Content-type, Connection ;
2. HTTP请求的完整过程
当用户在浏览器输入网址回车之后,网络协议都做了哪些工作呢?
-
首先干活的是浏览器应用程序,他要解析出URL中的域名
-
根据域名获取对应的ip地址,首先从浏览器缓存中查看,如下可以查看浏览器中域名对应ip的解析
chrome://net-export/
- 如果没有则从本机域名解析文件hosts (lethosts) 中查看,还没有则从LDNS (Localdnsserver) . Rootserver或名服务器、 国际顶级域名服务商的DNS的层层解析
- 拿到P地址后,浏览器就可以发起与服务器的三次握手
- 握手建立之后,就开始组装htp请求报文,发送报文
- 服务器收到请求报文之后开始,请求报文解析,生成响应数据,发送响应数据
- 浏览器收到响应之后,开始渲染页面
3.TCP协议
TCP (Transmission Control Protocol);
面向连接的,可靠的,基于字节流的传输层通信协议
特点:
- 基于连接的:数据传输之前需要建立连接
- 全双工的:双向传输
- 字节流:不限制数据大小,打包成报文段,保证有序接收,重复报文自动丢弃
- 流量缓冲:解决双方处理能力的不匹配
- 可靠的传输服务:保证可达,丢包时通过重发机制实现可靠性
- 拥塞控制:防止网络出现恶性拥塞
TCP连接管理
-
TCP连接:四元组[源地址,源端口,目的地址,目的端口]
-
确立连接: TCP三次握手
a.同步通信双方初始序列号( ISN, initial sequence number ) b.协商TCP通信参数(MSS, 窗口信息,指定校验和算法)
报文
如何进行握手?(三次握手)
如何关闭连接?(四次挥手)
A:发送FIN数据包, 代表A不在发送数据
B:收到请求,开始应答,避免了A重新发送FIN重试(应答机制)
B:处理完数据之 后关闭,关闭连接,及发送FIN请求
A:收到请求后发送ACK应答, B服务可以释放连接
等待2MSL后释放连接
1.防止报文丢失,导致B重复发送FIN
2.防止滞留在网络中的报文,对新建立的连接造成数据扰乱
字节流的协议
TCP把应用交付的数据仅仅看成时一-连串的无结构的字节流,TCP并不知道字节流的含义,TCP并不关心应用程序一次将多大的报文发送到TCP的缓存中,而是根据对方给出的窗口值和当前网络拥堵的程度来决定一个报文段应该包含多少个字节。
- MSS: Max Segment Size,默认536byte实际数据
数据可靠性传输
重传机制
- ack报文丢失
- 请求报文丢失
4.HTTPS协议
-
由于HTTP天生“明文”的特点,整个传输过程完全透明,任何人都能够在链路中截获、修改或者伪造请求/响应报文,数据不具有可信性。因此就诞生了为安全而生的HTTPS协议。使用HTTPS时,所有的HTTP请求和响应在发送到网络之前,都要进行加密。
-
SSL/TL .S
SSL即安全套接层(Secure Sockets Layer),由网景公司于1994年发明,IETF在1999年把它改名为TLS
(传输层安全, Transport Layer Security) ,正式标准化,到今天TLS已经发展出了主流的三个版本,分别是2006年的1.12008年的1.2,2018的1.3, 每个新版本都紧跟密码学的发展和互联网的现状,持续强化安全和性能,已经成为了信息安全领域中的权威标准。 -
摘要算法
摘要算法能够把任意长度的数据’压缩成固定长度、而且独一无二的“摘要"字符串,就好像是给这段数据生成了-一个数字"指纹”。任意微小的数据差异,都可以生成完全不同的摘要。所以可以通过把明文信息的摘要和明文一起加密进行传输,数据传输到对方之后再进行解密,重新对数据进行摘要,再比对就能发现数据有没有被篡改。这样就保证了数据的完整性。
- 对称密钥加密算法:编、解码使用相同密钥的算法,如(AES,RC4,ChaCha20 )。
- 非对称密钥加密算法:它有两个密钥,-一个叫“公钥”,-个叫“私钥”。两个密钥
是不同的,公钥可以公开给任何人使用,而私钥必须严格保密。非对称加密可以解决“密钥交换”的问题。网站秘密保管私钥,在网上任意分发公钥,你想要登录网站只要用公钥加密就行了,密文只能由私钥持有者才能解密。而黑客因为没有私钥,所以就无法破解密文。非对称密钥加密系统通常需要大量的数学运算,比较慢。如(DH、DSA、RSA、 ECC )
TLS里使用的混合加密方式,即把对称加密和非对称加密结合起来呢,两者互相取长补短,即能高效地加密解密,又能安全地密钥交换。大致流程如下:1.通信开始的时候使用非对称算法如RSA,ECDHE先解决密钥交换的问题
更详细的文章