目录
一、OSI开放式互联参考模型
二、TCP/IP参考模型
三、TCP三次握手
四、TCP的四次挥手
五、URL键入浏览器,工作流程描述
六 、HTTP常用状态码
七、POST和GET的区别
八、Cookie和Session的区别
九、HTTP和HTTPS的区别
1.物理层 2.数据链路层 3.网络层 4.传输层 5.会话层 6.表示层 7.应用层
1.应用层 2.传输层 3.网络层 4.数据链路层
ACK:确认序号标志
SYN:同步序号标志
FIN :释放连接
握手是为了建立连接,可以使用wireshark抓包查看建立连接发送的包的类型以及对应值。
第一次握手 Client发送SYN包(假设syn=x)到服务器,并且进入SYN_SEND状态,等待服务器确认收到。第二次握手 Server收到SYN包,发送SYN+ACK包到Client,携带数据ack=x+1(确认已收到syn:x),syn=y。此时服务器进入SYN_RECV(SYN接收)状态。第三次握手 Client收到服务器的SYN+ACK包,向服务器发送ACK包,携带数据ack=y+1(确认已收到syn=y)。Client方ACK包之后。Client和Server进入Established(已获得确认)状态,完成三次握手。
为什么需要三次握手握手才能建立起连接?发送包的过程中还涉及seq数据的传输,三次握手是为了初始化Sequence Number的值。
首次握手的隐患
问题起因分析:
Server收到Client的SYN,回复SYN+ACK的之后未收到第三次握手需要Client发送的最后的ACK确认包。Server会不断重试发送SYN+ACK包直至超时,Linux默认五次,每次时间倍增,总耗时1+2+4+8+16+32=63s这个时候可能会出现问题?如果黑客不断向服务器发送请求,但是却不触发第三次握手,就会导致syn序列被大幅占用,导致服务器无法处理正常的业务需求,解决方案 ↓↓↓
针对SYN Flood的防护措施
SYN队列满后,服务器会通过tcp_syncookies参数回发SYN Cookie若为正常连接,Client会回发SYN Cookie,直至建立连接建立连接后Client出现故障后怎么办
向对方发送保活探测报文,如果未收到则继续发送尝试次数达到保活探测上限数仍未收到回应则终端连接挥手是为了终止连接,与"三次握手"的目的相反。第一次挥手可以由Client或者Server发起....
第一次挥手 Client发送一个FIN包用来关闭Client到Server的数据传输,携带数据seq=x,发送之后自身进入FIN-WAIT-1状态。第二次挥手: Server收到FIN包之后,发送ACK包给Client,携带参数ack=x+1(确认已收到seq:x),seq=y,自身进入CLOSE-WAIT状态。第三次挥手 Server发送FIN+ACK,用来关闭Server到Client的数据传输,携带数据ack=x+1(同上),seq=z(seq不重复,是唯一标识),Server进入LAST-ACKS状态。第四次挥手 Client收到FIN后,进入FIN-WAIT-2状态;收到FIN+ACK之后,发送一个ACK包给Server,携带数据ack=z+1,seq=x+1,进入TIME-WAIT状态,这个状态会次序2MSL,也就是两个数据包传输时间,确保Server收到发过去的消息。本地域名服务器 将得到的IP地址返回给操作系统,同时自己也将IP地址缓存起来 操作系统将 IP 地址返回给浏览器,同时自己也将IP地址缓存起来baidu.com -- 顶级域名,只有一个doc分隔符 www.baidu.com ---- 二级域名,两个doc分隔符。所以百度其实是一个二级域名。
TCP连接 —— 三次握手
发送HTTP请求 —— 涉及POST/GET请求方式,下文有对应解释
服务器处理请求并返回HTTP报文
浏览器解析解析并渲染页面
断开连接 —— 四次挥手
HTTP缓存通常只适用于idempotent(幂等性) request(可以理解为查询请求,也就是不更新服务端数据的请求),这也就导致了在HTTP的世界里,一般都是对Get请求做缓存,Post请求很少有缓存。