前言
无论是 C/S 开发还是 B/S 开发,无论是前端开发还是后台开发,网络总是无法避免的,数据如何传输,如何保证正确性和可靠性,如何提高传输效率,如何解决会话管理问题,如何在网络拥堵环境下采取措施。这些都是需要了解的。
今天总结下与网络相关的知识,不是那么详细,但是包含了我认为重要的所有点。如果想深入了解的可以参考《图解HTTP[上野 宣]》、《图解TCP/IP(第5版)[竹下隆史]》以及计算机网络相关教材。
概要
网络知识我做了 8 个方面的总结,包括DNS协议,HTTP协议,HTTPS协议,TCP协议,IP协议,TCP/IP,Web攻击,其他协议。以下对这些内容做一些简单的总结,同时我也有完整的思维导图,博客上不方便展示,若有需要,联系我。
1. DNS 协议
作用:提供域名到IP地址之间的解析服务。或逆向从IP地址反查域名的服务。
2. HTTP协议
2.1 特点
2.2 HTTP 报文
用于HTTP协议交互的信息称为HTTP报文。
请求报文:
-
报文首部
-
请求行
-
请求首部字段
-
通用首部字段
-
实体首部字段
-
其他
-
空行
-
报文主体
响应报文:
-
报文首部
-
状态行
-
响应首部字段
-
通用首部字段
-
实体首部字段
-
其他
-
空行
-
报文主体
发送多种数据的多部分对象集合:
内容协商:
2.3 HTTP状态码
1XX:接收的请求正在处理
2XX:请求正常处理完毕
-
200 OK
-
204 NoContent
-
206 Partial Content
3XX:需要进行附加操作以完成请求
-
301 Moved Permanenetly
-
302 Found
-
303 See Other
-
304 Not Modified
-
307 Temporary Redirect
4XX:服务器无法处理请求
-
400 Bad Request
-
401 Unauthorized
-
403 Forbidden
-
404 Not Found
5XX:服务器处理请求出错
2.4 HTTP1.1 和HTTP1.0的区别
可扩展性:定义Via头域,增加版本号的支持。
缓存:
带宽优化:允许请求资源的某部分,而不是整个资源。
长连接:
2.5 Cookie与Session的区别
1、存取方式的不同
-
Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数据,需求先进行编码。Cookie中也不能直接存取Java对象。若要存储略微复杂的信息,运用Cookie是比较艰难的。
-
Session中能够存取任何类型的数据,包括而不限于String、Integer、List、Map等。Session中也能够直接保管Java Bean乃至任何Java类,对象等,运用起来十分便当。能够把Session看做是一个Java容器类。
2、隐私策略的不同
3、有效期上的不同
3、服务器压力的不同
-
Cookie保管在客户端,不占用服务器资源。假如并发阅读的用户十分多,Cookie是很好的选择。关于Google、Baidu、Sina来说,Cookie或许是唯一的选择。
-
Session是保管在服务器端的,每个用户都会产生一个Session。假如并发访问的用户十分多,会产生十分多的Session,耗费大量的内存。因而像Google、Baidu、Sina这样并发访问量极高的网站,是不太可能运用Session来追踪客户会话的。
4、浏览器支持的不同
5、跨域支持上的不同
2.6 电脑访问网页的过程
用到的协议:DNS、HTTP、OSPF、IP、ARP。
过程描述:
-
DNS把域名解析成对应的IP
-
发送一次请求,服务器返回一个永久重定向响应,这样浏览器就知道要访问的正确网址
-
发送请求html的请求,这个连接过程基于TCP/IP三次握手四次挥手的,建立连接
-
服务器返回一个html响应
-
浏览器根据渲染引擎解析返回的html响应,呈现内容
-
继续发送内嵌在html文件其他资源的请求,比如css、js、图片资源等
-
加载整个页面
2.7 Ping
同网段:
-
主机A要去Ping主机B, 主机A会封装两层报文,主机A先检查自己MAC地址中是否有B的MAC地址,如果没有就向外发送一个ARP广播包。
-
交换机收到这个ARP后,会检查在交换机中是否包含B的MAC地址,如果有就直接返回给A;如果没有就向所有端口发送ARP,该网段的主机的MAC如果与B的MAC地址不同就丢弃,如果主机B收到了该ARP就马上返回相同格式的ARP。
-
这时主机A已经有了B的MAC地址,就把B的MAC地址封装到ICMP报中,向主机B发送一个回显请求。
-
主机B收到该报文后,知道是主机A的一个回显请求,就会返回一个相同格式的报文。这样就完成了同一个网段的Ping的过程。
不同网段:
-
主机A要去Ping一个不同网段的主机C,主机A会去找网关转发
-
如果主机A不知道网关的MAC地址,就会发送一个ARP广播一下,这样就知道了网关的MAC地址
-
网关收到主机A的ICMP报文,根据上面的目的IP,会去查找路由表,找到一个出口指针,给主机C发送一个ICMP报文
-
如果网关不知道主机C的MAC地址,就会给网关内所有的主机发送一个ARP,从而找到主机C的MAC地址
-
主机C收到主机A的报文就会给主机A发送一个回显请求。这样就完成了不同网段的Ping的请求
2.8 路由器与交换机的区别
路由器包含了交换机的功能,交换机主要的作用是扩展接口。
2.9 确认访问用户身份的认证
-
basic认证
-
digest认证
-
ssl客户端认证
-
基于表单认证
-
认证多半为基于表单认证
-
session管理及cookie应用
2.10 websocket
全双工通信,特点:
3. HTTPS协议
3.1 HTTP缺点
通信使用明文可能会被窃听,解决方式:
不验证通信方身份就可能遭遇伪装, 解决方式:查明对手的证书
无法证明报文完整性,可能已遭篡改:数字签名,MD5并不可靠,应用HTTPS。
3.2 HTTP+加密+认证+完整性保护=HTTPS
3.3 HTTPS是身披SSL外壳的HTTP
3.4 HTTP采用混合加密机制
3.5 证明公开密钥正确性的证书
3.6 SSL协议
慢:
4. TCP协议
4.1 传输层
4.2 作用
4.3 大块数据分割成报文段(segment)
4.4 三次握手
-
发送端发带SYN标志的数据包给对方。
-
接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。
-
最后,发送端再回传一个带ACK标志的数据包,代表“握手”结束
握手某个阶段中断,TCP会以相同的顺序发送相同的数据包。
4.5 四次挥手
-
客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
-
服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
-
服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
-
客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
4.6 流量控制
4.7 差错控制
4.8 拥塞控制
拥塞窗口:
-
发送方的窗口大小是接收窗口与拥塞窗口中的较小值。
-
拥塞窗口的大小又取决于网络的拥塞状况。
拥塞策略:
拥塞控制流程: