热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网络基础(一)TCP/IP四层模型和网络传输基本流程

TCPIP五层模型TCPIP是两个独立的且紧密结合的协议,负责管理和引导数据报文在网络上的传输。TCP负责和远程主机的连接,IP负责寻址,是报文被送到其该去的地方。TCPIP也分为

TCP/IP五层模型

TCP/IP是两个独立的且紧密结合的协议,负责管理和引导数据报文在网络上的传输。TCP负责和远程主机的连接,IP负责寻址,是报文被送到其该去的地方。
TCP/IP也分为不同的层次开发,每一层负责不同的通信功能,但TCP/IP协议简化了层次设备。而由下而上一次是网络接口层、网络层、传输层、应用层。

网络基础(一)------------TCP/IP四层模型和网络传输基本流程

  • 网络接口层:有时候也称为数据链路层,通常包括操作系统中设备的驱动程序和计算机相应的网络接口卡。
  • 网络层:处理分组在网络中的活动,如分组的选路。
  • 传输层:主要为两台主机上的应用程序提供端到端的通信。
  • 应用层:负责处理特定的应用程序和程序细节。

各层主要的协议

网络基础(一)------------TCP/IP四层模型和网络传输基本流程

OSI和TCP/IP的区别

不同之处:

OSI模型包括了7层,而TCP/IP模型只有四层,虽然它们具有功能相同的网络层,传输层,和应用层,其但他层并不相同。
OSI参考模型在网络层支持无连接和面向连接的两种服务,而在传输层仅支持面向连接的服务。TCP/IP模型在网络层仅支持无连接服务,在传输层支持面向连接和无连接两种服务。

网络传输的基本流程

网络传输的流程图
局域内两台主机通过TCP/IP协议通讯的过程如下所示
网络基础(一)------------TCP/IP四层模型和网络传输基本流程

首先用户层需要传输文件,那么就需要文件传输协议。
在需要传送的数据加上文件传输协议的报头,呼叫下一层。
传输层接收到这个指令之后,加上该层的协议报头,再呼叫下一层。
网络层收到这个指令之后,加上网络层的报头,传给链路层。
链路层的协议中包括传送目标。通过局域网传送给了对方主机的链路层。
以上过程称为——封装。

数据封装的过程

在不同的协议层对数据包的叫法也是不同的,在传输层叫段,在网络层叫做数据报,在链路层叫做帧。
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部,称为封装。
首部信息中包含了一些类似于首部有多长,载荷有多长,上层协议是什么等信息。
数据封装成帧后会发到传输介质中,到达目的主机后每层协议再剥掉相应的首部,根据首部的“上层协议字段”将数据交给对应的上层协议进行处理。

以下为数据封装的过程
网络基础(一)------------TCP/IP四层模型和网络传输基本流程

对方主机接收到该数据之后,进行解包,将本层协议的报头拆开,剩下的内容传递给上层。
每一层只能够解自己的报头。 直到数据传递给用户层,用户就接收到了该数据,称为—-解包。

所以,封装是自顶向下的过程,解包是自底向上的过程。每一层协议只能添加自己的报头信息。每一层也只能解包自己的报文信息。

那么在解包的过程中,它的上层协议有很多,那么到底下层该传递给上层的谁呢?
所以,封装时,在每一层的报头信息必须包含:它的上层协议是谁。解包时,依据对应的报文信息传递给上层协议。这个过程叫做——分用

其实这个过程可以简单的通过下面这个例子理解:
比如说,我在网上直接买了一瓶洗面奶。卖家发货要发快递给我。但是我收到的不只有一个洗面奶,还有包装,快递单,快递盒子,快递单子。映射到网络的数据传输过程 ,那些快递包装盒,包装袋就有点像网络传输过程中的传输协议加上的报头信息。通过这些报头信息,每一个快递员都能判断这个数据是不是我要的(是不是我要派送的快递)。直到数据被传送的用户手里就是洗面奶送到我的手里,外面的那些包装我根本不关心,就将它们一层层丢弃,这个过程就像是数据传送至接收方的物理层之后,进行解包的过程。
那么快递员根据快递单上的信息,得知了快递是要交给谁的。也就是说,每一层自底向上交付的时候,报文信息必定会包含我这个数据是要交付给上层的谁的。

跨网段的主机的传输。数据从一台计算机到另一台计算机传输过程中要经过一个或者多个路由器

网络基础(一)------------TCP/IP四层模型和网络传输基本流程

两个主机此时不在同一个局域网内,所以它们两个主机想要沟通,就必须通过路由器。
客户从用户层发送数据,自顶向下发送,一步步添加报头信息,这是封装的过程。然后发送到局域网内,可是发送方发送数据时,已经知道了他要发送数据的接收方不在这个局域网内。那么他就会将该数据发给路由器。寻求路由器的帮助,帮助它转发。

路由器也是一个主机,所以他经过解包,得到了目标主机的ip地址,然后在经过封装,此时就会加上目标局域网的报头信息。(相当于该数据换了身衣服)通过路由器的路由功能,数据被发送到了接收方的局域网内,该局域网内所有主机都能收到,但是在通过解析,只有指定接收方会响应。
这就是在广域网内数据传输的过程。
ip协议可以屏蔽底层的局域网差异。在ip层看来,全世界的网络都只遵守ip这一种协议。
这里要着重区分一下MAC地址和IP 地址:
对于MAC地址,由于我们不直接和它接触,所以大家不一定很熟悉。在OSI(Open System Interconnection,开放系统互连)7层网络协议(物理层,数据链路层,网络层,传输层,会话层,表示层,应用层)参考模型中,第二层为数据链路层(Data Link)。它包含两个子层,上一层是逻辑链路控制(LLC:Logical Link Control),下一层即是我们前面所提到的MAC(MediaAccess Control)层,即介质访问控制层。所谓介质(Media),是指传输信号所通过的多种物理环境。常用网络介质包括电缆(如:双绞线,同轴电缆,光纤),还有微波、激光、红外线等,有时也称介质为物理介质。MAC地址也叫物理地址、硬件地址或链路地址,由网络设备制造商生产时写在硬件内部。这个地址与网络无关,也即无论将带有这个地址的硬件(如网卡、集线器、路由器等)接入到网络的何处,它都有相同的MAC地址,MAC地址一般不可改变,不能由用户自己设定。

mac地址可以标识全世界上唯一一台主机,仅仅在局域网内有效。
ip地址可以标识世界上唯一一台联网的主机,在广域网内也有效

其实举个例子就能够很好的理解了。
比如说:西游记中的唐僧最爱说的一句话就是,贫僧从东土大唐来,到西天取经去。那么这个从东土大唐来,到西天取经去,这个就是ip地址。你的源地址和目标地址,并且在数据过程中一直不会变的地址。
但是,比如唐僧这一站在女王国,女儿国的国王就会问他:哥哥你上一站是从哪里来的。唐僧就会告诉她,上一站是从比丘国来,然后女儿国王就告诉唐僧:经过女儿国下一站就会到达黑风岭。这个比丘国和黑风岭就是mac地址,在数据传输过程中是一直在变化的。


推荐阅读
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 利用 Python 管道实现父子进程间高效通信 ... [详细]
  • Linux入门教程第七课:基础命令与操作详解
    在本课程中,我们将深入探讨 Linux 系统中的基础命令与操作,重点讲解网络配置的相关知识。首先,我们会介绍 IP 地址的概念及其在网络协议中的作用,特别是 IPv4(Internet Protocol Version 4)的具体应用和配置方法。通过实际操作和示例,帮助初学者更好地理解和掌握这些基本技能。 ... [详细]
  • 虚拟机网络设置与数据库远程连接优化指南
    本文针对个人计算机上虚拟机网络配置与数据库远程连接的问题,提供了一套详细的优化指南。在探讨远程数据库访问前,需确保网络配置正确,特别是桥接模式的设置。通过合理的网络配置,可以有效解决因虚拟机或网络问题导致的连接失败,提升远程访问的稳定性和效率。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 本文介绍了如何查看PHP网站及其源码的方法,包括环境搭建、本地测试、源码查看和在线查找等步骤。 ... [详细]
  • iOS 不定参数 详解 ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • 本文将详细介绍如何在Mac上安装Jupyter Notebook,并提供一些常见的问题解决方法。通过这些步骤,您将能够顺利地在Mac上运行Jupyter Notebook。 ... [详细]
  • Python错误重试让多少开发者头疼?高效解决方案出炉
    ### 优化后的摘要在处理 Python 开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity` 库提供了一种高效的解决方案。首先,通过 `pip install tenacity` 安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用 `|`(或)和 `&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity` 还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。 ... [详细]
  • 本指南详细介绍了在Linux环境中高效连接MySQL数据库的方法。用户可以通过安装并使用`mysql`客户端工具来实现本地连接,具体命令为:`mysql -u 用户名 -p 密码 -h 主机`。例如,使用管理员账户连接本地MySQL服务器的命令为:`mysql -u root -p pass`。此外,还提供了多种配置优化建议,以确保连接过程更加稳定和高效。 ... [详细]
author-avatar
书友67997456_296
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有