1.OSI七层模型
物理层:定义了物理设备的标准,如网线的类型、传输介质速率。传输比特流(网卡)。
数据链路层:如何格式化数据进行传输,控制对物理介质的访问,提供错误检测和纠正。将比特数据转换成帧(交换机)。
网络层:将网络地址翻译成对应的物理地址,并决定将数据如何从发送方路由到接收方(路由器)。此层的数据是数据包。TCP/IP中的IP协议。
传输层:解决主机间的数据传输,传输协议、流量控制、调整发送速率。TCP协议、UDP协议 。
会话层:管理和建立应用程序之间的通信。应用程序自动收发包和寻址。
表示层:解决不同系统之间通信语法的问题。
应用层:应用从网络中传递的数据(HTTP)
2.TCP
2.1 TCP的三次握手
TCP: 面向连接的、可靠的、基于字节流的传输层通信协议;
将应用层的数据流分割成报文段并发送给目标节点的TCP层;
数据包都有序号,对方收到则发送发送ACK确认,未收到则重传;
使用校验和来校验数据在传输过程中是否有误
ACK: 确认序号标志
SYN: 同步序号,用于建立连接过程
FIN: 用于释放连接
第一次握手:建立连接时,客户端发送SYN包(SYN=j)到服务器,并进入SYN_SEND状态,等待服务器确认
第二次握手:服务器收到SYN包,必须确认用户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),客户端和服务器进入ESTABLISHED状态,完成三次握手。
2.2 TCP的四次挥手
第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态
第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态
可能服务器还有数据要发送给客户端,此时客户端只能接受数据。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手
最后,Client需要等待2MSL的时间,关闭连接(因为要确保服务器端接收到了ACK,避免新旧连接混淆)。
2.3 TCP的滑动窗口
RTT:发送一个数据包到收到对应的ACK,所花费的时间
RTO:重传时间间隔
作用:
保证TCP的可靠性
保证TCP的流控特性
TCP发送方:已发送已收到ACK|【已发送未收到ACK|未发送但是可以发送】|未发送不允许发送
TCP接收方:已接收已发送ACK|【未接收但可以接收】|未接收但不能接收
3.UDP
面向非连接;
不维护连接状态,支持同时向多个客户端传输相同的消息;
数据包报头只有8个字节,额外开销较小;
吞吐量只受限于数据生成速率、传输速率、机器性能;
尽最大努力交付,不保证可靠交付,不需要维持复杂的链接状态表
面向报文,不对应用程序提交的报文信息进行拆分或者合并
4.HTTP
4.1 特点
支持客户/服务器模式
简单快速
灵活
无连接(限制每次连接只处理一个请求)
无状态(连接对事务处理没有记忆信息)
4.2 请求/响应的步骤
客户端连接到Web服务器
发送HTTP请求
服务器接受请求并返回HTTP响应
释放连接TCP连接
客户端浏览器解析HTML内容
4.3 HTTP状态码
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
200 OK:正常返回信息
400 Bad Request:客户端请求有语法错误,不能被服务器理解
401 Unauthorized:请求未经授权
403 Forbidden:服务器收到请求,但是拒绝提供服务
404 Not Found:请求资源不存在(输入了错误的URL)
500 Internal Server Error:服务器发生了不可预期的错误
503 Server Unavailable:服务器当前不能处理客户端请求,一段时间后可能恢复正常
4.4 GET请求/POST请求
Http报文层面:GET将请求信息放在URL,POST放在报文体中
数据库层面:GET符合幂等性和安全性(查询数据),POST不符合(提交数据)
其他层面:GET可以被缓存、被存储,而POST不行
4.5 Cookie/Session
Cookie:
是由服务器发给客户端的特殊信息,以文本的形式存放在客户端
客户端再次请求的时候,会把Cookie回发
服务器接收到后,会解析Cookie生成与客户端相对应的内容
Cookie的发送过程:
客户端向服务端发起请求;服务端对客户端进行响应(响应头中有Cookie信息);
客户端再发起请求(请求头中也含有Cookie);服务器解析Cookie进行响应
Session:
服务器端的机制,在服务器上保存的信息
解析客户端请求并操作session id,按需保存状态信息(如果客户端中存在session id,那么说明服务端为这个客户端创建过session)
Session的实现方式:
使用Cookie来实现:服务器为每一个客户端分配一个唯一的JSESSIONID,并发送给客户端。
当客户端进行请求的时候,在请求头中会携带这个JSESSIONID
使用URL回写来实现:在URL中写入JSESSIONID
区别:
Cookie的数据存放在客户的浏览器上,Session数据放在服务器上
Session相对于Cookie更安全
若考虑减轻服务器负担,应当使用Cookie
5.HTTPS
5.1 HTTPS数据传输流程
浏览器将支持的加密算法信息发送给服务器
服务器选择一套浏览器支持的加密算法,以证书的形式回发浏览器
浏览器验证证书合法性,并结合证书公钥加密信息发送给服务器
服务器使用私钥解密信息,验证哈希,加密相应信息回发浏览器
浏览器解密相应消息,并对消息进行验真,之后进行加密交互数据
5.2 HTTP/HTTPS的区别
HTTPS需要到CA申请证书,HTTP不需要
HTTPS密文传输,HTTP明文传输
连接方式不同,HTTPS默认使用的是443端口,HTTP使用80端口
HTTPS = HTTP + 加密 + 认证 + 完整性保护,较HTTP安全
6.Socket
是对TCP/IP协议的抽象,是操作系统对外开放的接口