【linux 网络】网络基础

前言:

网络基础这篇博客主要就是扫盲名词、概念的介绍以及系统的初步关系。

网络发展历程

初识网络协议

  • 什么是协议?

协议是多方参与者为实现特定目标而共同遵守的一种约定,例如当主机A向主机B进行发送数据时,因为数据是有类型的,不同的数据的含义是不同的,当主机A和主机B没有按照某种约定进行发送数据或者接受数据,就会导致发送方发送的数据无法被接收方解析获取。

  • 为什么要存在协议?

协议的存在是为了解决不同实体(如人、设备、系统)之间的协作和沟通问题。用提前约定好的协议进行通信过程中可以减少通信成本,增加进行通信的效率。

约定好协议就一定可以进行通信吗??

答案是否定的,进行通信需要硬件标准和网络协议共同保障,假如没有硬件标准,不同的硬件厂商涉及的接口不一致导致设备之间不兼容是无法进行通信的。

协议分层

几点共识

  • 操作系统中是存在多种协议的,既然存在多种协议,OS就需要对这些协议进行管理,管理的方式--先描述,在组织
  • 协议的本质就是软件,软件是可以进行分层的。将软件进行按照功能进行划分抽象成层的概念,相邻的层之间都有明确的接口和通信方式,将软件进行分层的本质就是功能的解耦,将软件进行分层有利于进行管理和可拓展性。
  • 操作系统在进行涉及的时候,就是进行分层划分的。

协议栈解决的问题

我们之所以通过网络进行通信的本质原因还是因为距离问题,进行通信的复杂程度是和距离呈现正相关的,进行通信的过程中通常是很复杂的,这些复杂的问题就是协议栈要进行解决的问题。

在通信范畴中需要解决的问题

  • 丢包问题:发送方进行发送的数据,目标对象没有收到该数据
  • 定位问题:要通过网络进行发送数据时,我怎么知道目标主机是哪一个
  • 下一跳问题:A主机向B主机进行发送数据时,AB主机相离距离非常远,需要经过若干个路由器之间将数据进行传输到B主机,如何进行精准的下一跳

在应用范畴中需要解决的问题

通过通信范畴我们将数据进行传输到B主机,B主机接收到数据,对于数据的处理又涉及到应用层范畴。

在硬件范畴需要解决的问题

在进行解决完成通信范畴的任务,知道了目标主机是哪一个,也知道了路由器的下一跳在哪,解决了丢包问题,物理层将上面进行处理好的数据进行转化成比特流,在物理介质上进行传输

基于TCP/IP的层状协议

将协议栈进行解决的问题进行总结就是TCP/IP的层状结构

|-----------|------------------------------------------------------------------------------------------------------------------------------------------------|
| 应用层 | 进行处理用户的数据,将处理好的用户数据称进行交给传输层 [HTTP头部] + 正文(如POST数据) |
| 传输层 | 提供不同主机之间端到端的通信,确保数据的安全和顺序,主要通过TCP/UDP协议进行,解决丢包问题。如果使用TCP协议,传输层会将应用层进行处理的消息增加头部信息,称为TCP段;如果是UDP协议则会封装成数据报 [TCP头部] + [HTTP报文] → 称为TCP段 。 |
| 网络层 | 接收来自传输层的数据,并将数据进行再一层的封装增加IP头部,形成数据包,数据包中存放了源IP地址和目标IP地址,解决定位问题 [IP头部] + [TCP段] → 称为IP数据包 。 |
| 数据链路层 | 接收到来自网络层的数据包,并将数据包封装成帧并添加以太网头部和尾部或者其他链路层头部的协议头部或者尾部,这个过程还涉及把数据包交给具体的硬件,例如路由器、交换机 [帧头] + [IP数据包] + [帧尾] → 称为数据帧 。 |
| 物理层 | 接收来自数据链路层的帧,并将帧转化成电信号或者光信号等物理介质上的比特流进行传输 |

补充:

提起层状结构,Linux操作系统也是层状结构,TCP/IP层状协议的由来就是传输层和网络层都在操作系统内。

通过上图示我们可以知道网络接口的本质也是调用的系统接口进行的。

OSI七层模型

OSI七层模型层次描述的更详细,适用于理论,TCP/IP层状协议模型是基于OSI七层模型进行实现出来的,这就好像互联网公司中的产品经理和程序员,程序员进行开发的任务都是通过产品经理的理论进行实现出来的.

网络传送的基本流程

通过TCP/IP进行网络通讯的流程

  • 在同一网段中

根据生活常识,在同一局域网下我们是否可以进行网络通讯?? 答案当然是可以,在通过无线的方式进行投屏的时候就要求我们在同一局域网下进行.

补充:

在协议分层那里我们举过一个通过电话进行通讯的例子,在逻辑上我们可直接通过应用层进行通信,但是在物理结构上是不允许的.其实我们在逻辑上应用层之间的通信也是通过物理层进行实现的.

数据在同一网段中进行网络通信的流程

数据的封装如在同一网段中进行TCP/IP通信,应用层将用户的数据进行处理,增添FTP报头,然后将应用层进行处理过数据,然后将数据单元交给传输层,传输层将数据单元进行处理然后加上TCP协议的报头,处理后并增加TCP报头的数据称为TCP段,网络层将TCP段进行处理后,加上IP报头称为IP数据包,链路层将IP数据包按照以太网协议进行增加帧头和帧尾称为数据帧.

数据帧通过以太网进行传输到另一台主机,另一台主机依次通过链路层、网络层、传输层、应用层进行按照对应的协议对数据进行将数据进行封装的报头进行解析分用

补充:数据碰撞问题

在数据链路层A和C通过以太网进行网络通信,由于ABCDE都在同一个局域网下,A进行发送的数据ABCDE都可知得知,但是由于A的数据链路层将数据进行封装成帧后下一跳的位置是C所以只有C进行响应,但是由于D一直向以太网中发送电信号影响A数据的内容,这种情况就是数据碰撞,但是一般主机会进行碰撞避免,比如检测到以太网中又数据进行传输会采取错开时间点的方式。

这就不得不提一下搞崩局域网的方式就可以一直进行发送垃圾数据到以太网上。

  • 在不同网段中

数据在不同的网段中进行网络通信的流程

首先用户的数据经过应用层进行封装,加上相应的报头将数据传输给传输层;传输层通过TCP协议将数据进行增加TCP报头型成TCB数据段,然后交给网络层;网络层接收TCB数据段然后将数据进行处理加上IP报头型成数据包,源主机通过IP报头中的中目标IP进行判断是否在同一个网段下,不在同一个网段下,数据链路层将数据包进行处理,并封装成一个以目标路由器的MAC地址为目标MAC地址的帧,路由器通过数据链路层进行封装的帧进行决定下一跳的位置,一直进行跳跃直至找到目标主机的路由,路由器的本质就是通过目标IP的地址去确定下一跳MAC的地址。找到进行通讯的目标主机然后进行数据的解包处理,分析处理报头中的信息,进行去掉报头。

路由器的作用就好似我们在进行问路的时候,告诉当地人们我的目的地在哪,然后询问我们下一站要去哪里,路由器的作用就是根据目标IP进行设计跳跃下一个小目的地(中转站)。

数据的封装图解

数据进行封装的本质其实其实就是根据协议进行增加报头

数据的解包图解

数据进行解包的本质其实其实就是根据协议进行去掉报头

网络中的地址

特性 IP地址 MAC地址
层级 网络层(OSI模型第三层) 数据链路层(OSI模型第二层)
功能 标识设备的网络位置,帮助路由器确定数据包的路径 唯一标识网络设备,确保数据帧传输目标
格式 IPv4(32位)或IPv6(128位) 48位(6字节)十六进制表示
是否可更改 可以更改,尤其是在局域网内部 通常不可更改,由硬件制造商分配,网卡在出场时就决定了
使用范围 跨网络通信,标识设备所在网络 局域网内通信,标识设备
分配方式 动态分配(如DHCP)或静态分配 固定分配,由硬件制造商赋予
相关推荐
Code Warrior4 小时前
【Linux】基础开发工具(3)
linux·服务器
鬼才血脉5 小时前
Linux(centos)安装 MySQL 8
linux·mysql·centos
guygg885 小时前
ubuntu手动编译VTK9.3 Generating qmltypes file 失败
linux·运维·ubuntu
JeffersonZU5 小时前
Linux/Unix 套接字Socket编程(socket基本概念,流程,流式/数据报socket,Unix domain socket示例)
linux·c语言·tcp/ip·udp·unix·gnu
Two_brushes.6 小时前
【linux网络】网络编程全流程详解:从套接字基础到 UDP/TCP 通信实战
linux·开发语言·网络·tcp/udp
夕泠爱吃糖7 小时前
Linux中的静态库和动态库
linux·运维·服务器
武汉唯众智创7 小时前
高职院校“赛岗课”一体化网络安全实战类人才培养方案
网络·安全·web安全·网络安全·“赛岗课”一体化·赛岗课
比奥利奥还傲.7 小时前
Linux运维安全新范式:基于TCPIP与SSH密钥的无密码认证实战
linux·运维·安全
果子⌂9 小时前
容器技术入门之Docker环境部署
linux·运维·docker