【计算机网络】详解TCP/IP分层模型局域网和跨网络通信的原理

一、网络协议

两个概念:交换机:实现位于同一个子网中的主机数据交换。路由器:实现数据包的跨网络转发。

两台主机的距离变远了,会引发出一系列问题:

1、如何使用数据的问题

2、数据的可靠性问题

3、主机定位问题

4、数据报局域网转发问题

为了解决这些问题,就有网络协议,也就是TCP/IP协议。网络协议是层状结构的。 

二、OSI七层模型

 在实践中,一般将会话层、表示层、应用层统一称为应用层,由用户自主实现。

2.1、TCP/IP五层(或四层)模型

        TCP/IP是一组协议的代名词,它还包括许多协议,组成了 TCP/IP协议簇。TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。物理层我们考虑的比较少. 因此很多时候也可以称为 TCP/IP四层模型。
物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆 (现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层。
数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层。
网络层: 负责地址管理和路由选择.。例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层。
传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机。
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等.。我们的网络编程主要就是针对应用层。

TCP/IP协议是在操作系统内部实现的,网络也属于操作系统源代码的一部分。 因为操作系统是用C语言实现的,所以TCP/IP协议也是用C语言实现的。

如何使用数据的问题是由应用层解决的,数据的可靠性问题是由传输层解决的,主机定位问题是由网络层解决的,数据报局域网转发问题是由数据链路层解决的

三、局域网通信

        同一个局域网中的主机可以直接通信,这就是以太网的通信原理。局域网中所有的主机都接在同一根网线上,如果当两个主句同时向网络中发送消息时,就有可能发生数据碰撞问题,发送消息的主机需要进行碰撞的检测和避免。任何一个局域网就是一个碰撞域,任何时刻只允许一台主机在局域网中发送消息(以太网)。 局域网本质就是一个临界资源。局域网中如果主机太多了,为了减少数据碰撞,就要有交换机了。

3.1、Mac地址

        Mac地址是一种硬件地址,每一台主机上(手机、电脑)都会有网卡,网卡在出厂的时候就内置了一个序列号,这个序列号是全球唯一的。这个序列号就叫做Mac地址(48位)。

        MAC地址用来识别数据链路层中相连的节点;长度为48位,及6个字节。 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19) 在网卡出厂时就确定了,不能修改。mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突;也有些网卡支持用户配置mac地址)。

 3.2、局域网通信原理

        消息不能凭空从一个主机直接发送给另一个主机,必须通过物理介质。当一个主机想要给另一个主机发送一条消息时,在每一层上都要添加协议报头。所谓的添加协议报头,就是在一串二进制数据的前面添加一个固定的结构体对象。报文不断自顶向下进行交付的过程,要添加每一层协议报头,这个过程叫做封装。

数据加上上面层所封装的报头称之为该层的有效载荷。报文为协议报头+有效载荷每一层的报文都有各自的叫法,自顶向下分别为request/response,数据段,数据报,数据帧。

当另一台主句获取了报文以后,就要对该报文进行解包和分用。解包是指将报头和有效载荷进行分离,分用是将自己的有效载荷交给上层的协议在逻辑上,同层协议都可以认为自己在与对方直接通信

四、横跨路由器的网络通信

        路由器至少要横跨两个网络,所以路由器要有两张网卡,也就意味着路由器会有两个Mac地址。数据在转发的过程中会存在两套地址,一套是源IP地址和目的IP地址,另一套为源Mac地址和目标Mac地址。

        如上图所示,当报文传送到网络层时,添加的网络层报头中包含了源IP地址和目的IP地址(也包括源端口号和目标端口号),传送到数据链路层时,添加的数据链路层报头中包含了源Mac地址和目标Mac地址,通过目标Mac地址路由器获取报文,通过解包分用再封装添加新的数据链路层报头,交由对应的网卡接收。在网络层及网络层以上,发送方和接收方收到的东西完全相同,这样就屏蔽了各局域网的数据链路层的区别底层Mac地址的转化全都由路由器帮我们做了。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

第六部分:1---进程间通信,匿名管道

目录 进程间通信 进程间通信的目的: 进程间通信的本质: 管道: 管道的定义: 匿名管道 单向通信的管道通路: 进程和文件之间的解耦: 单向管道的读写端回收问题: 管道通信主要实现动态数…

CS61C 2020计算机组成原理Lecture03

1、C Operators Operator Precedence 2、Arrays 1、Pointing to Different Size Objects 2、sizeof() 3、 Struct Alignment 四字节边界:指的是内存地址能够被4整除的情况。在计算机内存中,每个存储位置都有一个唯一的地址。当…

算法训练——day16快乐数

202. 快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为…

【数据结构】数据结构系列学习笔记——导航篇

一:概述 数据结构是计算机科学中的核心概念之一,是优化算法性能和资源利用率的关键。在软件开发和数据处理中,选择合适的数据结构对于算法的效率至关重要。数据结构的选择通常基于数据的使用模式,包括数据元素之间的关系、数据的存…

STM32 单片机最小系统全解析

STM32 单片机最小系统全解析 本文详细介绍了 STM32 单片机最小系统,包括其各个组成部分及设计要点与注意事项。STM32 最小系统在嵌入式开发中至关重要,由电源、时钟、复位、调试接口和启动电路等组成。 在电源电路方面,采用 3.3V 直流电源供…

WPF 的TreeView的TreeViewItem下动态生成TreeViewItem

树形结构仅部分需要动态生成TreeViewItem的可以参考本文。 xaml页面 <TreeView MinWidth"220" ><TreeViewItem Header"功能列表" ItemsSource"{Binding Functions}"><TreeViewItem.ItemTemplate><HierarchicalDataTempla…

TMStarget学习——T1 Segmentation数据处理及解bug

最新学习季公俊老师的神器 TMStarget 的第一个模块基于结构像的靶区计算T1 segmentation。下面上步骤&#xff1a; (1)在github 上下载 TMStarget https://github.com/jigongjun/Neuroimaging-and-Neuromodulation (2)按照要求下载依赖工具软件AFQ、vistasoft、SPM12 &#…

虚拟机vaware中cpu设置跑满大核

首先&#xff0c;大核速度快&#xff0c;并且在资源紧张时大核优先&#xff0c;小核甚至是闲着围观大核跑满。其次&#xff0c;遇到经常切换操作虚拟机和win11的使用场景&#xff0c;切换核心本身也会造成一点卡顿&#xff0c;降低虚拟机里操作流畅度。另外&#xff0c;13代在你…

马斯洛需求理论(人类需求的五个层次)用户体验五要素四点心智模型

一&#xff1a;核心用户 1.1 什么是核心用户 潜在用户 &#xff1a;未使用该产品的用户&#xff0c;但是有使用的需求。目标用户 &#xff1a;已经使用产品的普通用户&#xff0c;活跃度低。种子用户 &#xff1a;活跃度比较高&#xff0c;对产品的熟悉程度比较高&#xff0c…

无人机光电吊舱的技术!!

1. 成像技术 可见光成像&#xff1a;通过高分辨率相机捕捉地面或空中目标的清晰图像&#xff0c;提供直观的视觉信息。 红外热成像&#xff1a;利用红外辐射探测目标的温度分布&#xff0c;实现夜间或恶劣天气条件下的隐蔽目标发现。 多光谱成像&#xff1a;通过不同波段的光…

windows C++ 并行编程-异步消息块(一)

代理库提供了多种消息块类型&#xff0c;使你能够以线程安全的方式在应用程序组件之间传播消息。 这些消息块类型通常与 concurrency::send、concurrency::asend、concurrency::receive 和 concurrency::try_receive 等各种消息传递例程配合使用。 本文包含以下各节&#xff1…

Linux:进程(二)

目录 一、cwd的理解 二、fork的理解 1.代码共享 2.各司其职 3.fork的返回值 三、进程状态 1.进程排队 2.进程状态 运行状态 一、cwd的理解 cwd&#xff08;current working directory&#xff09;。译为当前工作目录。 在C语言中&#xff0c;使用fopen函数打开文件时&…

React-Hook原理

前置知识 闭包 在 Hook 的应用比如 dispatch 函数,也就是 useState 返回的第二个参数 闭包是指有权访问另一个函数作用域中变量或方法的函数,创建闭包的方式就是在一个函数内创建闭包函数,通过闭包函数访问这个函数的局部变量, 利用闭包可以突破作用链域的特性,将函数内部…

IDEA去除掉虚线,波浪线,和下划线实线的方法

初次安装使用IDEA&#xff0c;总是能看到导入代码后&#xff0c;出现很多的波浪线&#xff0c;下划线和虚线&#xff0c;这是IDEA给我们的一些提示和警告&#xff0c;但是有时候我们并不需要&#xff0c;反而会让人看着很不爽&#xff0c;这里简单记录一下自己的调整方法&#…

基于ssm+vue+uniapp的面向企事业单位的项目申报小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

水果成熟度检测系统源码分享

水果成熟度检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

mysql事务的隔离级别学习

事务的隔离级别: ⅰ. 读未提交 ⅱ. 对已提交 &#xff08;解决 脏读&#xff09; ⅲ. 可重复读 &#xff08;解决 不可重复读&#xff09; ⅳ. 串行化 &#xff08;解决 脏读 不可重复读 幻读 问题 &#xff09; 隔离级别分类如下&#xff0c;在不同的隔离级别下可能产生不…

LabVIEW提高开发效率技巧----使用LabVIEW工具

LabVIEW为开发者提供了多种工具和功能&#xff0c;不仅提高工作效率&#xff0c;还能确保项目的质量和可维护性。以下详细介绍几种关键工具&#xff0c;并结合实际案例说明它们的应用。 1. VI Analyzer&#xff1a;自动检查代码质量 VI Analyzer 是LabVIEW提供的一款强大的工…

Python 之数据库操作(Python Database Operations)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

新书出版,大陆首本NestJS图书《NestJS全栈开发解析:快速上手与实践》

新书全栈实战项目&#xff1a;数字门店管理平台开源啦&#x1f389;&#x1f389;&#x1f389; GitHub地址&#xff08;持续更新NestJS企业级实践&#xff09;&#xff1a;欢迎star⭐️⭐️⭐️ 前端ReactTypeScriptVite 后端NestMySQLRedisDocker 前言 对&#xff0c;你没看…