Linux-网络基础

本次,我们将学习关于Linux当中的网络编程的基础知识,为后面的网络编程打基础!

现在,我们正式来进入正文:

首先,我们先了解一下

关于网络的发展:

在初始网络发展时,计算机是没有联网的,是独立的!

独立模式:计算机之间是相互独立的。

后面,产生了互联网,使得计算机之间可以通过联网的方式进行信息共享!

接着,先简单了解了解局域网与广义网的概念:(到后面我们讲解协议的时候再具体分析分析

局域网LAN:计算机数量更多了, 通过交换机和路由器连接在一起;

广域网WAN:将远隔千里的计算机都连在一起;

ps:这里所说的局域网和广域网只是一个相对概念,参照物不同,看待他们也就不同!

接着,我们来认识一下关于协议的概念:

协议,按照生活中,也知道,协议可以认为是一种约定俗成!

就比如我国每个地方都会有属于自己的方言,我们一致默认一种当地方言,来进行交流,使得当地人大都能听懂意思。

为什么要有协议?

结合我们生活例子也显易清楚:

当代计算机厂商那么多,计算机操作系统也有很多,硬件设备也如此。那么消费者就有可能选择其中一家产品,那么,不同的人选择不同的产品,又想让他们同样能够进行关联,这就需要一些默认的标准,来保证彼此之间能够相互顺畅通信。

因此就出现了计算机的7层网络协议。

网络协议

初了解这个概念可能有点蒙,那么,我们先来用简单的例子来引入:

但是,实际上,网络的协议远比上面举的例子复杂,有更多的层

分层最大的好处在于 "封装" . 面向对象例子(上面例子就可以意识到!)

OSI七层模型

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

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

OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;

但是, 它既复杂又不实用; 所以我们按照TCP/IP四层模型来讲解

现在,我们先来了解一下,

网络协议栈vsOS

网络协议栈与我们之前学习的OS有什么关系?

OSI七层模型

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

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

TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.

物理层 : 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.

数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.

网络层 : 负责地址管理和路由选择 . 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.

传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.

应用层: 负责应用程序间沟通 ,如**简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)**等. 我们的网络编程主要就是针对应用层
一般而言

对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;

对于一台路由器, 它实现了从网络层到物理层;

对于一台交换机, 它实现了从数据链路层到物理层;

对于集线器, 它只实现了物理层;

但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发);

网络传输基本流程

同一个网段内的两台主机进行文件传输

不同的协议层对数据包有不同的称谓,

传输层叫做段 (segment),在网络层叫做数据报 (datagram),在**链路层叫做帧(**frame).

应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation).

首部信息 中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.

数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理

通过发送信息的例子理解:

拓展:(大部分协议的共性)

1.几乎任何层的协议,都要提供一种能力,将报头和有效载荷分离的能力

2.几乎任何层的协议,都要在报头中提供,决定将自己的有效载荷交付给上层的哪一个协议的能力

以太网通信:每台主机在局域网上,都要有自己的唯一的一个标识。

讲解以太网通信原理之前,我们仍然是通过一个例子来引出来:

现在,正式来讲解原理:

Mac与IP地址

IP协议有两个版本, IPv4和IPv6.

(主导是IPV4)

后面的讲解 默认都是指IPv4

IP地址是在IP协议中, 用来标识网络中不同主机的地址;

对于IPv4来说, IP地址是一个4字节, 32位的整数;

我们通常也使用 "点分十进制" 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
MAC地址(Media Access Control Address)即媒体访问控制地址,是网络设备的物理地址,由48位二进制数(12位十六进制数)组成。

通常以 XX:XX:XX:XX:XX:XX 或 XX-XX-XX-XX-XX-XX 的格式呈现。

它具有全球唯一性,由设备厂商在生产时固化在网卡等网络接口硬件中,主要用于局域网内标识不同设备,实现数据帧的准确传输

用例子理解它:

IP地址是:从哪来,到哪去--它是一直不变的,指导我们进行路径规划

Mac地址:上一站从哪里来,下一站要去哪里---会一直变化,变化的依据就是"我要去哪里(最终目的地)"

1. 是什么?

  • IP地址:逻辑地址,如 192.168.1.1 ,工作在网络层 ,用于在更大的网络(如互联网)中定位设备。

  • MAC地址:物理地址,如 XX:XX:XX:XX:XX:XX ,工作在数据链路层 ,用于在局域网内部唯一标识一个网络接口

2. 为什么要有?

  • IP地址:提供了一种统一的、跨网络的地址格式,它就像是你家的门牌号,帮助数据在不同的网络(如从北京到上海的互联网)之间找到最终目的地。

  • MAC地址:保证了在同一个局域网(比如你家的Wi-Fi)里,每个设备都有一个独一无二的标识,它更像是设备的身份证号,确保数据在小区内部能准确送到你家。

工作流程

  • 当数据在局域网内传输时,使用 MAC地址 进行设备间的直接通信

  • 当数据需要发送到其他网络时,会被交给路由器 。路由器会基于目标IP地址 来决定下一跳的路径,并在转发前重新封装数据,替换掉原来的源MAC和目的MAC地址

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

网络通信的基本脉络示意图:


在进行网络通信的时候,是不是我们两台机器在进行通信呢?

1.网络协议中的下三层,主要解决的是:数据安全可靠的送到远端机器

2.用户使用应用层软件,完成数据发送和接受的!

因此,我们得先把这个软件启动起来,这本质是什么?进程!

我们日常网络通信的本质,即就是进程间通信!

在公网上:

IP地址能表示唯一的一台主机,端口号port,用来标识主机上的唯一的一个进程

即:client_ip:client_port server_ip:server_port

对于端口号,无论是客户端还是服务端都能唯一的标识该主机上的一个网络应用层的进程

端口号VS进程pid

我们上面说到,网络通信的本质就是进程间通信,那么进程当中有pid已经能够标识一台主机上进程的唯一性了,为什么还要搞一个端口号??

1.不是所有进程都要网络通信的,但是所有进程都要有pid

2.使得系统和网络功能解耦!
问题:客户端如何获取抖音服务器的端口号?

结论:服务的端口号是预先定义、公开且众所周知的。

  1. 客户端(C)发起请求
  • 客户端生成请求,目标为"获取一个短视频"

  • 请求信息包含:

  • 源IP:客户端IP地址(IPC)

  • 目标IP:服务器IP地址(IPS)

  • 目标端口:服务器服务端口(8080)

  1. 服务器(S)接收并响应
  • 服务器通过固定端口(8080)监听请求

  • 收到请求后,通过网络层和传输层 进行处理

  • 生成响应并原路返回给客户端

关于本次的分享就先到这里了,我们下篇再见!

最后,到了本次鸡汤环节:

能坚持的从来就不平凡,比一切都浪漫

相关推荐
崎岖Qiu3 小时前
【OS笔记38】:设备管理 - I/O 设备原理
笔记·操作系统·os·设备管理·io设备
我命由我123453 小时前
Photoshop - Photoshop 工具栏(58)锐化工具
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop
糖~醋排骨4 小时前
FW防火墙的配置
linux·服务器·网络
ZFB00014 小时前
【麒麟桌面系统】V10-SP1 2503 系统知识——设置面板无法打开
linux·运维·kylin
好大哥呀4 小时前
C++ IDE
开发语言·c++·ide
BHXDML4 小时前
JVM 深度理解 —— 程序的底层运行逻辑
java·开发语言·jvm
Wang's Blog4 小时前
Nodejs-HardCore: 深入解析DBF文件之二进制文件处理指南
开发语言·nodejs
hoiii1874 小时前
基于LSB匹配的隐写术MATLAB实现程序
开发语言·matlab
J2虾虾4 小时前
Java使用的可以使用的脚本执行引擎
java·开发语言·脚本执行