当发出一个http
请求时,如在浏览器输入www.baidu.com
并回车时,其流程如下所示:
应用层
应用层规定了应用程序之间如何相互传递报文,以HTTP
协议为例,规定了:
- 报文类型:请求或者是响应报文
- 报文语法:分为几段,每段的含义 分隔符 每个部分的每个字段的含义
- 进程应该以什么样的时序发送报文和处理响应报文
HTTP
报文格式由三部分组成:
- 起始行:确定是请求还是响应报文
- 首部(header):常见的K-V结构,如
Content-length
- 可选的实体(entity):实体就是
HTTP
真正要传输的内容,比如传输的一段HTML
如下所示:
除了我们熟知的HTTP
协议,还有下面这些非常常用的应用层协议
- 域名解析协议
DNS
- 邮件收发协议
SMTP
和POP3
- 时钟同步协议
NTP
- 网络文件共享协议
NFS
传输层
传输层的作用是为两台主机之间的应用进程提供端到端的逻辑通信,相隔几千公里的两台主机的进程可以直接进行通信。传输层主要对传输行为进行控制,主要的协议有TCP
和UDP
。TCP
主要为下面两层协议提供数据包的重传、流量控制、拥塞控制等。
传输层使用端口号来标识不同的应用程序,主机收到数据包以后根据目标端口号将数据包传递给对应的应用程序进行处理。比如常见的80端口,服务器在接收到请求之后,将会把这个请求交给监听80端口的应用程序(也有可能是Ngix
等负载均衡器)处理。
网络互连层
网络互连层提供了主机到主机的通信,将传输层产生的数据包封装成分组数据包发送到目标主机,并提供路由选择的能力。这层的主要协议主要是IP
协议,TCP
和UDP
都是使用IP
协议作为网络层协议。这一层的主要作用就是给包加上源地址和目标地址,将数据包传送到目标地址。
网络访问层
网络访问层也称之为网络接口层,以太网、WIFI
以及蓝牙都是在这一层,网络访问层提供了主机连接到物理网络需要的硬件和相关协议。
整体分层图如下所示:
分层好处
- 限制了依赖关系范围,各层之间使用标准化接口,各层之间不需要知道上下层如何工作
- 灵活性更好
- 易于测试和维护
- 促进标准化