OSI参考模型详解【原】

OSI参考模型详解

最近遇到个麻烦的问题,由于内网只对外暴露了一台服务器,而我需要在外网访问装在内网其他机器上的postgres数据库。第一时间我想到了nginx的反向代理,不过那是处理http协议用的,没辙。我猜想访问postgres数据库应该离不开tcp协议,可以使用某个工具针对5432端口做一个tcp的代理。费了九牛二虎之力最终通过Linux的iptable实现了(在此再次鄙视没有经过验证胡乱转载的文章)。于是乎,静心沉思,整个计算机系统,那么多的协议,到底是如何工作的?之间有什么关系呢?还好以前管理过公司的网络,让我想到了也许OSI参考模型可以给我答案。

OSI(Open Ssytem Interconnect),中文名称为“开放式网络互联”,说白了就是一套定义了计算机之间怎样通信的模型,由国际标准化组织制定,绝对靠谱。相信大部分人对OSI的理解都还停留在背诵的层面上。在此我先从低到高列出OSI模型的7层结构,分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。这些层次分为低三层和高四层,低层为高层提供服务。两台计算机的应用程序要通信,几乎都得穿透这7层。下面开始介绍。


一,各层详解

1,物理层

传输单元:比特流bit,110110110…….还用解释么

工作设备:光纤、双绞线、中继器和集线器

常见概念:RJ-45(就是那个网线接口)、IEEE802.2(网卡)

功能描述:建立和取消物理连接,传输bit流。

2,数据链路层

传输单元:数据帧frame,数据帧里有帧头和帧体,帧头包含收发双方的mac地址等,帧体主要就是一个数据包(IP包),也就是从网络层拿到的包。一般一个数据帧含有一个数据包(IP包),在有拆分的情况下可能含有多个包。

一些设备:网桥、二层交换机(也就是傻瓜交换机,知道为什么叫二层了吧)

常见概念:ARP(地址解析协议,负责将IP解析到MAC上)、MAC(物理地址)

功能描述:将bit流封装成帧frame;物理寻址;链路的建立分离取消;同时可以控制流量;通过复杂的数据校验算法和数据重发机制,在不可靠的物理介质上提供可靠传输。

3,网络层

传输单元:数据包packet,也叫IP包,数据包里有包头和包体,包头含收发双方IP地址等,包体含TCP(传输控制协议)、UDP(用户数据协议)、进程信息、端口号和实体数据,这些都是从传输层传过来的。

一些设备:路由器、三层交换机

常见概念:IP(协议)

功能描述:数据包与数据帧的转换;路由选择;流量控制。

一个疑惑:为什么说抓包工具能看到mac地址呢?难道抓包工具的包指的不是IP包,而是数据链路层的数据帧?望高手解答。

4,传输层

传输单元:TCP方式叫数据段Segment,UDP方式叫数据报Datagram。网络层的一个IP包可能含有一个或者多个TCP或者UDP。

一些设备:四层交换机(可以配置端口映射的那种)

常见概念:TCP(协议)、UDP(协议)、端口

功能描述:端到端的通信,根据网络层提供的服务质量,创建单个或者多个连接。

5,会话层

传输单元:报文

一些设备:暂无

常见概念:QOS(交换机上见过,暂时没去研究干嘛用的)

功能描述:访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。使通信会话在通信失效时从校验点继续恢复通信。

6,表示层

传输单元:报文

一些设备:暂无

常见概念:暂无

功能秒速:这一层主要解决用户信息的语法表示问题。它将欲交换的数据从适合于某一用户的抽象语法,转换为适合于OSI系统内部使用的传送语法。即提供格式化的表示和转换数据服务。数据的压缩和解压缩, 加密和解密等工作都由表示层负责。

7,应用层

传输单元:报文

一些设备:暂无

常见概念:Telnet、FTP、HTTP、SMTP、DNS

功能描述:应用层为操作系统或网络应用程序提供访问网络服务的接口。

解释完毕,附上xmind图好理解


二,TCP/IP相关

TCP/IP模型

TCP/IP模型其实就是OSI模型的浓缩版,源于美国国防部,与OSI对应关系如下:

应用层----------应用层、表示层、会话层

传输层----------传输层

网络层----------网络层

网络接口层----------数据链路层、物理层

TCP/IP协议

TCP/IP协议有网络层的IP协议和传输层的TCP协议组成。一般的TCP/IP协议指的都是TCP/IP协议族。

TCP/IP协议族

包括TCP/IP核心协议以及几乎OSI里面的其他所有协议,比如ARP、HTTP、DNS等。

三,其他信息

协议

生活中的协议都很好理解,即大家一起商讨好的某种规范。计算机里面的协议也类似。

比如HTTP协议,规定了从浏览器发出请求到获得内容的整个过程的规范。具体说就是浏览器对某个IP的某个端口(默认80,HTTPS为443)发出一个socket连接请求,同时在该socket中写入客户端的基本信息,浏览器类别、请求路径、请求方式、允许返回的内容类别等。这些信息先写哪些再写哪些,之间哪里空格哪里换行都规定好了。服务端建立连接后从socket的输入流中拿到这些信息,处理后往socket的输出流中写入返回信息,先写响应头再写正文,响应头的格式和与请求头一样要求很严格。最后还要负责关闭socket连接,好让浏览器知道东西拿完了。最后浏览器解析拿到的数据并呈现出来。网上有很多简单http服务器实现的代码,改天有空我再发一个出来。

对于TCP协议或者IP协议,其实也差不多,无非就规定好数据包或者数据段的格式和传输方式。

HTTP是应用层的协议,根据OSI模型可以知道其底层传输的是TCP的东西,所以说linux的iptable很强大,比nginx能控制得更底层。


Socket

Socket,即套接字,用于描述IP和端口,是一个通信句柄。一个IP和一个端口可以创建一个socket。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值