tcp/ip分层模型

文章目录

      • tcp/ip分层模型
      • 封装和分用

tcp/ip分层模型

在这里插入图片描述

上面这个图主要介绍了osi七层模型和tcp/ip五层模型(有的资料上说的是tcp/ip四层模型,把物理层算在了硬件设备上,这篇文章还是按照五层模型来讲)。但osi七层模型实现起来比较复杂,现在也很少使用,这篇文章就主要讲tcp/ip五层模型。

tcp/ip分层模型,分为应用层,传输层,网络层,数据链路层和物理层,每一层处理特定的功能,同时与上一层和下一层进行通信。下面我们将逐层详细介绍。

应用层

应用层是TCP/IP协议栈的最高层,它为应用程序提供网络通信的接口和服务。在这一层,应用程序使用协议(如HTTP、FTP、SMTP等)来实现数据传输和通信。应用层的协议数据单元被称为报文。

常见的应用层协议有:

  • HTTP(超文本传输协议):在Web浏览器和服务器之间传输超文本和其他资源。
  • FTP(文件传输协议):用于在客户端和服务器之间传输文件。
  • SMTP(简单邮件传输协议):用于在邮件服务器之间传输电子邮件。

传输层

传输层负责在两个网络节点之间提供端到端的通信服务。它使用传输协议(如TCP或UDP)来实现可靠的数据传输。传输层的数据单元被称为段。

  • TCP(传输控制协议):提供面向连接的可靠数据传输。它负责将数据拆分成小的数据包,并确保它们的有序传输。TCP还提供错误检测和纠正机制。
  • UDP(用户数据报协议):提供无连接的不可靠数据传输。它是一种无状态协议,适用于实时应用程序和不需要数据完整性的场景。

网络层

网络层负责在不同的网络之间进行数据传输和路由选择。它使用IP协议将数据包从源节点传输到目标节点。网络层的数据单元被称为IP数据报。

  • IP(互联网协议):提供网络间的数据传输。它负责将数据包分组并将其从源节点发送到目标节点。IP协议还包括寻址机制和路由选择。

数据链路层

数据链路层负责在相邻网络节点之间提供可靠的数据传输。它将IP数据报转换为帧,并在物理介质上进行传输。数据链路层的数据单元被称为帧。

  • 以太网(Ethernet)是一种常见的数据链路层协议。
  • Wi-Fi(无线局域网)也是一种数据链路层协议,用于在无线网络中进行数据传输。

物理层

物理层负责在网络中传输二进制数据。它处理物理介质的连接和电信号信号传输。物理层不关心数据的含义,只负责将比特流从一个节点传输到另一个节点。

  • 物理层协议包括以太网的物理接口、光纤传输和无线电频率。

思考:路由器和交换机有什么区别?

  • 功能:路由器主要负责将数据包从一个网络传递到另一个网络,它使用路由表来决定数据包的最佳路径。路由器能够实现网络之间的连接,并对数据包进行转发和路由选择。交换机主要负责在局域网内部进行数据包的转发,它使用MAC地址表来决定数据包的目标地址。
  • 工作层次:路由器工作在网络层(第三层),负责处理IP数据包,执行网络寻址和路由选择。交换机工作在数据链路层(第二层),负责处理帧,使用MAC地址进行数据包的转发。

介绍完了tcp/ip五层协议,接下来看看在网络中是如何进行通信的。

封装和分用

举个例子:用户A通过微信给用户B发送早安。
用户A

(1)应用层:微信应用程序

微信就会把用户A输入的“早安” 打包成一个应用层的数据报,这个数据包由程序员自己设定,假设就按照下面这种格式进行打包。

在这里插入图片描述

上图中我设置了四个字段,使用,来分割,这就构造了一个应用层的数据报,这个规则就是我约定的应用层协议,(应用层协议往往需要根据场景的需要,由程序员自己设置),此时就可以把应用层数据报通过操作系统的api
传递给传输层。

(2)传输层

传输层将应用层数据再次进行打包,变成传输层数据报。这里打包的本质是字符串的拼接,在刚才应用层数据的基础上拼接上传输层的报头。
传输层典型的协议是TCP和UDP,此处使用UDP协议。

一个数据报 = 报头 + 载荷

在这里插入图片描述此时就可以把传输层数据报交给网络层

(3)网络层

网络层最主要的协议是IP协议,下面是一个IP数据报

在这里插入图片描述

构造完整的Ip数据报后,IP协议会继续调用数据链路层的api,把数据传递给数据链路层的协议进行处理。

(4)数据链路层

数据链路层这里涉及到的核心协议是以太网,此处“以太表示网络数据传输的介质”,以太网就是我们日常中常见的有线网络。以太网数据帧包括帧头和帧尾。

在这里插入图片描述

构造好后,传递给物理层。

(5)物理层

把上述这样的以太网数据帧(二进制结构)转换成电信号/光信号/电磁波 然后进行发送。

向上面添加报头的操作就是封装


暂时不考虑中间过程,假设数据报已经到达用户B的网卡了,用户B如何处理?用户B处理的过程就是分用。

(1)物理层

当用户B的物理层收到光信号/电信号,电磁波后,就会把对应的物理信号转化成数字信号(二进制),得到一个以太网数据帧,进一步把这个数据帧传递给数据链路层进行处理。

(2)数据链路层 以太网

数据链路层得到下面的以太网数据帧,将得到的以太网数据帧取出其中的载荷交给网络层。

在这里插入图片描述

(3)网络层 IP协议

网络层得到下面的IP数据报,将得到的IP数据报取出其中的载荷交给传输层。

在这里插入图片描述

(4)传输层 UDP协议

传输层得到下图的UDP数据报,取出UDP报头的载荷传递给应用层

在这里插入图片描述

(5)应用层 微信应用程序
在这里插入图片描述

按照微信内部的应用层协议来解析数据。

分用的过程就是封装的逆向过程

但在现实生活中,两台设备大概率不会直接通过网线连接,而是通过多个交换机路由器相连接。拿经典的交换机和路由器来说,交换机会封装分用到数据链路层,路由器会封装分用到网络层。


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

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

相关文章

SQL 关键字参考手册(三)

目录 SQL 关键字 SQL INSERT INTO 关键字 INSERT INTO SQL INSERT INTO SELECT 关键字 INSERT INTO SELECT SQL IS NULL 关键字 IS NULL SQL IS NOT NULL 关键字 IS NOT NULL SQL JOIN 关键字 INNER JOIN LEFT JOIN RIGHT JOIN FULL OUTER JOIN SQL LIKE 关键字…

代码随想录算法训练营第16天 | 104.二叉树的最大深度, 111.二叉树的最小深度 ,222.完全二叉树的节点个数

二叉树理论基础: https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE 104.二叉树的最大深度 题目链接:https://leetcode.cn/problems/maximum-depth-…

【TCP】传输控制协议

前言 TCP(Transmission Control Protocol)即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。它由IETF的RFC 793定义,为互联网中的数据通信提供了稳定的传输机制。TCP在不可靠的IP层之上实现了数据传输的可…

如何使用Docker部署导航页工具Dashy并实现任意浏览器远程访问——“cpolar内网穿透”

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起,形成自己的导航…

linux-apt 2

文章目录 一、删除包(Removing Packages )1、apt remove package_name2、apt remove package1 package2 package3 ...3、apt purge package14、apt autoremove(没有包名参数) 二、查询1、apt search package_name2、apt show pack…

UR20机械臂学习笔记

UR20机械臂学习笔记 UR20机械臂学习笔记一.使用UR系列机器人第三方库二.UR机器人的初始化 1.连接UR机器人2.设置机器人末端法兰(tcp)3.设置机器人末端负载 三.机器人运动程序 1.机器人移动 (1) MoveJ(2) MoveL(3) MoveP(4) MoveC(5) Translate(6) Stop 2…

最大流解决二分图匹配问题

文章目录 零、前言一、二分图匹配转化为网络流模型1.1建模步骤1.2整数值最大流和二分图匹配的关系1.3代码实现 二、OJ练习P2756 飞行员配对方案问题P3254 圆桌问题 零、前言 阅读本文前,需具备以下知识: 二分图及染色法判定-CSDN博客 二分图最大匹配—…

PHP报错信息

PHP 推荐链接Thinkphp报错:SplFileInfo::getSize(): stat failed for 推荐链接 链接目录 Thinkphp报错:SplFileInfo::getSize(): stat failed for 先执行 move() 移动文件后,导致文件移除之后又执行了:$size $file->getSize…

【JavaSE】P114~P147 ArrayList集合,Scanner类,Random,字符串及相关常用方法,静态static

目录 1 ArrayList 集合装箱,拆箱及包装类 2 API 概述和使用Scanner类匿名对象Random生成随机数 3 字符串字符串的31种构造方法字符串的常量池equals和 字符串的获取相关方法字符串的截取方法字符串的转换相关方法字符串的分割方法 4 静态static关键字静态static的内…

对话泛能网程路:能源产业互联网,行至中程

泛能网的能源产业互联网的标杆价值还不仅于此。其在产业互联之外,也更大的特殊性在于其也更在成为整个碳市场的“辅助运营商”,包括电力、碳等一系列被泛能网帮助企业改造和沉淀的要素资产,都在构成着碳交易市场的未来底层。 这恰是产业互联…

PCL-IO输入输入模块

IO输入输入模块 一、概述二、点云数据格式1. PCD 格式2. PLY 格式3. OBJ 格式4. STL 格式5. OFF 格式 三、读取3D文件1. API 总览2. 示例 四、保存3D文件1. API 总览2. 示例 一、概述 PCL 库提供了一个模块用来对3D数据进行读写操作,这个库提供了一个模块&#xff…

2007-2022年全国货币供应量M2、失业率、CPI、第三方互联网支付、出口、人口等宏观经济指标数据(年度、季度)

2007-2022年全国货币供应量M2、失业率、CPI、第三方互联网支付、出口、人口等宏观经济指标数据(年度、季度) 1、时间:2007-2022年(季度、年度) 2、指标: 季度指标:时间、GDP不变价累计值(亿元…

python ffmpeg将mp4文件实时转码为ts,并指定pid等信息,输出到udp

要将MP4文件实时转码为TS格式,并将PID等信息指定为UDP输出,可以使用subprocess模块和ffmpeg命令行工具来实现。以下是一个示例代码,用于实时转码并将输出发送到UDP服务器: import subprocess import timeinput_file "input.…

性能优化-高通的Hexagon DSP和NPU

原文来自【 Qualcomm’s Hexagon DSP, and now, NPU 】 本文主要介绍Qualcomm Hexagon DSP和NPU,这些为处理简单大量运算而设计的硬件。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能&#xf…

多臂老虎机理论系列

[多臂老虎机理论](Lower bounds for non-adaptive exploration) 多臂老虎机之Lower bounds 定理 2.12: 定理的意义在于,对于任何不调整探索策略的算法,存在至少一个问题实例,使得随着时间的推移,该算法的预期遗憾将…

Linux常见的管理命令

1. whoami 作用: 显示出当前有效的用户名称,Linux是多用户多任务 语法:whoami(选项) 选项: --help:在线帮助 --version:显示版本信息和退出 场景使用: 1. 当用户想要查看当前登录系统的用户…

14.case条件测试语句(5)

case语句是在多个范围内匹 配数据,若匹配成功则执行相关命令并结束整个条件测试;如果数据不在所列出的范围内, 则会去执行星号(*)中所定义的默认命令(C语言中的default语句) 提示用户输入一个字…

爬取樱花动漫名侦探柯南最新剧场版ts格式

import os import requests import zipfile from tqdm import tqdm import tkinter as tkfilename 名侦探柯南\\ if not os.path.exists(filename):os.mkdir(filename) # https://vip.ffzy-online6.com/20231129/22304_740e70d0/2000k/hls/cedd2dc1ecb000001.ts # https://vip…

硬件基础:存储器

之前对存储器做过简单的汇总,参考这篇文章: 计算机/微机存储技术_路溪非溪的博客-CSDN博客 这次,我们从数字集成电路的角度再次补充学习一下存储器的知识。 定义和分类 从这里面我们能知道一些关键词。 存储介质主要是半导体器件和磁性材料。…

Java技术栈高级攻略之专栏简介

Java是一种广泛应用于企业级应用开发的编程语言,具备强大的生态系统和丰富的工具支持。想要在Java技术栈中取得更高的成就,你需要不断深入学习和实践。本专栏为你提供很多高级攻略,帮助你更好地掌握Java技术栈。 一、多线程编程 多线程编程是…