- Applications(应用层,SMTP,FTP,HTTP)
- Transport(传输层,TCP,UDP)
- Internet(网络层,IP)
- NetWork Interface(数据链路层)
- HardWare(物理层)
(syn:synchronous;ack:Acknowledgement)
- 第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
- 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
- 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
超时重传是可靠性保证的另一个机制,其原理是发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,就重新发送数据,直到发送成功为止。
- TCP是面向连接,可靠的数据流传输;UDP是非面向连接,不可靠的数据流传输。
- TCP传输单位称为TCP报文段;UDP传输单位称为用户数据报
- TCP注重数据安全性;UDP传输数据快
补充:UDP为了达到TCP的功能必须实现拥塞控制,而且在路由之间实现,会话层允许不同机器上的用户之间建立会话关系。
-
请求协议:
- 请求首行:请求方式 请求路径 协议/版本号
- 请求头: key:value
- 请求空行:空行,用于分割头与正文
- 请求正文:只有post请求有正文
-
响应协议:
- 响应首行:协议/版本号 状态码 状态码描述
- 响应头:key:value
- 响应空行:空行,用于分割头与正文
- 响应正文:html代码,css,js,图片,文件等
- 2XX成功:200请求成功
- 3XX重定向:
- 301 Move Permanently 资源已经被永久的改变了位置,通常会发送HTTP Location来重定向到正确的新位置
- 302 Found 资源现在临时从不同的URI响应请求,此时客户端还是继续向原有地址发送以后的请求
- 304 Not Modified 如果客户端发送一个带条件的GET请求且该请求被允许,而文档内容没有发送改变,则服务器返回这个状态码
- 4XX客户端错误:
- 400 Bad Request 语法错误,当前请求无法被服务器理解
- 401 Unauthorized 当前请求需要用户验证
- 403 Forbidden 服务器已经理解请求,但是拒绝执行它
- 404 Not Found:请求失败
- 5XX服务器端错误:
- 500 Internal Server Error 服务器遇到一个未曾预料的状况
- 502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
- 503 Service Unavailable 由于临时的服务器维护或者过载,服务器当前无法处理请求。
GET POST PUT DELETE
请求头中Content-Type来获取请求中消息主体用的是何种方式编码: 参考
- application/x-www-form-urlencoded
- multipart/form-data
- application/json
- text/xml
- Http1.0使用非持久连接;一个连接值传输一个请求/响应
- Http1.1默认使用持久连接;支持以管道方式同时发送多个请求;增加身份认证(authentication);支持文件断点续传;增加缓存;在消息头增加Host域
- 响应头:Connection:keep-alive;keep-Alive:timeout=20
- 在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
- Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。
- Nginx代理常见的是客户端跟Nginx代理服务器使用HTTP1.1协议&长连接,而Nginx代理服务器跟后端服务器使用HTTP1.0协议&短连接。 参考
- HTTP协议是无状态的协议
- Session:在服务端保存的一种数据结构,用来跟踪用户的状态,该数据可以保存在集群,数据库,缓存,文件中,例如:Memcached。
- Cookie:客户端保存用户信息的一种机制,用来记录用户的一些信息;也可以用来跟踪Session
- 会话跟踪:如果第一次请求,会为其创建一个session,然后把sessionID发给客户端,保存到cookies中,客户端以后访问的时候就会带着这个sessionID
- 轮询
- ip_hash
- 粘性策略
- 尽量无状态
- HTTP是运行在TCP之上,所有传输的内容都是明文(包括密码)
- HTTPS是在应用层和传输层之间插入SSL/TLS进行加密
- SSL(安全套接层Secure Sockets Layer)
- TLS(安全传输层协议)
- 对称加密:一方通过密钥将信息加密后,把密文传给另一方,另一方通过这个相同的密钥将密文解密,转换成可以理解的明文。(明文 <-> 密钥 <-> 密文)
- 非对称加密:首先由一对key(private key私钥,public key公钥),你将public key分发给用户,该用户使用其加密,只有使用你的private key才能解密。故即使public key被别人获取,也无法解密。(MD5,SSH,HTTPS,TLS,电子证书,电子签名等)