前言
复习计算机网络
OSI、五层协议体系结构、TCP/UDP协议体系结构
记住模型,及其他们的作用
- 应用层:为应用进程提供服务。应用层协议定义的是应用进程间通讯和交互的规则,不同的应用有着不同的应用层协议,如 HTTP协议(万维网服务)、FTP协议(文件传输)、SMTP协议(电子邮件)、DNS(域名查询)等。
- 传输层:为两个主机进程提供通信服务,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,,主要包含两种协议:TCP、UDP。(选择合适的运输方式)
- 网络层:
IP
寻址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。(选择合适的路线) - 数据链路层:将比特封装为字节,将字节封装为帧,然后进行传输。
- 物理层:确保数据可以在各种物理媒介上进行传输,为数据的传输提供可靠的环境。
TCP和UDP
TCP和UDP区别
应用场景
TCP:需要不考虑时间,看好准确性的场景,例如文件传输
UDP:时间快,但是效率不高的场景,例如qq聊天,视频会议
TCP三次握手和四次挥手
三次握手
-
第一次握手: 客户端向服务端发送连接请求报文段。该报文段中包含自身的数据通讯初始序号。请求发送后,客户端便进入 SYN-SENT 状态。
-
第二次握手: 服务端收到连接请求报文段后,如果同意连接,则会发送一个应答,该应答中也会包含自身的数据通讯初始序号,发送完成后便进入 SYN-RECEIVED 状态。
-
第三次握手: 当客户端收到连接同意的应答后,还要向服务端发送一个确认报文。客户端发完这个报文段后便进入 ESTABLISHED 状态,服务端收到这个应答后也进入 ESTABLISHED 状态,此时连接建立成功。
TCP 三次握手的建立连接的过程就是相互确认初始序号的过程,告诉对方,什么样序号的报文段能够被正确接收。 第三次握手的作用是客户端对服务器端的初始序号的确认,确认双方都能发送和收到数据。如果只使用两次握手,那么服务器就没有办法知道自己的序号是否 已被确认。同时这样也是为了防止失效的请求报文段被服务器接收,而出现错误的情况。
为什么TCP连接的时候是3次?两次是否可以?
不可以,主要从以下两方面考虑(假设客户端是首先发起连接请求):
- 假设建立TCP连接仅需要两次握手,那么如果第二次握手时,服务端返回给客户端的确认报文丢失了,客户端这边认为服务端没有和他建立连接,而服务端却以为已经和客户端建立了连接,并且可能向服务端已经开始向客户端发送数据,但客户端并不会接收这些数据,浪费了资源。如果是三次握手,不会出现双方连接还未完全建立成功就开始发送数据的情况。
- 如果服务端接收到了一个早已失效的来自客户端的连接请求报文,会向客户端发送确认报文同意建立TCP连接。但因为客户端并不需要向服务端发送数据,所以此次TCP连接没有意义并且浪费了资源。
四次挥手
-
第一次 挥手 : 若客户端认为数据发送完成,则它需要向服务端发送连接释放请求。
-
第二次 挥手:服务端收到连接释放请求后,会告诉应用层要释放 TCP 链接。然后会发送 ACK 包,并进入 CLOSE_WAIT 状态,此时表明客户端到服务端的连接已经释放,不再接收客户端发的数据了。但是因为 TCP 连接是双向的,所以服务端仍旧可以发送数据给客户端。
-
第三次挥手:服务端如果此时还有没发完的数据会继续发送,完毕后会向客户端发送连接释放请求,然后服务端便进入 LAST-ACK 状态。
-
第四次 挥手 : 客户端收到释放请求后,向服务端发送确认应答,此时客户端进入 TIME-WAIT 状态。该状态会持续 2MSL(最大段生存期,指报文段在网络中生存的时间,超时会被抛弃) 时间,若该时间段内没有服务端的重发请求的话,就进入 CLOSED 状态。当服务端收到确认应答后,也便进入 CLOSED 状态。
TCP 使用四次挥手的原因是因为 TCP 的连接是全双工的,所以需要双方分别释放到对方的连接,单独一方的连接释放,只代 表不能再向对方发送数据,连接处于的是半释放的状态。
最后一次挥手中,客户端会等待一段时间再关闭的原因,是为了防止发送给服务器的确认报文段丢失或者出错,从而导致服务器 端不能正常关闭
DNS
webSocket
http和https
HTTP协议
GET和POST的区别
安全场景:GET可以将参数直接放到url中然后向服务器发送,相对于post来说不太安全。
缓存:浏览器一般对GET请求进行缓存,对POST请求很少进行缓存
请求长度:浏览器由于对 url 长度的限制,所以会影响 get 请求发送数据时的长度。这个限制是浏览器规定的,并不是 RFC 规定的。
发送的报文格式: Get 请求的报文中实体部分为空,Post 请求的报文中实体部分一般为向服务器发送的数据。
POST和PUT的区别
POST:会对服务器里面的资源进行修改和创建一些新的内容(创建资源)
PUT:会对服务器的上数据进行修改,不会增加数据的种类(更新资源)
常见的请求头和响应头
请求头
- Accept:浏览器能够处理的内容类型
- Accept-Language:浏览器设置的语言
- Accept-Encoding:浏览器能处理的压缩编码
- Accept-Charset:浏览器能显示的字符集
- Cookie:当前页面设置任何的Cookie
- Host:发送请求页面所在的域
- User-Agent:浏览器的用户代理字符串
响应头
- server:服务器名称
- Cache-Control:控制缓存
- content-type:文档属于什么MIME类型
常见的Content-Type属性值:
- multipart/form-data:表单上传时一般使用它,文件上传也需要他
- application/json:服务器的消息主体是序列化后的JSON字符串
- text/xml:用来提交xml格式的数据
- application/x-www-form-urlencoded:浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。该种方式提交的数据放在 body 里面,数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL转码。
HTTP状态码304
服务器为了提高网站的访问速度,一般会使用缓存,对于那些和缓存内容一样的,就会使用缓存的内容,返回304
产生很多304原因
- 页面更新周期长或者不更新
- 静态页面
304产生的问题
- 权重下降
常见的HTTP请求方法
GET、POST、PUT、DELETE(删除服务器上的对象)、HEAD(获取报文首部,与GET相比,不返回报文主体部分)、OPTIONS(询问支持的请求方法,用来跨域请求)、CONNECT(要求在服务器通信时建立隧道,使用隧道进行TCP通信)、TRACE(回显服务器收到的请求,用于测试和诊断)
HTTP和HTTPS协议的区别
- HTTPS需要CA证书,费用比较高;而HTTP协议不需要
- HTTP协议是超文本传输协议,信息是明文的,HTTPS由安全性的SSL的加密传输协议
- 端口不同:HTTP端口为80,HTTPS端口号为443
- HTTP协议连接简单,并且是无状态的。HTTPS是由SSL和HTTP构建的可进行的加密传输、身份认证的网络协议,比HTTP更安全
GET方法URL长度限制
HTTP协议对URL的长度没有进行限制,这个限制是特定的浏览器及其服务器对它的限制。
对URL长度的限制是2083字节(2K+35)。由于IE浏览器对URL长度的允许值是最小的,所以开发过程中,只要URL不超过2083字节,那么在所有浏览器中工作都不会有问题。
当浏览器输入了url按下回车发生什么
(1)解析URL
(2)缓存判断
(3)DNS解析:解析域名的
(4)获取MAC地址
(5)TCP三次握手建立连接
(6)HTTPS握手
(7)返回数据:当页面请求发送到服务器端后,服务器端会返回一个 html 文件作为响应,浏览器接收到响应后,开始对 html 文件进行解析,开始页面的渲染过程。
(8)页面渲染
(9)Tcp四次握手断开连接
HTTP请求报文
请求行
请求头:上面写过
请求体:就是携带的数据
HTTP响应报文
状态行,响应头部,空行和响应体
状态行:协议版本,状态码,状态码描述(OK)
响应头部:上面写过
响应体:服务端返回来的数据
URL组成部分
www.aspxfans.com:8080/news/index.…
协议、域名、端口、虚拟目录、文件名、锚(#)、参数部分
端口号的作用
一台主机(对应一个IP地址)可以提供很多服务,比如web服务,ftp服务等。如果只有一个IP,就无法区分不同的网络服务,所以采用”IP+端口号”来区分不同的服务。
HTTP优点和缺点
HTTP状态码
2xx、3xx、4xx、5xx
2xx(成功状态码)
- 200 OK
- 204 无返回的内容,适用于客户端向服务端发送内容,服务端不向客户端发送内容
- 206 客户端进行了范围请求,而服务器端执行了这部分的 GET 请求。响应报文中包含由 Content-Range 指定范围的实体内容。
3xx(重定向状态码)
- 301 永久重定向
- 302 临时重定向
适用的场景: 1. 当我们在做活动时,登录到首页自动重定向,进入活动页面。 2. 未登陆的用户访问用户中心重定向到登录页面。 3. 访问404页面重新定向到首页。
- 303 表示资源存在着另一个 URL,应使用 GET 方法获取资源
- 304 告诉客户端有缓存,直接使用缓存中的数据。返回页面的只有头部信息,是没有内容部分的,这样在一定程度上提高了网页的性能。
- 307 temporary redirect,临时重定向,和302含义类似,但是期望客户端保持请求方法不变向新的地址发出请求
4xx(错误状态码)
- 400 Bad Request:请求报文中有语法错误。
- 401 Unauthorized:发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。
- 403 Forbidden:请求资源的访问被服务器拒绝了。
- 404 Not Found:服务器上无法找到请求的资源。
- 405 Method Not Allowed:客户端请求的方法虽然能被服务器识别,但是服务器禁止使用该方法。
5XX (Server Error 服务器错误状态码)
- 500 internal sever error(服务器请求错误)
- 501 Not Implemented,表示服务器不支持当前请求所需要的某个功能
- 503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求
HTTPS
什么是HTTPS
超文本传输安全协议,是通过计算机网络的进行安全传输。
HTTPS
经由HTTP
进行通信,利用SSL/TLS
来加密数据包。HTTPS
的主要目的是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
HTTPS握手
- 如果使用的是 HTTPS 协议,在通信前还存在 TLS 的一个四次握手的过程。首先由客户端向服务器端发送使用的协议的版本号、一个随机数和可以使用的加密方法。
- 服务器端收到后,确认加密的方法,也向客户端发送一个随机数和自己的数字证书。
- 客户端收到后,首先检查数字证书是否有效,如果有效,则再生成一个随机数,并使用证书中的公钥对随机数加密,然后发送给服务器端,并且还会提供一个前面所有内容的 hash 值供服务器端检验。
- 服务器端接收后,使用自己的私钥对数据解密,同时向客户端发送一个前面所有内容的 hash 值供客户端检验。
- 这个时候双方都有了三个随机数,按照之前所约定的加密方法,使用这三个随机数生成一把秘钥,以后双方通信前,就使用这个秘钥对数据进行加密后再传输。
前端加密
之后在一个文章里面写