DNS域名解析
简单的说就是把域名翻译成 IP 地址,但如果在浏览器直接输入IP,则跳过这个步骤。
DNS寻找解析顺序:
浏览器缓存解析
操作系统缓存解析
公共域名服务器解析(根域名服务器/Root Server,主域名服务器)
TCP三次握手连接
- Client 端发送一个同步位SYN = 1,初始序号seq = x的报文段到Server端。TCP规定SYN报文段不能携带数据,但消耗掉一个序号,这时候 Client 进入SYN-SENT(同步已发送)状态。
- Server 监听到连接请求报文后,如同意建立连接,则向 Client 发送确认。Server端发送 SYN = 1 ,ACK=1,确认号ack=x+1,初始序号seq = y的报文段到Client。同样,这个报文段不携带数据,消耗一个序号。这时Server进入SYN-RCVD(同步收到)状态。
- Client 收到确认后还需再次发送确认。Client发送 ACK=1,确认号ack = y + 1,此时可带(seq=x+1)可不带(不消耗序号)数据。发送完成后Client与Server分别进入established(已建立连接)状态
四报文握手:
Service端发送的报文,可以拆分为一个确认报文段(ACK=1,ack=x+1)和一个同步报文段(SYN=1,seq=y),这样就变成了四报文握手,但与三报文握手的效果是一样的。
为什么有Client的最后一次确认:
为了防止已失效的 连接请求报文段 又到达了Server端,因而产生错误。
Nginx反向代理:
代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从内部网络上服务器得到的结果返回给 Internet 上请求连接的客户端。
通过这样来保证内网服务器的安全,和做负载均衡。
参考:https://www.cnblogs.com/Lujihang/p/10682687.html
SpringMVC中的大体处理流程:
1. 客户端发送Http请求到DispatcherServlet
2. DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找对应Handler,返回给DispatcherServlet
3. DispatcherServlet调用HandlerAdapter,执行对应的Controller,并将得到的ModelAndView返回给DispatcherServlet
4. DispatcherServlet调用ViewResolver(视图解析器)来解析HandlerAdapter传递的ModelAndView(逻辑视图名),并返回视图(view)和模型数据给DispatcherServlet
5. DispatcherServlet根据视图解析器解析的视图结果,并渲染数据到视图中
6. 最后将视图结果响应到客户端显示
HandlerExecutionChain 使用的设计模式以及执行源码可参考(https://blog.csdn.net/BigBug_500/article/details/104435391)
TCP四次握手断开连接
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。
客户端向服务器端请求关闭连接,服务器端向客户端发送确认关闭。服务器端向客户端发送关闭请求,客户端向服务器端发送确认关闭。
1. Client 端发送一个终止控制位FIN = 1,初始序号seq = u的报文段到Server端。TCP规定FIN报文段不能携带数据,但消耗掉一个序号,这时候 Client 进入FIN-WAIT-1(终止等待 1)状态。
2. Server端收到后发出确认,ACK=1,确认号ack=u+1,包序号seq=v的报文段,此时Server端进入CLOSE-WAIT(关闭等待)状态,Client端到Server端方向的连接就释放 了。
3. Client端收到报文后,进入FIN-WAIT-2状态。
4. 若Server端无数据发向Client端,则发送终止控制位FIN = 1,确认上次的报文段,ACK=1,ack=u+1,本次序号seq=w的报文段,进入LAST-ACK状态。
5. Client端收到后,发送确认包ACK=1,ack=w+1,序号seq=u+1的报文段,并进入TIME-WAIT阶段,该阶段结束后,连接才被释放
6. Server端收到报文后,释放连接。
为什么要有TIME-WAIT阶段:
1. 为确保Client最后一次ACK确认报文段到达Server,等待Service最后一次FIN报文段能够通过超时重传机制发送到Client端,最后,让Client与Server端都进入closed状态。
2. 为避免Client的最后一个ACK报文,被当作连接请求建立中的ACK报文,所以等待一段时间让该报文传输完毕(即从网络中消失)。