0%

小知识思考

0x01 前言

鉴于经常会有奇怪的思想,故而为自己专门书写这么一篇文章,想到什么记什么。

包含任务、所好奇之事

0x02 具现

1. 一次百度涉及?从浏览器输入URL到浏览器显示页面发生了什么?

  1. 输入地址
    输入地址时,浏览器其实已经开始只能匹配URL,用于补全。当然如果有缓存,直接从缓存中展示网页。

  2. 浏览器查找域名IP
    查看本地hosts文件,查看其中是否有与此域名对应的规则,如果有,则直接用此IP;
    若无,向本地DNS服务器(自己网络接入服务器商所提供)发出请求,服务器会查询其缓存记录;
    若无,本地服务器向DNS根服务器查询;
    若无,根据跟服务器给出的域服务器地址,让本地DNS服务器去找域服务器;
    .com域服务器返回本地服务器的域名解析服务器的地址;
    本地服务器向域名解析服务器发出请求,收到域名与IP地址的对应关系。并保存于缓存中用于下次快速访问。

  3. 浏览器向web服务器发送HTTP请求
    浏览器以随机端口[1024-65535]向服务器的web服务(nginx、httpd)80端口发起TCP连接请求。通过多种路由设备,进入网卡,然后进入到内核的TCP/IP协议栈对该包进行解封。可能还要经过Netfilter防火墙(内核模块的过滤)
    ,最终到达web程序,建立TCP连接。常称TCP三次握手。
    建立TCP连接后,发起HTTP请求。GET、POST、PUT 和 DELETE 、HEAD、OPTION以及 TRACE。
    http请求一般包含三部分:请求方法URL协议/版本(第一行)、请求头(Request Header)、请求正文。
    请求头和请求正文之前存在一个空行,表示请求头已经结束,接下来的是请求正文

  4. 服务器的永久重定向响应
    server给浏览器响应一个301永久重定向响应,301永久重定向:把带www的和不带www的访问地址归到同一个网站排名下

  5. 浏览器跟踪重定向地址
    浏览器知道http://www.google.com/ 是访问的正确地址,所以发送另一个http请求。

  6. 服务器处理请求
    后端从固定端口接收TCP报文,处理TCP连接,解析HTTP协议,按照报文格式封装成供上层使用的HTTP Request对象;
    大网站使用反向代理服务器时,客户端先请求到nginx,nginx再请求应用服务器,最后将结果返回给客户端,Nginx是反向代理服务器。以免某台服务器down了,影响用户使用。

  7. 服务器返回一个HTTP响应
    HTTP响应与HTTP请求相似,由3个部分构成:状态行、响应头(Response Header)、响应正文

  1. 浏览器显示 HTML
    WebKit引擎渲染的过程:
    解析html以构建dom树 -> 构建render树 -> 布局render树 -> 绘制render树
  2. 浏览器发送请求获取嵌入在 HTML 中的资源(如图片、音频、视频、CSS、JS等等)
  • DNS负载均衡
    针对请求资源膨胀的情况,为了防止机子down掉。
    原理:在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,将DNS文件中主机记录的IP地址按顺序访问返回不同的解析结果。使得不同客户端访问不同服务器,从而能达到负载均衡的目的。

  • 为什么需要三次握手?

第一次握手:client将标志位SYN置为1,随机产生一个值为seq=J(J的取值范围为=1234567)的数据包到服务器,client进入SYN_SENT状态,等待server确认;

第二次握手:server收到数据包后由标志位SYN=1知道client请求建立连接,server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给client以确认连接请求,server进入SYN_RCVD状态。

第三次握手:client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给server,server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,client和server进入ESTABLISHED状态,完成三次握手,随后client与server之间可以开始传输数据了。

三次握手”的目的是为了防止已失效的连接请求报文段突然又传送到了服务端,产生错误。
某滞留请求延迟发给服务端,服务器返回确认报文,若是client一直不确认,server会一直等待,造成资源浪费。

  • 为什么需要四次挥手?
  • 第一次挥手:* Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

第二次挥手: Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与- SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

第三次挥手: Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

第四次挥手: Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
四次挥手,在server收到对方的FIN时,表示client不再发送数据,但是还可以接收server的数据。所以将ACK和FIN分开发送。

3.命令

tar xzvf
sudo ufw disable

mv用来改名哦.cp更靠谱一点

4. tips

对于命令注入不过滤参数的:&

5.nmap

nmap -sn ping scan, - disable port scan

你想在文章末尾对读者说的话