其他
输入URL按回车后,究竟发生了什么?
正文
输入URL后,会先进行域名解析。优先查找本地host文件有无对应的IP地址,没有的话去本地DNS服务器查找,还不行的话,本地DNS服务器会去找根DNS服务器要一个域服务器的地址进行查询,域服务器将要查询的域名的解析服务器地址返回给本地DNS,本地DNS去这里查询就OK了。 浏览器拿到服务器的IP地址后,会向它发送HTTP请求。HTTP请求经由一层层的处理、封装、发出之后,最终经由网络到达服务器,建立TCP/IP连接,服务器接收到请求并开始处理。 服务器构建响应,再经由一层层的处理、封装、发出后,到达客户端,浏览器处理请求。 浏览器开始渲染页面,解析HTML,构建render树,根据render树的节点和CSS的对应关系,进行布局,绘制页面。
分层
应用层:应用程序负责将数据以相应规则(协议)进行包装,发给传输层 HTTP:超文本传输协议 FTP:文件传输协议 SMTP:简单邮件传送协议 SNMP:简单网络管理协议 传输层:负责将应用层传过来的数据进行分组,为确保终端接收数据的顺序和完整性,会对每个分组进行标记,交给网络层 TCP:传输控制协议 UDP:用户数据协议 网络层:负责将传输层发来的数据分组发送到目标终端 IP:网际协议 ICMP:Internet互联网控制报文协议 IGMP:Internet组管理协议 链路层:为网络层发送和接收数据单元 ARP:地址解析协议 RARP:逆地址解析协议
封装和分用
封装
分用
逐层分析
HTTP
报文结构
起始行
方法与状态码
首部
请求首部:是放在请求报文中的首部,它被用来告诉服务端一些信息。 响应首部:为客户端提供一些可能用到的信息。 通用首部:请求与响应报文都包含的首部,例如Date首部 实体首部:对于报文实体主体部分的描述,比如Content-Type,表明其数据类型。 扩展首部:开发者自己添加的首部字段,用来满足定制化需求。
实体
Content-Type: 实体主体中的数据类型。 Content-Length: 实体主体的长度或者大小。 Content-Language: 和传输的数据最匹配的语言。 Content-Encoding: 来标识服务端编码时所用的编码方式。 Content-Location: 要返回的数据的地址。 Content-Range: 如果是部分实体,用来标记它是实体的哪个部分。 Content-MD5: 实体主体内容的校验和。 Last-Modified: 所传输内容在服务器上创建或者最后修改的日期时间。 Expires: 实体数据试下的日期时间。 Allow: 所请求资源允许的请求方法。 ETag: 资源的特定版本的标识符。可以让缓存更高效,并节省带宽。 Cache-Control: 控制缓存机制的指令。
传输层-TCP
URG 紧急指针 ACK 确认序号有效 PSH 接收方应该尽快将这个报文段交给应用层。 RST 重建连接 SYN 同步序号用来发起一个连接 FIN 发端完成发送任务
开始建立连接时,客户端向服务器发送一个TCP分组,分组首部的SYN为1,并携带一个初始序号,表明这是一个连接请求。 如果服务器接受了连接,会向客户端发送一个TCP分组,分组中会包含SYN和ACK,都为1,同时包含一个确认序号,值为来自客户端的初始序号 + 1,表示连接已经被接受。 客户端收到上一步发来的分组后,会再向服务器发送一段确认报文分组,ACK为1,会再次携带确认序号,值是第二步来自客户端的确认序号 + 1。服务端收到确认信息后,进入已经连接的状态。
如果客户端应用层的数据发送完毕,会导致客户端的TCP报文发送一个FIN,告知服务器准备关闭数据传送。 服务器接收到这个标志后,它发回一个ACK,确认序号为收到的序号加1,同时TCP还要向应用程序发一个文件结束符。 此时服务器关闭这个方向的连接,导致它的TCP也会发送一个FIN。 客户端接收到之后发回一个确认ACK,序号为收到的序号 + 1,连接完全关闭。
网络层-IP
IP首部
路由选择
Destination(目的IP):表示IP数据报最终要到达或者经过的网络地址或者主机地址。 Gateway(下一跳地址):当前维护路由表设备的相邻路由器的地址 Flags(标志):表示当前这一条路由记录的属性,具体用五个不同的标志来表示: U:该路由可以使用 G:如果有这个标志,表示是下一跳是一个网关,如果没有,表示下一跳是和当前设备在一个网段,也就是可以直接把数据报发过去 H: 下一跳是一个主机还是一个网络,有这个标志,表示主机,没有,则表示下一跳的路由是一个网络 D:该路由是由重定向报文创建的 M:该路由已被重定向报文修改 Interface:当前路由项的物理端口
找到了与目的IP完全匹配的路由项,将报文发给该路由项的下一站路由(Gateway)或者网络接口(Interface) 找到了与目的IP的网络号匹配的路由项,将报文发给该路由项的下一站路由(Gateway)或者网络接口(Interface) 前两者都没有找到,就看路由表里有没有默认路由项(default),有的话发给它指定的下一站路由(Gateway)
数据报分片的概念
地址解析协议:ARP
ARP分组格式
当目标IP和自己在同一个网段时,先去ARP缓存表里找有没有目标IP对应的MAC地址,有的话交给链路层进行封装发送出去。如果缓存表内没有,进行广播,获得MAC地址后缓存起来,IP层再对TCP进行封装,然后交给链路层再封装发送出去。 当目标IP和自己不在同一个网段,需要将报文发给默认的网关。如果ARP缓存表中有网关IP对应的MAC地址,那么交给链路层进行封装发送出去。如果没有,进行广播,获得地址后缓存起来,IP层再对TCP进行封装,然后交给链路层再封装发送出去。
以太网数据帧
结构
传输和接收
接收到上层传过来的数据报之后,根据MTU以及数据报大小来决定是否分割成小块,也就是IP数据报被分片的过程。 把数据报(块)封装成一帧,传给底层组件,底层组件将帧转换为比特流,并发送出去。 以太网上的设备接收到帧,检查帧里边的目标地址,如果与本机地址匹配,帧就会被处理,一层一层向上传递(分用过程)。
最后
阅读更多
4月的技术面试,如何准备?我从面试官给你说面经:通过五轮面试斩获offer的阿里实习生亲述!
相信自己,没有做不到的,只有想不到的
在这里获得的不仅仅是技术!
喜欢就给个“在看”