客户端请求接口到服务端的整个流程

984 阅读3分钟

我们每天都在发送一个http或者https请求到服务器,这边文章主要记录了中间的流程,对于一些细节及http与https的区别这种问题不做赘述,后面可能会写几篇文章说明。注:以下图片来自小码哥教育

第一步:DNS解析

这一步主要是通过DNS协议,从远程的DNS服务器上获取域名对应的IP地址

第二步:封装

截屏2021-09-14 上午10.22.10.png

截屏2021-09-14 上午10.22.28.png

2.1应用层:HTTP,HTTPS协议 这一步主要是ABNF语言的格式把我们请求的URI,参数,请求头,请求体,响应头,响应体等进行编码,根据协议的不同以及请求方式(Get,Post等)的不同,编码的方式也会有所差别

2.2传输层:TCP,UDP协议 这一层是由计算机内核控制,是对应用层报文进行封装,在应用层报文的基础上增加头部,协议不同,头部的数据也会不同,我们平常请求的HTTP和HTTPS的接口是基于TCP协议的,如果应用层的数据太大的话,会在这一层进行分包

2.3网络层:IP协议 这一层是计算机内核控制,是对传输层的数据段进行封装,增加头部数据,由于下一层数据链路层的数据部分有大小限制,所以如果数据太大的话,也会进行拆分

2.4数据链路层:Ethernet V2,PP协议 这一层发生在一个一个的链路上,比如计算机和交换机的链接(采用的是Ethernet V2协议),路由器和路由器之间的点对点链接(PP协议),这一层是对网络层的数据包进行封装,增加头部数据和FPS尾部校验,数据部分长度为46-1500字节,整个以太网帧的长度是64-1518字节,FPS是用来做差错校验的,校验这个包的数据是否完整,如果不完整就会丢包

第三步:物理层传输

截屏2021-09-14 上午10.22.43.png

当我们的数据通过局域网传输到路由器的时候,路由器会判断是否在同一网段内,如果在同一网段内则直接发送广播,如果不在,则通过路由器内部维护的路由表进行下一次跳转,路由器连接外网需要通过光电转换器(光猫)把数字信号转化为光信号进行传输

第四层:服务器拿到数据进行解封装

数据包最后传输到我们的服务器的网卡上,然后通过数据在数据链路层,网络层,传输层,应用层的解封拿到服务端想要的数据,再通过端口(HTTP默认80端口,HTTPS默认443端口)及URI找到我们的项目,之所以可以通过端口找到我们的项目,是因为端口绑定了服务端软件(例如TomCat),服务端的代码是部署在这个服务端软件上的,然后找到对应的文件,后端会有不同的监听方法(例如doPost,doGet),获取到我们传输的数据,接下来进行处理,对客户端进行响应