在PHP基础里写过基础的,重新写个详细版的
- 解析 URL 并生成 HTTP 消息
浏览器就确定了 Web 服务器和文件名,接下来就是根据这些信息来生成 HTTP 请求消息了 - DNS 服务器查询真实地址
知道 Web服务器,还需要知道他的ip地址,需要 DNS 服务器来帮忙查询,查询时从右至左的,详细情况请谷歌…
不一定每次都去 DNS 服务器查询:
浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「本地 DNS 服务器」。 - http 传输
首先需要要三次握手,用于保证客户端和服务器都有发送和接收的能力
图片解释:
客户端和服务器同时属于closed状态,表示没有连接关系。
客户端发送请求,客户端打开发送(SYN-sent)状态,同时服务器打开监听(Listen)状态;
服务器在接收到客户端的请求时,服务器切换为回复(SYN-recvd)状态;
客户端在接收到服务器的响应时,客户端切换为稳定连接(Estab-lished)状态的同时发送第二次数据包。
服务器在接收到客户端的第二次数据时,服务器切换为稳定连接(Estab-lished)状态。
双方建立稳定连接后,开始正常通信数据。
重要的字段:
序号(sequence number):seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
确认号(acknowledgement number):ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。
标志位(Flags):共6个,即URG、ACK、PSH、RST、SYN、FIN等。具体含义如下:
SYN:发起一个新连接
ACK:确认序号有效。(为了与确认号ack区分开,我们用大写表示)
FIN:释放一个连接
URG:紧急指针(urgent pointer)有效
PSH:接收方应该尽快将这个报文交给应用层
RST:重置连接
擦 全是最底层和硬件知识的感觉,原理太多,不想看,用点白话文简单解释下吧…….
网络包:三次握手需要委托 IP 模块将数据封装成网络包发送给通信对象,这一步会生成ip 头部,用于远程定位,然后在ip 头部前加上 MAC 头部 ,用于两点传输,至此,生成了网络包,在内存中
网卡:网络包一串二进制数字信息,没有办法直接发送给对方,需要网卡将数字信息转换为电信号,才能在网线上传输
交换机:交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口,简单说就是将网络包原样转发到目的地(路由机)
路由机:原理啥的没咋懂,反正理解成转发的就行,转发对象是另一个路由机或者目标设备ok 回到正轨,既然连接了,应该得断开,就算是长连接也得断开
握手么,那就挥手拜拜(需要四次)
看我这篇文章:http://laiyong.wang/2022/08/04/network