一文搞懂OSI参考模型与TCP/IP

OSI参考模型与TCP/IP

  • 1. OSI参考模型
    • 1.1 概念
    • 1.2 数据传输过程
  • 2. TCP/IP
    • 2.1 概念
    • 2.2 数据传输过程
  • 3. 对应关系
  • 4. 例子
    • 4.1 发送数据包
    • 4.2 传输数据包
    • 4.3 接收数据包

1. OSI参考模型

1.1 概念

OSI模型(Open System Interconnection Reference Model),即开放式通信系统互联参考模型,是国际标准化组织(ISO,International Organization for Standards)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架。

在这里插入图片描述

  • 应用层(Application Layer):发什么
  • 表示层(Presentation Layer):以什么样的格式发
  • 会话层(Session Layer):分几次发
  • 传输层(Transport Layer):是否可靠发送/是否有数据丢失
  • 网络层(Network Layer):怎么发到
  • 数据链路层(Data Link Layer):收到数据,分给哪些设备
  • 物理层(Physical Layer):数据传输至物理设备

(1) 应用层

针对特定应用协议,为应用程序或用户请求提供各种请求服务,规定应用程序的相关通信细节

OSI参考模型最高层,也是最靠近用户的一层,为计算机用户、各种应用程序以及网络提供接口,也为用户直接提供各种网络服务。

(2)表示层

数据编码、格式转换、数据加密。

该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。

数据压缩和加密也属于表示层可提供的转换功能。

(3)会话层

通信管理:负责建立、管理和终止表示层实体之间的通信会话,支持它们之间的数据交换。

该层的通信由不同设备中的应用程序之间的服务请求和响应组成。

(4)传输层

管理两个节点之间的数据传输:建立主机端到端的链接,为会话层和网络层提供端到端可靠的透明的数据传输服务,确保数据能完整的传输到网络层。

(5)网络层

地址管理及路由选择:通过路由选择算法,为报文或通信子网选择最适当的路径。控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接。数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。

(6)数据链路层

互联设备的数据帧传送和链路管理:接收来自物理层的位流形式的数据,封装成帧,传送到网络层;将网络层的数据帧,拆装为位流形式的数据转发到物理层;负责建立和管理节点间的链路,通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。

(7)物理层

管理通信设备和网络媒体之间的互联互通。传输介质为数据链路层提供物理连接,实现比特流的透明传输。实现相邻计算机节点之间比特流的透明传送,屏蔽具体传输介质和物理设备的差异。

1.2 数据传输过程

网络中传输的数据包由两部分组成:

  • 一部分是协议所要用到的首部
  • 另一部分是上层传过来的数据

每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息,明确标明了协议应该如何读取数据。首部的结构由协议的具体规范详细定义。

在下一层的角度看,从上一分层收到的包全部都被认为是本层的数据。

在这里插入图片描述

2. TCP/IP

2.1 概念

在这里插入图片描述
(1)应用层

TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。

主要协议:HTTP(HyperText Transfer Protocol)、DNS(Domain Name System)、SMTP(Simple Mail Transfer Protocol)、FTP(File Transfer Protocol),TELNET、SNMP(Simple Network Management Protocol)

(2)传输层

在TCP/IP模型中,传输层的功能是使源端主机和目标端主机上的对等实体可以进行会话。

传输层定义了两种服务质量不同的协议。

  • TCP(Transmission Control Protocol):传输控制协议是一种面向有连接的传输层协议,能够正确处理在传输过程中丢包、传输顺序乱掉等异常情况,保证两端通信主机之间的通信可达
  • UDP(User Datagram Protocol):用户数据报协议是一种面向无连接的传输层协议,常用于分组数据较少或多播、广播通信以及视频通信等多媒体领域。

(3)网络层

网络层是整个TCP/IP协议栈的核心,它的功能是把分组发往目标网络或主机。

网络层定义了分组格式和协议,即IP协议(Internet Protocol )

(4)数据链路层

数据链路层控制网络层与物理层之间的通信,主要功能是保证物理线路上进行可靠的数据传递。

为了保证传输,从网络层接收到的数据被分割成特定的可被物理层传输的帧。帧是用来移动数据结构的结构包,不仅包含原始数据,还包含发送方和接收方的物理地址以及纠错和控制信息。其中的地址确定了帧将发送到何处,而纠错和控制信息则确保帧无差错到达。如果在传达数据时,接收点检测到所传数据中有差错,就要通知发送方重发这一帧。

(5)物理层

该层负责比特流在节点之间的传输,该层的协议既与链路有关,也与传输的介质有关,通俗来说就是把计算机连接起来的物理手段。

有时也将数据链路层与物理层合并称为网络接口层(Network Access Layer)

2.2 数据传输过程

在这里插入图片描述

3. 对应关系

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 例子

4.1 发送数据包

假设甲给乙发送电子邮件,内容为:“早上好”。而从TCP/IP通信上看,是从一台计算机A向另一台计算机B发送电子邮件。

(1)应用层处理

启动应用程序新建邮件,将收件人邮箱填好,再由键盘输入邮件内容“早上好”,点击“发送”按钮开始通信。

应用在发送邮件的那一刻建立TCP连接,从而利用这个TCP连接发送数据。它的过程首先是将应用的数据发送给下一层的TCP,再做实际的转发处理。

  • 首先,应用程序中会进行编码处理,相当于OSI的表示层功能。
  • 邮件编码后不一定会马上被发送出去,因为有些邮件的软件有一次同时发送多个邮件的功能,也可能会有用户点击“收信”按钮以后才一并接收新邮件的功能。这种何时建立通信连接何时发送数据的管理功能,从某种宽泛的意义上看属于OSI参考模型中会话层的功能。

(2)传输层处理

TCP 根据应用层要求,负责建立连接、发送数据以及断开连接。TCP 提供将应用层发来的数据顺利发送至对端的可靠传输。

TCP在应用层数据的前端附加一个TCP首部,发给网络层。

TCP 首部中包括:

  • 源端口号和目标端口号(识别发送主机跟接收主机上的应用)
  • 序号(用以发送的包中哪部分是数据)
  • Check Sum(判断数据是否被损坏)

(3)网络层处理

网络层将传输层传过来的TCP首部和TCP数据合起来当做自己的数据,并在TCP首部的前端在加IP首部。

IP首部中包含

  • 接收端IP地址以及发送端 IP地址
  • 判断其后面数据是TCP还是UDP的信息

IP包生成后,参考路由控制表决定接受此IP包的路由或主机。随后,IP包将被发送给连接这些路由器或主机网络接口的驱动程序,以实现真正发送数据。

如果尚不知道接收端的MAC地址,可以利用ARP(Address Resolution Protocol)查找。只要知道了对端的MAC地址,就可以将MAC地址和IP地址交给以太网的驱动程序,实现数据传输。

(4)数据链路层的处理

数据链路层将IP包,附加以太网首部并进行发送处理。

以太网首部中包含

  • 接收端MAC地址和发送端MAC地址
  • 标志以太网类型的以太网数据的协议。

根据上述信息产生的以太网数据包将通过物理层传输给接收端。发送处理中的FCS(Frame Check Sequence)由硬件计算,添加到包的最后,FCS 的目的是为了判断数据包是否由于噪声而被破坏。
在这里插入图片描述

4.2 传输数据包

每个包首部中至少都会包含两个信息:

  • 发送端和接收端地址
  • 上一层的协议类型

每个包从前往后依此被附加了以太网包首部、IP包首部、TCP包首部(或UDP包首部)以及应用的包首部和数据,包的最后则追加了以太网包尾(Ethernet Trailer)。

此外,每个分层的包首部中还包含一个识别位,用来标识上一层协议的种类信息。例如以太网的包首部中的以太网类型,IP中的协议类型以及TCP/UDP中两个端口的端口号等都起着识别协议类型的作用。应用的首部信息中,有时也会包含一个用来识别其数据类型的标签。

在这里插入图片描述

4.3 接收数据包

数据包的接收流程是发送流程的逆序过程。

(1)数据链路层处理

主机收到以太网包以后,首先从以太网的包首部找到MAC地址判断是否为发给自己的包。如果不是发给自己的包则丢弃;如果是,就查找以太网包首部中的类型域从而确定以太网协议所传送过来的数据类型。如该例中数据类型是IP包,因此再将数据传给处理IP的子程序,如果是其他诸如ARP的协议,就把数据传给ARP处理。

如果以太网包首部的类型域包含了一个无法识别的协议类型,则丢弃数据。

(2)网络层处理

IP 模块收到IP包首部及后面的数据部分以后,也做类似处理。如果判断得出包首部中的IP地址与自己的IP地址匹配,则接收数据并从中查找上一层的协议。如果上一层是TCP就将IP包首部之后的部分传给TCP处理;如果是UDP则将IP包首部后面的部分传给UDP处理。

对于有路由器的情况下,接收端地址往往不是自己的地址,此时,需要借助路由控制表,在调查应该送达的主机或路由器以后再转发数据。

(3)传输层处理

TCP模块首先会计算一下Check Sum,判断数据是否被破坏。然后检查是否在按照序号接收数据。最后检查端口号,确定具体的应用程序。

数据接收完毕后,接收端则发送一个“确认回执”给发送端。如果这个回执信息未能达到发送端,那么发送端会认为接收端没有接收到数据而一直反复发送。

数据被完整地接收以后,会传给由端口号识别的应用程序。

(4)应用层处理

接收端应用程序会直接接收发送端发送的数据。通过解析数据可以获知邮件的收件人地址是乙的地址。如果主机B上没有乙的邮件信箱,那么主机B返回给发送端一个“无此收件地址”的报错信息。

该例中,主机B上恰好有乙的收件箱,所以主机B和收件人乙能够收到电子邮件的正文。邮件会被保存到本机的硬盘上。如果保存也能正常进行,那么接收端会返回一个“处理正常”的回执给发送端。反之,一旦出现磁盘满、邮件未能成功保存等问题,就会发送一个“处理异常”的回执给发送端。

最终,用户乙利用主机B上的邮件客户端,接收并阅读由主机A上的用户甲所发送的电子邮件一“早上好”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/226585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 常用脚本搜集(nginx) —— 筑梦之路

作为搜集之用 nginx acc日志分析 #!/bin/bash # 日志格式: $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" LOG_FILE$1 echo "…

MySQL,分组order by

一、创建分组 ## 创建分组 -- 返回每个发布会的参会人数 SELECT event_id,COUNT(*) as canjia_num FROM sign_guest GROUP BY event_id; 1、group by子句可以包含任意个列,但是但指定的所有列都是一起计算的。 group by 后2个字段一起计算的 2、group by后面可以跟…

Leetcode 剑指 Offer II 057. 存在重复元素 III

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给你一个整数数组 nums 和两个整数 k 和 t 。请你判断是否存在 两…

STM32-HAL库11-SPI通讯(F103C6T6做主机,F103C8T6做从机)

STM32-HAL库11-SPI通讯(F103C6T6做主机,F103C8T6做从机) 一、所用材料 STM32F103C6T6最小系统板-主机 STM32F103C8T6最小系统板-从机 串口调试助手X-COM 二、所学内容 主要为实现SPI的轮询发送功能,在DSP280049C初学&#xff…

Logistic Regression——逻辑回归

1. 为什么需要逻辑回归 在前面学习的线性回归中,我们的预测值都是任意的连续值,例如预测房价。除此之外,还有一个常见的问题就是分类问题,而逻辑回归是一个解决分类问题的模型,其预测值是离散的。 分类问题又包括…

30天精通Nodejs--第十四天:MongoDB

这里写目录标题 前言什么是 MongoDB?安装 MongoDB 驱动连接到 MongoDB 数据库执行基本操作插入文档查询文档更新文档删除文档使用 Mongoose总结前言 MongoDB 是一款流行的 NoSQL 数据库,为 Node.js 开发者提供了灵活性和可伸缩性。本文将详细介绍在 Node.js 中使用 MongoDB的…

JdbcTemplate能否开启事务?使用Statement手动开启事务

一、需求背景 项目中经常会去对接第三方的数据,将对方的用户组织等信息同步过来,此时会遇到几个问题就是数据量大的时候性能问题,数据部分更新时又该怎么同步,但这些数据基本都有状态和更新时间,根据该两个值去新增和…

如何安装LUT预设?达芬奇/FCP/PR怎么安装LUT预设.cube格式文件的教程

在下载的LUT调色预设压缩文件包中,通常两个包含不同格式的LUT文件: .cube 和 .xmp 包含的 .cube 文件几乎与主流的视频编辑和色彩校正软件兼容,并且还可以在 Adobe Photoshop 等一些照片应用程序中使用。如果主要是将这些 LUT 用于视频剪辑项…

如何搭建Gateway服务

Gateway的简单介绍 Spring Cloud Gateway是Spring Cloud的一个项目,该项目是基于Spring,Spring Boot和Project Reactor等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。Gateway网关可以是…

生信算法1 - DNA测序算法实践之序列操作

生信序列基本操作算法 建议在Jupyter实践,python版本3.9 1. 定义DNA序列 seq ACGT# 从序列指定索引的碱基 seq[1] # C# 序列长度 len(seq) # 42. 序列拼接 # 序列拼接 - 字符串 seq1 AACC seq2 GGTT print(seq1 seq2) # AACCGGTT# 序列拼接 - 列表 seqs [A…

持续集成交付CICD:Jenkins使用GitLab共享库实现基于SaltStack的CD流水线部署前后端应用

目录 一、实验 1.Jenkins使用GitLab共享库实现基于SaltStack的CD流水线部署前后端应用 2.优化共享库代码 二、问题 1.Jenkins手动构建后端项目流水线报错 一、实验 1.Jenkins使用GitLab共享库实现基于SaltStack的CD流水线部署前后端应用 (1)GitLa…

使用Redis构建简单的社交网站

文章目录 第1关:创建用户与动态第2关:处理用户关系第3关:状态与信息流 第1关:创建用户与动态 编程要求 在Begin-End区域编写 create_user(login_name, real_name) 函数,实现创建新用户的功能,具体参数与要…

Rust语言第一篇:我是谁?

Rust 是一种系统级编程语言,专注于安全性、并发性和性能。它由 Mozilla 开发并于 2010 年首次发布。Rust 被设计为一种可靠和高效的编程语言,可用于构建各种类型的软件,从操作系统和嵌入式设备到 Web 应用程序和桌面应用程序。 以下是 Rust …

java.lang.UnsupportedOperationException: null

目的&#xff1a;想使用add()在list集合中加入数据 原因&#xff1a;Arrays的内部类ArrayList没有重写 AbstractList的add和remove方法&#xff0c;直接使用会抛异常 String str "1,2,3,5" String[] ids str.split(","); List<String> list Array…

假如董宇辉是个AI

董宇辉这么质朴、勤奋、爱动感情又有灵气的带货主播&#xff0c;配得上他的上千万粉丝。他是直播带货的一股清流&#xff0c;罕见的品类和物种。 然而&#xff0c;是东方甄选成就了董宇辉&#xff0c;还是董宇辉托起了东方甄选&#xff0c;真是笔说不清的糊涂账。董宇辉为什么…

【javascript】npm ERR! cb() never called!

错误 环境 windows 10 nvm node 14.17.0 如何解决 尝试了 5 种方法 1&#xff0c;npm cache clean --force 2, npm cache verify 3, 删掉package-lock.json &#xff08;然鹅我的这个项目没有这个文件&#xff09; 4, npm set strict-ssl false 5, 删除node_modules 这五种…

Excel中MATCH和INDEX函数的用法详解,以及Vlookup的数组用法

match函数 目的&#xff1a;查询函数&#xff0c;范围单元格中搜索特定的项&#xff0c;然后返回该项在此区域中的相对位置。 For example:让 match 去【隔壁办公室】找【老张】 Match 回复&#xff1a;【老张】坐在【隔壁办公室】第【四】个座位上 公式&#xff1a;【 mat…

【数据库设计和SQL基础语法】--查询数据--聚合函数

一、聚合函数概述 1.1 定义 聚合函数是一类在数据库中用于对多个行进行计算并返回单个结果的函数。它们能够对数据进行汇总、统计和计算&#xff0c;常用于提取有关数据集的摘要信息。聚合函数在 SQL 查询中广泛应用&#xff0c;包括统计总数、平均值、最大值、最小值等。 1…

【FPGA/verilog -入门学习7】 条件判断if与分支判断case语句的语法介绍

需求 使用if 和case 产生格雷码 / /*条件判断if与分支判断case语句的语法介绍 需求 使用if 和case 产生格雷码*/ / timescale 1ns/1ps module vlg_design(input [3:0] i_data, output reg [3:0] o_data,output reg [3:0] o_datac);always (*) begin if (4b0000 i_data) o_d…

Ceph入门到精通-Ceph Pacific 版本磁盘预测模块

磁盘预测模块利用 Ceph 设备运行状况检查来收集磁盘运行状况指标&#xff0c;并使用内部预测器模块生成磁盘故障预测并返回到 Ceph。它不需要任何外部服务器进行数据分析和输出结果。其内部预测器的准确率约为70%。 1. 启用 运行以下命令以在 Ceph 环境中启用diskprediction_…