从浏览器访问某个网站时所发生的事情
一、 DNS解析
- 浏览器搜索自身缓存的DNS记录(所以才会有修改host后有时候没立刻生效的原因)
- 搜索系统的hosts文件
- 路由器也有DNS缓存
- 无则继续向ISP的DNS服务请求
- 无
- 非转发模式:则向根服务器请求,进行递归查询,即根DNS服务器返回定义域名服务器的IP,然后到顶级域名(如
.com
服务器查询)解析,如果无法解析就会继续提供此下一级dns服务器(如qq.com
去解析),直到找到位置 - 转发模式:dns服务器自身请求转发给上一级
- 非转发模式:则向根服务器请求,进行递归查询,即根DNS服务器返回定义域名服务器的IP,然后到顶级域名(如
从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。
二、TCP/IP 协议栈通信过程

1. 应用层
定义数据格式,并按照格式解析数据。
此时是HTTP协议,header的content-type定义格式,body填数据
2. 传输层
协议栈上
添加了TCP首部,记录端口,确认主机上应用程序的身份,把数据包交给对应的应用程序
TCP三次握手和四次挥手

ESTABLISHED
əˈstabliSHt
已建立成功的状态
- 为什么握手要三次?为了防止已经失效的连接请求报文段突然又传到服务端
- 为什么挥手要四次?当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端
- 为什么TIME_WAIT状态需要经过2MSL(max segment lifetime,即最大报文段生存时间,一般1分钟到4分钟)才能返回到CLOSE状态?四个报文都发送完毕,我们可以直接进入CLOSE状态了,
- 但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。
- 保证此次连接的重复数据段从网络中消失
TCP分节可能由于路由器异常而“迷路”,在“迷路”期间,TCP发送端可能因确认超时而重发这个分节,“迷路”的分节在路由器恢复正常后也会被发送到最终的目的地,这个迟到的“迷路”分节到达时可能会引起问题。在关闭“前一个连接”之后,马上又建立起一个相同的IP和端口之间的“新连接”,这会导致“前一个连接”的迷路重复分组在“前一个连接”终止后到达,从而被“新连接”接收到了。
为了避免以上情况,TCP/IP协议不允许处于TIME_WAIT状态的连接启动一个新的可用连接,因为TIME_WAIT状态持续2MSL,这就可以保证当成功建立一个新TCP连接的时候,来自旧连接重复分组已经在网络中消失。
3. 网络层
定义网络地址,区分网段,子网内MAC寻址,对不同子网的数据包进行路由
- IP协议通过子网掩码计算网络地址,判断两个主机是否属于同一个子网
- ARP协议以太网广播给子网的所有主机,IP地址相同的话,主机会返回MAC地址,不同则丢弃。与此同时,ARP会缓存这个映射关系。此时寻址限制于同一个子网
- 路由协议,不同子网,通过本子网的网关进行路由
4. 链路层
- 对电信号进行分组并形成具有特定意义的数据帧,然后以广播的形式通过物理介质发送给接收方。以太网规定一组电信号就是一个数据包,一个数据包被称为一帧, 制定这个规则的协议就是以太网协议。
- 子网广播,主机通过MAC地址来决定是否处理数据