osi七层参考模型
最后更新于
最后更新于
osi七层模型图,计算机网络的基石。
HTTP协议
HTTP是一个应用层协议,建立在TCP协议之上。 HTTP请求就是用来发送一段文本。关于这段文本如何组织,第一行写什么,第二行写什么,哪里加一个空行,就是HTTP协议所要规范的内容。
Socket接口
HTTP的客户端和服务器,是通过Socket进行连接的。 Socket是对osi模型第四层-传输层中的TCP/IP协议的封装。Socket本身不是协议,而是一个调用接口(API)。应用层不必了解TCP/IP协议细节,直接通过对Socket接口函数的调用完成数据在IP网络的传输。
Socket包含了网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。 因为有了Socket,客户端和服务端完全不需要了解底层细节,直接通过调用Socket来实现就可以了。 这也就是为什么服务器端可以获取到客户端的IP地址的原因,因为Socket中包含了远地主机的IP地址。(当然,通过代理服务器进行访问的除外,这种要依靠HTTP协议的X-Forwarded-For头来确认IP,不在本次的讨论范围中)
那为什么无法获取到客户端的MAC地址呢?很简单,因为Socket中无法取到MAC地址。
当我们在浏览器中打开一个链接后,osi各层到底发生了什么? 这里撇开DNS解析之类的东西,只探讨HTTP报文的发送
发送端 应用层数据其实只有那么几行文本,然后往下,每过一层,都要被加上首部/尾部。这个过程就像是一层一层的穿衣服。
数据流转 数据一般要经过交换机、路由器等网络设备,层层转发,这些设备所做的事情就像是: 脱掉一件或几件衣服,做一些修修补补,然后再重新穿回去。
接收端 WEB服务器所在的主机。将衣服一件一件全部脱掉 ,最后WEB服务器就取到了最初的应用层数据。
以L2交换机为例看一下,因为L2交换机会认别到帧这一层,记录/学习MAC地址,并将帧发送到目的地。
路由器。当一个LAN希望连接到另一个LAN时,就必须使用路由器设备了。当然,可以通过构建超大型的LAN,来避免使用路由器,但这时,交换机就需要管理大量的MAC地址,同时进行大量的广播通信,设备的负担就会相当大。路由器会进行路由选择,让数据达到下一跳。经过路由器后,为了能到达下一跳,数据链路层中的MAC地址就被篡改了