说一说计算机网络的5层模型
应用层: 运行各种应用软件, 使用了HTTP DNS等各种协议
传输层: 进行端到端的数据传输
网络层: 进行IP编址和路由转发. 有IP协议(根据目的IP进行转发)和ICMP协议(网际报文控制协议, 主要用于传输控制信息(查询报文和报错报文), 通过控制类型字段和代码字段来传输信息 )
链路层:封装网络层的数据包为帧然后传输. 有ARP协议(将IP地址转换成对应的MAC地址)
物理层: 传输透明的二进制比特
输入www.baidu.com到显示网页的过程
浏览器会先查看有没有缓存到相关网页, 这个是由HTTP响应报文的Cache-Control控制的
如果没有缓存, 就会通过DNS获取域名对应的IP地址, DNS是域名和IP映射的分布式数据库. 运行过程大概如下: 依次查询浏览器 操作系统 host文件 本地DNS服务器 有没有缓存相关记录, 如果没有, 本地域名服务器就依次和根域名服务器 顶级域服务器 权威域名服务器 联系获取结果, 有两种方式: 递归查询和迭代查询. 迭代是每一步本地域名服务器都参与. 递归是逐级查询, 最后本地DNS服务器将结果返回给主机
然后主机构建HTTP请求报文获取资源. 这其中如果百度搭建CDN服务, 那么主机就会先查询CDN服务器有没有对应的资源. 假如CDN没有就会向原始服务器发起请求.
在这期间会涉及IP转发问题. 首先会查看ip地址是否
然后从一个网络到另一个网络要通过网关转发: 如果没有保存网关的地址, 就要通过ARP协议获取网关的MAC地址
我这里详细说一下服务器接收发HTTP报文的过程. 数据到达网卡后会触发硬中断(由与系统相连的外设(比如网卡、硬盘)自动产生的. 软中断: 为了满足实时系统的要求,中断处理应该是越快越好。linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成), 然后通过DMA直接将网卡上的数据复制到内核缓冲区. 其实内核缓冲区实际上是一个环形队列