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

news/2024/9/19 4:55:21 标签: 网络, 后端, c++, 计算机网络, tcp/ip, 网络协议, linux

一、网络协议

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

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

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.niftyadmin.cn/n/5665014.html

相关文章

vue node node-sass sass-loader 版本 对应 与 兼容

警告: LibSass 和 Node Sass 已弃用。虽然它们将继续无限期地接收维护版本,但没有计划添加其他功能或与任何新的 CSS 或 Sass 功能兼容。仍在使用它的项目应该转移到 Dart Sass。 sass Sass是一种预处理器脚本语言,可以解释或编译成…

排序篇(七大基于比较的排序算法)

目录 插入排序 直接插入排序 希尔排序(缩小增量排序) 选择排序 选择排序 堆排序 交换排序 冒泡排序 快速排序 1.挖坑法 2.Hoare版 3.前后指针 快速排序优化 三数取中法 选基准数 2.递归到小的子区间时 可以考虑使用插入排序 非递归快速排序 归并排序 归并排序…

大数据新视界 --大数据大厂之探索ES:大数据时代的高效搜索引擎实战攻略

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

828 华为云征文|华为 Flexus 云服务器部署 RustDesk Server,打造自己的远程桌面服务器

💻在当今数字化时代,远程桌面服务器的需求日益增长。华为 Flexus 云服务器凭借其强大的性能和稳定性,为部署 RustDesk Server 提供了理想的平台。在 2024 年 9 月 14 日这个特别的日子里,我们将一起探索如何在华为 Flexus 云服务器…

OpenCV运动分析和目标跟踪(2)累积操作函数accumulateSquare()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将源图像的平方加到累积器图像中。 该函数将输入图像 src 或其选定区域提升到2的幂次方,然后加到累积器 dst 中: dst ( …

弹性负载均衡ELB 详解和设置方法

一、弹性负载均衡ELB 详解 1. 定义与概念 弹性负载均衡(Elastic Load Balancing,简称ELB)是一种将访问流量自动分发到多台云服务器的流量分发控制服务。它通过在多个后端服务器之间均衡分配请求,提高应用程序的可用性、可扩展性…

在 Linux 系统中目录架构说明

在 Linux 系统中,根目录(/)是整个文件系统的起点,其下有许多重要的目录,以下是对一些主要目录的说明: 一、/bin 存放着最常用的二进制可执行命令,例如 ls、cat、cp、mv 等。普通用户和超级用户…

24年蓝桥杯及攻防世界赛题-MISC-2

11 Railfence fliglifcpooaae_hgggrnee_o{cr} 随波逐流编码工具 分为5栏时,解密结果为:flag{railfence_cipher_gogogo} 12 Caesar rxms{kag_tmhq_xqmdzqp_omqemd_qzodkbfuaz} mode1 #12: flag{you_have_learned_caesar_encryption} 随波逐流编码工具 13 base64…