【Linux网络编程】协议|OSI模型|TCP/IP模型|局域网通信|跨网络通信|地址管理|流程图

目录

​编辑

一,协议

协议分层

二,OSI七层模型

三,TCP/IP五层(或四层)模型

TCP/IP各个层次一些名词解释

为什么要有TCP/IP协议

TCP/IP协议栈与操作系统的宏观关系示意图

四,网络传输基本流程

局域网的两台主机通信

跨网络的两台主机通信

数据包封装和分用

五,网络中的地址管理

IP地址

Mac地址

比较IP地址和Mac地址

网络通信的流程图


一,协议

"协议" 是一种约定,

协议分层

  • 分层设计方面的优势:每一层都有自己特定的功能 -- 低耦合
  • 一般我们的分层依据:功能比较集中,耦合度比较高的模块,分为一层 -- 高内聚

二,OSI七层模型

OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;

把网络从逻辑上分为了7层。每一层都有相关、相对应的物理设备,比如路由器,交换机;

OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;

它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;

在网络的角度上来看,七层模型设计的非常完善;

  • 但是在实际的操作过程中,会话层和表示层一般是不能接入到操作系统中的,所以在工程实践中,最终实现的大多都是5层协议。

把 5、6、7层合并成了一层:

应用层数据链路层解决的是第一个问题:把数据包交付给自己直接相连的下一台主机的问题

网络层解决的是第二个问题:要有路径选择的能力

传输层解决的是第三个问题:容错纠错能力

应用层解决的是第四个问题:解决应用方面的问题

三,TCP/IP五层(或四层)模型

四层模型就是不算物理层。

TCP/IP是一组协议的代名词,它还包含了许多协议,组成了TCP/IP协议簇。

TCP/IP协议簇是目前最广泛的网络通信的协议集,具体的TCP/IP协议套件是一个分层模型,相比于OSI七层模型,TCP/IP模型更加简洁和实用

  • 应用层:提供直接面向用户的应用服务;通过不同的应用协议实现各种网络功能,如电子邮件、文件传输和网页浏览。常见的协议有HTTP和SSH协议
  • 传输层:负责两台主机之间的数据传输;即端到端之间,包括数据分段、传输控制、错误检测与纠正。使用到的协议有:TCP协议和UDP协议。
  • 网络层:负责数据包的路由和转发;确保数据从源主机传输到目的主机,处理数据包的逻辑地址(IP地址)寻址和路由选择。使用到的协议有IP协议
  • 数据链路层:负责在相邻节点之间传输数据帧;包括物理介质访问、数据帧的封装和解封等。协议有以太网、WI-FI(无线网络)等
  • 物理层:负责信号的的传递方式;比如现在以太网通用的网线(双绞线)、早期采用的同轴电缆、光纤、电磁波等。物理层的能力大小决定了数据传输的上限。

TCP/IP各个层次一些名词解释

  • 端口:端口是一个用于标志一台主机运行某个程序的整数
  • 数据分段:将较大的数据包拆分成更小的数据段的过程
  • 数据帧:数据帧(Data Frame)是在计算机网络中用于数据传输的基本单位,组成部分有:帧头:包含了控制信息,如目标地址、源地址、数据帧类型或长度等。通俗一点讲就是它的作用就是找到目标主机和目标主机如何正确接收这些数据的方法。
  • 数据部分:实际传输的数据
  • 帧尾:包含校验等错误检测信息,用于检查数据在传输过程中是否损坏。
  • 路由:路由是指数据根据特定算法确定到目的地址的传输路径的一个过程,简单来说们,就是选择合适路径的过程。

为什么要有TCP/IP协议

本质就是两个需要通信的两个主机距离变远了。

遵循协议是为了确保两台主机能够在统一的规则下进行有效和可靠的数据传输,即便这两台主机相隔很远,只要它们都遵守同样的通信规则,就可以实现正确的数据交换。
TCP/IP协议之所以被广泛采用,是因为它具备一系列关键特性,如灵活性、能够支持全球范围内的网络互连、提供数据传输的可靠性以及一定程度上的安全性。简而言之,协议就是定义了如何进行通信的一套规则。

TCP/IP协议栈与操作系统的宏观关系示意图

四,网络传输基本流程

协议报头

协议每一层都有报头,协议通常是通过协议报头来进行表达;每一份数据最终在被发送或者在不同的协议层中,都要有自己的报头

什么是报头?

报头本质也是一种数据。

比如:当你在淘宝上购买一个水杯时,收到的包裹不仅包含你真正想要的水杯,还会附带一个快递盒子和快递单。快递盒子和快递单并不是你订购的商品本身,而是为了确保商品能够准确无误地送达而附加的部分。在计算机网络中,类似地反映在网络数据传输过程中。

当你发送一个数据包时,实际上会有一些额外的信息附加在数据之上,这些额外的信息被称为"报头"(header)每一层网络协议都会添加自己的报头,以确保数据能够正确地路由和传递

局域网通信

两台局域网的主机能够直接进行通信

每一台主机都有自己的"名字":每一台主机都有网卡,每一张网卡都有自己的地址,这个地址称为MAC地址,表明自己在局域网中的唯一性

局域网通信原理(以太网)

主机Mac1,向Mac7发送 "hello",在这个局域网上的主机都能收到 "hello" 这个数据包,但是 "数据包" 只有与匹配的MAC地址才会真正收到这个数据包,其他主机进行匹配MAC地址失败,失败则直接丢弃数据包

局域网的两台主机通信

两台计算机设备通过TCP/IP协议通信的过程如下:

跨网络的两台主机通信

跨局域网的两台主机之间通信(同一种类型的局域网通信)

局域网之间通常通过路由器相互连接,因此一个路由器至少会连接两个局域网。这些由路由器连接的局域网会将该路由器视为本局域网内的一台主机。这样一来,路由器就能够与这些局域网中的任何一台主机进行直接通信。

比如:局域网1中的主机A要与局域网2中的主机B通信,主机A将数据发给路由器,再有路由器发给主机B。这个过程中的封装解包分用与上类似;

跨局域网的两台主机之间通信(不同类型的局域网通信)

由于不同局域网可能采用不同的通信标准,比如局域网1采用以太网标准,局域网2采用令牌环标准,不同的通信标准是无法进行互相通信的,它们给数据添加的报头协议不一样,所以对方都无法解包。

在这种情况下, 都是由路由器来处理,路由器是工作在网络层的设备,通常具有至少两个网络接口,以便连接不同的网络。

当数据需要从局域网1传输到局域网2时,流程如下:

数据要从局域网1(以太网标准) 发送到局域网2(令牌环标准) 时,路由器收到局域网1 的数据后,会先将以太网 对应的报头进行解包,然后将剩下的有效载荷 向上交付给网络层,在网络层进行一系列数据分析后,再将数据包进行再一次封装,再交付给链路层,此时在链路层当中就会给该数据包添加上令牌环 对应的报头信息,然后再将该数据发送到局域网2当中,此时该数据就能够在令牌环网当中传输了

这种方式屏蔽了底层的差异,这就是 "IP" 的第一个优势。对于通信主机双方的IP层及其往上的协议来说,它们并不需要关心底层采用的是以太网还是令牌环网,它们认为只要填写了源IP地址和目的IP地址就能够将数据发送出去,因此现在主流的网络也叫做"IP网络"

数据包封装和分用

  • 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).
  • 应用层数据通过协议栈发到网络上时,**每层协议都要加上一个数据首部(header),**称为封装(Encapsulation).
  • 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理
  • 报文 = 报头 + 有效载荷

当用户A要将数据 "hello" 发送给另一台主机B,该数据需要先通过网络协议栈进行封装:(自顶向下)

  • 数据包报先交给应用层,应用层添加上对应应用层协议的报头信息后,将数据再交给传输层
  • 传输层收到数据包后,再添加上对应传输层协议的报头信息,并将数据继续向下进行交付
  • 网络层收到数据包后,再添加上对应网络层协议的报头信息,接着将数据包再交给链路层
  • 链路层收到数据包后,最后再添加上对应链路层协议的报头信息,至此数据封装完毕

下图为数据封装的过程:

数据封装完毕后就可以通过局域网将其发送给对端主机了,而当对端主机收到数据后,对应也需要通过网络协议栈对该数据进行解包与分用:(自底向上)
**注:**只有B主机会受到数据包,其他主机全部丢弃

  • 链路层收到数据包后,先将数据包中对应链路层协议的报头信息提取出来,然后将剩下的数据包交给网络层
  • 网络层收到该数据包后,再将数据包中对应网络层协议的报头信息提取出来,然后将剩下的数据包继续向上进行交付
  • 传输层收到该数据包后,再将数据包中对应传输层协议的报头信息提取出来,然后将剩下的数据包再交付给应用层
  • 应用层收到数据包后,最后将数据包中对应应用层协议的报头信息提取出来,至此便完成了数据包的解包与分用

报文 = 报头 + 有效载荷

五,网络中的地址管理

在网络中有两个常用的地址:IP地址和MAC地址

IP地址

IP地址是在网络层用IP协议标识和定位设备的逻辑地址,其中IP协议分为IPv4和IPv6。IPv4下的IP地址是一个4字节,32位的无符号整数表示,通常写成四个十进制数字,每个数字占一个字节,数据范围是[0-255]。IPv6下的IP地址是16字节,采用八组十六进制数字,每组都是16位,即两个字节。

作用:

  • 唯一标识一台网络上的设备。
  • IP地址帮助路由器决定数据包如何从源地址传输到目标地址。
  • 路由器根据目标IP地址将数据包从一个网络传输到另一个网络。

Mac地址

Mac地址是用于在数据链路层标识和定位设备的物理地址,由48位二进制表示,通常用十六进制的表示,被厂商预先分配给网卡。

作用:

  • 每个网卡都有唯一的Mac地址,用于在局域网中唯一标识设备。
  • 在局域网中,数据帧的源地址和目标地址是MAC地址,通过MAC地址确保数据帧能够准确地从发送端传输到接收端。

比较IP地址和Mac地址

IP地址可以在不同的网络中标识唯一设备,帮助路由器将数据包从一个网络到另一个网络。Mac地址用于定位网络内部的目标设备。这俩各种再网络传输过程中起到了不可替代的作用。简单来说,IP地址告诉路由器数据应该转发给哪一个网络,Mac地址告诉路由器数据应该发给这个网络的那一台主机。

网络通信的流程图

相关推荐
吱吱鼠叔3 分钟前
MATLAB方程求解:1.线性方程组
开发语言·matlab·php
小安运维日记5 分钟前
Linux云计算 |【第三阶段】PROJECT1-DAY1
linux·运维·云计算·apache
Antonio9158 分钟前
【CMake】使用CMake在Visual Studio内构建多文件夹工程
开发语言·c++·visual studio
LyaJpunov22 分钟前
C++中move和forword的区别
开发语言·c++
pyliumy22 分钟前
rsync 全网备份
linux·运维·服务器
程序猿练习生26 分钟前
C++速通LeetCode中等第9题-合并区间
开发语言·c++·leetcode
z千鑫35 分钟前
【人工智能】如何利用AI轻松将java,c++等代码转换为Python语言?程序员必读
java·c++·人工智能·gpt·agent·ai编程·ai工具
一名路过的小码农36 分钟前
C/C++动态库函数导出 windows
c语言·开发语言·c++
m0_6312704039 分钟前
标准c语言(一)
c语言·开发语言·算法
万河归海42839 分钟前
C语言——二分法搜索数组中特定元素并返回下标
c语言·开发语言·数据结构·经验分享·笔记·算法·visualstudio