5G时代手把手实战网络请求原理及手写okhttp网络框架_哔哩哔哩_bilibili
http 在应用层 底层是tcp/ip
三次握手 四次挥手
5G时代手把手实战网络请求原理及手写okhttp网络框架_哔哩哔哩_bilibili
http三次握手_HTTP三次握手,四次挥手。_weixin_39993454的博客-CSDN博客
三次握手
1.客户端 发送SYN 标识到服务端,等待服务端确认
2.服务端收到请求后确认联机(可以接受数据)发送一个ACK=(A的Seq+1)、SYN
3.客户端收到后检查ACK是否正确,若正确,A会在发送确认包ACK到服务器
这样就建立了连接
四次挥手:
1.第一次挥手:TCP客户端发送一个FIN(结束)标识,用来关闭客户到服务端的连接。
2.第二次挥手:服务端收到这个FIN标识,他发回一个ACK(确认)标识,确认收到序号为收到序号+1,和SYN一样,一个FIN将占用一个序号。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。(服务器端继续发送未发送完的数据)
3.第三次挥手:服务端发送一个FIN(结束)标识到客户端,服务端关闭客户端的连接。
4.第四次挥手:客户端发送ACK(确认)标识报文确认,并将确认的序号+1,这样关闭
https就是在https层上加入了 ssl 安全套接层
加密有 非对称加密和 对称加密两个阶段
非对称加密 :客户端请求,服务端有公钥和秘钥 服务端把证书的发给客户端
客户端验证证书,客户端生成随机数,用公钥对随机数加密 传给服务器,服务器用私钥对随机数解密。。 随机数的加密解密用的不是用一个钥匙
随机数有3个
对称加密:数据传输阶段是用随机进行加密和解密
okhttp
分发器
Dispatcher 用了线程池和三个队列 Deque来管理调配请求
readyAsyncCalls
runningAsyncCalls
runningSyncCalls
异步请求最大数默认64 同一个域名异步请求最大数默认5
,异步任务执行时,会判断running队列是不是满了64 和 5,如果是则把任务放到准备队列
如果不是,则放到runningAsyncCalls队列 任何一个 runningAsyncCalls任务执行完一个就会回调检查 runningAsyncCalls队列是不是满了。如果没满 从 准备队列readyAsyncCalls移动一个过来
拦截器:完成整个请求过程 其实很简单
RealCall
excute的时候
添加拦截器,然后反复递归
RealInterceptorChain
RetryAndFollowUpInterceptor
就是这两处在递归调用 process
然后拦截器
intercept(Chain chain) 方法又调用了
RealInterceptorChain 第一次调用 RealInterceptorChain 的
proceed方法 反复递归 在proceed中有index+1去拿到不同的拦截器