TCP的三次握手四次挥手:
三次握手(建立连接):
第一次握手: 建立连接时,客户端向服务器端发送TCP连接请求数据包(SYN=1,seq=x),客户端进入SYN_SEND状态
第二次握手: 服务器确认数据包,并返回自己的数据包(SYN=1,ACK=1,ack=x+1,seq=y),服务器进入SYN_RECV状态
第三次握手: 客户端确认并再次发出确认(ACK=1,ack=y+1,seq=x+1),确认发送完毕后,客户端和服务端处于ESTABLISHED状态
意义:如果客户端发起一个连接请求报文段没有丢失,延误到连接释放后才发送到服务端,服务端认为客户端发起了连接请求,如果没有
三次握手,那么就会直接建立起连接,但实际并不需要建立连接(浪费资源),三次握手需要客户端再次确认后,才会建立起连接
四次挥手(四次挥手):
第一次挥手:客户端发起释放连接的请求报文(FIN=1,seq=u),客户端进入FIN-WAIT-1状态
第二次挥手:服务端收到连接释放的请求报文,发出确认报文(ACK=1,seq=v,ack=u+1),服务端进入CLOSE-WAIT状态,客户端 向服务端发送数据的连接关闭,客户端收到确认消息后,客户端进入FIN-WAIT-2状态,等待服务端发送释放连接报文
第三次挥手:服务端将最后的数据发送完后,向客户端发送释放连接报文(FIN=1, ACK=1,ack=u+1,seq=w),服务端进入LAST- ACK 状态,等待客户端确认
第四次挥手:客户端收到连接释放的报文后,发出确认报文(ACK=1,ack=w+1,seq=u+1),客户端进入TIME-WAIT状态,等待2分
钟后关闭连接,服务端收到确认报文后立即关闭连接
2MSL:为了保证最后一个消息一定到达服务端,如果确认报文丢失,则服务端会重新发起关闭请求,客户端再次确认;如果客户端直接
关闭的话,可能会导致消息无法到达服务端,连接无法关闭。而且可以保证在这段时间发送的消息不会滞留在网络中,让其消
失,防止出现在下次连接中
意义:TCP是全双工模式,可以在两个方向上同时传递,所以每次关闭都要进行单独关闭,并要另一方确认
OSI七层网络模型:
由下往上:
物理层、数据链路层、网络层(IP)、传输层(TCP、UDP)、会话层(RPC)、表示层(加密解密)、应用层(HTTP、FTP)
TCP\IP四层模型:
连接层(物理层、数据链路层):负责建立电路连接,是整个网络的物理基础,典型的协议有以太网、ADSL等
网络层:负责分配地址和传送二进制数据,主要协议是IP协议,ARP协议等
传输层:负责传送文本数据,主要协议是TCP协议等
应用层(应用层、表示层、会话层):负责传送各种最终形态的数据,是直接与用户打交道的层,典型的协议有HTTP,FTP等
传输层协议:
tcp:
传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通讯协议
特点:
通过三次握手建立连接
所有的数据都会传输完成,不丢失数据
不限制数据大小
适用于保证数据的完整性场景,如QQ、DNS的数据传输等
缺点:
连接只能是一对一的
传输速率较UDP慢
首部开销较大,20字节
udp:
用户数据报协议,是一种面向事务的,基于流、简单不可靠的信息传输协议
特点:
无需建立连接传输快
可实现一对一、一对多、多对一、多对多交互通信
没有阻塞控制,因此网络出现拥塞不会使源主机的发送速率降低
首部开销小,只有8字节
适用于传输速率要求较高但允许丢包场景,通常用于视频资源传输
缺点:
不保证可靠交付
数据包大小不能超过64K
TCP重传机制:
滑动窗口
todo
http\https:
http:
超文本传送协议,是建立在TCP协议之上的一种应用协议,默认端口号是80,由请求和响应构成
请求报文Request:
请求行:包含请求类型、要访问的资源、HTTP版本
请求头:有KV组成
空行:空行之前全都是请求头,结束请求头
请求数据:存放body体数据
响应报文Response:
状态行:HTTP版本、状态码、状态码描述
消息头:由KV组成
空行:空空隔行之前全是消息头,结束消息头
响应体:存放返回结果
http1.0\http1.1:
在http1.0中认为每台服务器绑定唯一的IP地址,因此请求消息中没有传递主机名,在HTTP1.1中请求消息和响应消息中都支持host头,且请求消息中如果没有host会报400错误
在http1.0中每次请求使用一个TCP连接,在http1.1中支持了长连接,默认即keep-alive,即在一个TCP连接上可以有多个请求,减少建立关闭连接耗费的时间
http1.1\http1.2:
http1.1采用管道机制实现基于一个TCP连接发送多个请求,会造成对头阻塞
http1.2中提供如下优化:
header压缩、基于https加密协议传输(必须使用 https ,http1.2才会生效)、多路复用(避免了对头阻塞)、请求优先级(在多路复用的同时保证高优先级请求先发送)、服务端推送、二进制协议
https:
默认端口443
内容加密:中间者无法直接查看明文内容
验证身份:通过证书认证客户端访问的是自己的服务器
保护数据完整性:防止传输的内容被中间人冒充或串改
是对客户端信任服务端的一种方式,可通过在黄色区域拦截进行伪造服务端
常用的HTTP方法:
HTTP1.0只支持GET、POST、HEADE
GET、POST、HEAD(响应体无内容)、PUT、DELETE、TRACE、OPIONS(查看资源支持的请求方法)、CONNECT
无状态协议:
无状态是指,每一次请求都不会有上下文,即在下一次连接不会记录这次连接的信息。
HTTP\UDP是无状态的, TCP\FTP是有状态的
HTTP协议是无状态无连接的,无连接是指一次请求一次连接,可以通过cookie来解决无状态的问题,
缓存:
cookie: 如果不设置过期时间,则保存在内存中,有效时间截止到会话结束;如果设置过期时间则保存在硬盘中,直到过期才消失。保存在
客户端,包含path及domain,不允许跨域访问及设置(子域除外)。单个cookie保存的数据不超过4K,且只能保存字符串。向服务端发
起请求会自动在请求头中携带上cookie,可以被用户禁用
session: 保存在服务端,默认有效期30分钟,每次访问会刷新有效期。通常通过cookie存储sessionId保存在浏览器,当禁用cookie时会重
写URL拼接sessionId。可以保存对象且无长度限制
localStorage: 将数据保存在硬盘中,下次访问仍有效,只能通过清除才会失效,类似前端数据库,一般可以达到5M.
sessionStorage: 保存在内存中,数据有效时间为当前会话,会话失效即数据失效,一般可达到5M
抓包:
tcpdump -s0 -A
wireshark