文章插图
作者公众号:org_yijiaoqian
从一个HTTP请求来看网络分层原理
两台主机间会通过非常多网络设备,不管哪个网络设备都会发生数据丢失,如果发生数据丢失的话,会发生数据重传,会出现数据重复(之前丢失的包并不是丢失而是产生了延时) 。数据传输的介质也可能多样,如内网里通过网线进行传输,连接到公网的话会通过光纤进行连接,所以要实现不同介质间信号的转换,还有从光纤到路由器无线脉冲转换,距离远的话还有信号衰减问题 。所以在网络传输过程中有非常多的问题需要解决,把问题分组分层,不同层次间解决不同问题,不同层次间定义标准化接口让它们间可以进行数据的通信 。
复杂的网络
文章插图
为了简化网络的复杂度,网络通信的不同方面被分解为多层次结构,每一层只与紧挨着的上层或者下层进行交互,将网络分层,这样就可以修改,甚至替换某一层的软件,只要层与层之间的接口保持不变,就不会影响到其他层 。
-
- OSI( Open System Interconnection Reference Model): 开放系统互联参考模型
- TCP/IP 协议族
OSI七层理论体系结构
文章插图
- 物理层:解决两台主机的通信问题—A往B发送比特流(0101),B能接收到这些比特流 。定义了物理设备的标准如网线的类型,光纤的接口类型以及传输介质的传输速率等 。
- 数据链路层:由于物理层上的传输的比特流可能会出现错传、误传等,所以数据链路层定义了如何格式化数据即将比特流封装成帧,提供了错误检测 。
- 网络层:随着节点的增加,点对点通信是需要经过多个节点的,如何找到目标节点,如何找到最优路径变成为了首要需求 。所以出现了网络层,主要目的是将网络地址翻译成对应的物理地址,分组传输、路由选择,本层的传输单位是数据报(分组),本层需要注意的TCP/IP协议中的TCP协议 。
- 传输层:随着网络需要的进一步扩大,通信过程中需要传输大量的数据,网络可能会发生中断,为了保证传输大量文件时的准确性,需要对发送的数据进行切分,切分成一个个的segment进行发送,考虑如何在接受方拼接切分的segment组成完整的数据,以及发现丢失segment时该如何处理,需要注意的协议TCP、UDP 。
- 会话层:不同机器上的用户之间建立以及管理会话 。用于保证应用程序自动收发包和寻址 。
- 表示层:信息的语义语法,加密解密,转换翻译,压缩解压缩 。
- 应用层:规定双方必须使用固定长度的消息头,且消息头必须记录消息长度等信息 。需要注意的是TCP/IP协议中的HTTP协议 。
文章插图
TCP/IP四层模型
是OSI的一种实现,包括应用层、运输层、网际层和网络接口层 。
文章插图
一个HTTP请求的分层解析流程
文章插图
如上图右边一个服务器部署了一个静态页面,通过Nginx部署在公网上,浏览器通过域名对它进行访问,浏览器输入域名点回车后是怎么工作的呢?
http://www.dumain.com
服务端只认ip地址,浏览器将域名解析出来,看下浏览器里有没有域名对应DNS的缓存,有的话直接拿到服务端的ip地址,没有的话去本地的host文件看有没有配置,没有配置的话才会发起一个DNS请求用来获取服务器ip地址 。DNS也是台服务器也有自己的ip地址,这时候应用层会构造一个DNS请求报文,应用层会去调用传输层的接口一个socket的API,DNS默认使用UDP实现数据传输,即应用层调用传输层的API,传输层会在DNS请求报文基础上加一个UDP的请求头,传输层将数据交给网络层,网络层同样在UDP请求报文基础上加IP的请求头,网络层会将IP请求报文交给数据链路层,数据链路层会将自己的mac头加上去并把对应的请求报文交给下一个机器的mac地址也会加上去,下一个机器的mac地址通过网络层ARP协议找到,ARP会发送一些请求看下你对应的ip地址的mac地址是多少,最后通过物理层物理介质传出去,通常传到路由器上.
推荐阅读
- 使用charles嗅探https请求,你的API并不安全
- 您一定得见识一下.Net中这几款HTTP请求库
- Wireshark数据包分析实战:HTTPS加解密过程
- 数据中台建设从数据中台的认知开始
- 找出两个链表的第一个公共节点
- 熊胆汁的作用
- 纯种哈士奇长啥样 纯种哈士奇多少钱一只,从这6点来看价格
- 剑网三一个赛季持续多久 剑网三赛季多久一次
- 怎样可以锻炼肌肉呢?
- 养猫和仓鼠 猫为什么喜欢仓鼠