从浏览器访问某个网站时所发生的事情

一、 DNS解析

  • 浏览器搜索自身缓存的DNS记录(所以才会有修改host后有时候没立刻生效的原因)
  • 搜索系统的hosts文件
  • 路由器也有DNS缓存
  • 无则继续向ISP的DNS服务请求
    • 非转发模式:则向根服务器请求,进行递归查询,即根DNS服务器返回定义域名服务器的IP,然后到顶级域名(如.com服务器查询)解析,如果无法解析就会继续提供此下一级dns服务器(如qq.com去解析),直到找到位置
    • 转发模式:dns服务器自身请求转发给上一级

从客户端到本地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地址来决定是否处理数据