计算机网络
重点了解网络分层模型(OSI、TCP/IP和五层模型)和常用的协议(HTTP/HTTPS 和 TCP/IP)
分层模型
- 概述:OSI模型七层,概念清楚,理论也比较完整,但其既复杂又不实用;TCP/IP模型四层,应用非常广泛,计算机网络的课程一般会把两者折中为五层架构,这样既简洁又能将概念阐述清楚。
- 数据传输流程:应用进程数据线传送到应用层,加上应用层首部,成为应用层PDU在传送到运输层,加上运输层首部,成为运输层报文在传送到网络层,加上网络层首部,成为IP数据报在传送到数据链路层,加上链路层首部和尾部没成为数据链路层帧,然后传送到物理层,最后把比特流传送到物理媒体。
- 应用层:包括IP地址的解析(DNS),文件传输(FTP)等
- 表示层:数据的表示、安全、压缩。
- 会话层:建立、管理、终止会话。
- 传输层:实现端到端的通信(UDP,TCP)
- 网络层:进行路由选择,即为数据报转发选择路径(IP)
- 数据链路层:信号点到点的传输,传输有地址的帧
- 物理层:以二进制数据形式在物理媒体上传输数据
详细:https://blog.csdn.net/qq_31707969/article/details/106163691
HTTP协议
概述
- 概念:Hyper Text Transfer Protocol 超文本传输协议,定义了客户端和服务器端通信时,发送数据的格式
- 优点:简单、灵活、无连接,无状态。
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
- 缺点:明文传输不安全
- 通信内容明文传输,容易被第三方窃听
- 容易被第三方劫持、篡改从而无法保证内容的完整性与正确性
- 不验证通信方的身份,因此有可能遭遇伪装,无法保证信息的来源
- 请求方式:HTTP协议有7中请求方式,常用的有2种,GET,POST
- 常见状态码:
- 1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态码
- 2xx:成功。代表:200
- 3xx:重定向。代表:302(重定向),304(访问缓存)
- 4xx:客户端错误。404(请求路径没有对应的资源),405:请求方式没有对应的doXxx方法
- 5xx:服务器端错误。代表:500(服务器内部出现异常)
数据格式
- 请求消息数据格式
- 请求行:请求方式 请求url 请求协议/版本,比如
GET /login.html HTTP/1.1
- 请求头:客户端浏览器告诉服务器一些信息 请求头名称: 请求头值
- 请求空行 空行,就是用于分割POST请求的请求头,和请求体的
- 请求体(正文):封装POST请求消息的请求参数的
- 请求行:请求方式 请求url 请求协议/版本,比如
- 响应消息数据格式
- 响应行:组成:协议/版本 响应状态码 状态码描述
- 响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态。
- 1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态
- 2xx:成功。代表:200
- 3xx:重定向。代表:302(重定向),304(访问缓存)
- 4xx:客户端错误。404(请求路径没有对应的资源),405:请求方式没有对应的doXxx方法
- 5xx:服务器端错误。代表:500(服务器内部出现异常)
- 响应行:组成:协议/版本 响应状态码 状态码描述
请求方式
HTTP协议有7中请求方式,常用的有2种
GET:
请求参数在请求行中,在url后。
请求的url长度有限制的
不太安全
POST:
请求参数在请求体中
请求的url长度没有限制的
相对安全
HTTPS协议
加密方式
- 概述:基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护
- 优点:通信内容进行加密,防止信息在传输过程中泄露
保证数据完整性、准确性
对数据来源进行验证,确保来源无法伪造
- 优点:通信内容进行加密,防止信息在传输过程中泄露
- 基本概念:
- 加密和解密用同一个秘钥的加密方式叫做对称加密。数据是加密传输的,客户端拥有秘钥可以得到解密的数据。
- 缺点:如果秘钥唯一,那么破解一个客户端,或者伪装成客户端就可以获取秘钥了。如果秘钥不唯一,需要给每个客户端发送一个秘钥,这个过程也容易被拦截。
- 非对称加密:公钥加密的内容,只有私钥可以解开,私钥加密的内容,所有的公钥都可以解开。
- 缺点:私钥只有服务端拥有,但是公钥依然可能被获取和篡改,导致服务器端发送的内容很被破解,或者客户端拿到的公钥是假的。
- 混合加密: 其实就是对称加密 与非对称加密 一起用,HTTPS的传输过程就是这种方式。
- A:利用非对称加密方式的公钥将“对称加密要用到的密钥key” 进行加密,传给B
- B:利用非对称加密方式的私钥解密 得到 “对称加密要用到的密钥key”
- B:得到 “对称加密要用到的密钥key”后利用这个key 对真正要传输的明文src进行对称加密,传给A
- A:用对称加密方式的密钥key对明文进行解密,得到明文src
- 缺点:最终传输过程都是利用对称加密方式进行加密,这样做的目的是防止第三方篡改窃听明文内容。但是还有一个问题:无法确定第1步里面的A是合法者还是伪造者,需要一个权威的验证机构。
- CA:证书颁发机构(Certificate Authority,简称CA),CA数量并不多,客户端(浏览器)内置了所有受信任CA的证书。CA的主要作用就是对公钥(和其他信息)进行数字签名后生成证书,服务器的公钥和网站信息通过CA的私钥签名确保公钥、网站等信息不会被中间人更改。
- 加密和解密用同一个秘钥的加密方式叫做对称加密。数据是加密传输的,客户端拥有秘钥可以得到解密的数据。
工作流程
- 数据传输过程:
- 浏览器请求访问网站
- 网站服务器将经过CA签字认真的证书发送给浏览器,里面有服务器发送的公钥
- 浏览器有CA的公钥,开始验证接受到的签字证书,确认另一端身份的真实性
- 验证成功,创建一个随机秘钥发送过去,并且用服务器发送的公钥进行加密
- 服务器端用自身的私钥对信息进行解密,得到秘钥
- 这时候只有浏览器和服务器知道随机秘钥是什么,然后开始进行对称加密传递信息
- 服务器认证过程
- 服务器端想要用https协议加密网站需要先找CA检修签字认证
- CA会通过线上线下的方式对服务器端身份进行验证
- 验证成功后用CA自己的私钥进行签字,任何有CA公钥的的浏览器都可以验证服务器的身份了
SSL和TSL
- SSL:为了解决 HTTP 协议的缺点,设计了SSL协议,SSL 是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。
- TLS:ssl的升级版,是“Transport Layer Security”的缩写,中文叫做“传输层安全协议”。所谓的 HTTPS 其实是“HTTP over SSL”或“HTTP over TLS”,它是 HTTP 与 SSL/TSL 的结合使用而已。
- TLS是SSL的标准化后的产物,TLS1.0和SSL3.0几乎没有区别,TLS的主要目标是使SSL更安全,采取了不同的加密算法
https://blog.csdn.net/xiaoming100001/article/details/81109617
TCP/IP协议
为了保证传输的安全性,要经过三次握手和四次挥手
三次握手
建立连接协议(三次握手):
- 第一次握手:客户端发送 syn包(syn=x) 的数据包到服务器,并进入SYN_SEND状态,等待服务器确认;
- 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV 状态;
- 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。
- 握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP连接都将被一直保持下去。
如果没有第三次握手会出现什么问题:防止失效的连接请求报文段被服务端接收,从而产生错误。
四次挥手
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
- 第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可以接受数据。
- 第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号, SYN 和 FIN 都有seq序号)。
- 第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。
https://www.jianshu.com/p/29868fb82890
Cookies与Seesion
- 会话技术:一次会话中包含多次请求和响应,浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止,会话技术的功能是在一次会话的范围内的多次请求间,共享数据。
- Cookie:客户端会话技术,将数据保存到客户端浏览器, 浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)
- Cookie一般用于存出少量的不太敏感的数据
- 在不登录的情况下,完成服务器对客户端的身份识别
- Seesion:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。
- session可以存储任意类型,任意大小的数据
- 区别:
- Session 存储数据在服务器端,Cookie在客户端
- Session 没有数据大小限制,Cookie有
- Session 数据安全,Cookie相对于不安全
- session的生命周期是多久:
- Session存储在服务器的内存中(为了高速存取)。
- Session何时生效:Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session
- 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为30分钟。或者调用Session的invalidate方法。
重定向与转发
- 重定向:浏览器在拿到服务器返回的状态码(301,302)后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B,而且历史的回退按钮也亮了)
- 301 redirect: 301 代表永久性转移(Permanently Moved)。
- 302 redirect: 302 代表暂时性转移(Temporarily Moved )。
- 区别:301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。
- 转发:是通过服务器的特殊设置,将访问您当前域名的用户引导到您指定的另一个网络地址。域名指向可能这个站点原有的域名或网址是比较复杂难记的。例如,URL转发可以让用户在访问http://www.abc.com时,自动转向访问到一个您自己指定的网址“http://www.123.com” ,URL转发功能往往是域名注册服务商提供的域名注册后的增值服务。
- 直接转发方式(Forward),客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的。
- 间接转发方式(Redirect)实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。比如
- 区别:
- 转发是服务器行为,重定向是客户端行为。
- 跳转限制:重定向可以跳转到任意URL,转发只能跳转本站点资源;
- 地址栏不同:重定向地址栏会发生变化,转发地址栏不会发生变化;
- 请求次数:重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址;重定向至少请求两次,转发可以请求一次(直接转发);
https://blog.csdn.net/grandPang/article/details/47448395