Linux 网络(1)

1.概念

1.OSI 七层模型

OSI 七层模型是国际标准化组织(ISO)制定的网络通信分层架构参考标准,核心是将网络通信的复杂流程拆分为 7 个独立层级,每层负责特定功能,上下层之间通过接口协作,实现跨系统的标准化通信。

2.tcp/ip模型

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

3.认识IP地址

IP协议有两个版本, IPv4和IPv6. 我们整个的课程, 凡是提到IP协议, 没有特殊说明的, 默认都是指IPv4
IP地址是在IP协议中, 用来标识网络中不同主机的地址;
对于IPv4来说, IP地址是一个4字节, 32位的整数;
我们通常也使用 "点分十进制" 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个
字节, 范围是 0 - 255;

4.认识MAC地址

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

5.ip地址和mac地址的区别

ip地址和mac地址的区别在于

mac地址是唯一的 但是ip地址只在局域网内是唯一的

比如我们写信的时候一般要写+收件地址+收件人

mac地址好比收件地址 ip地址好比收件人

mac地址就是网卡的物理地址

我们网络中发送消息和写信不一样

网络中我们只要写好了内容和ip地址

操作系统会自动查询对应的mac地址

操作系统如何知道ip地址的

设备入网后根据DHCP协议会向外外送DHCP请求分配ip地址

操作系统如何知道对方的mac地址的

比如a给b别发送消息 a不会立即返送消息 而是·先发送一份报文出去

其他不是对应ip地址的设备都会丢弃这份报文

只有对应ip地址的设备才会接收到这份报文 并返回mac地址

然后我们有了收件人(ip地址)收件地址(mac地址)和内容

就可以向设别b发送消息了

6.同一局域网内的端到端通信

发送端(FTP 客户):从上到下封装

应用层:生成原始文件 / 命令数据(初始载荷)

传输层:给数据加 TCP 头部 → 封装成 TCP 报文段(载荷 = 应用层数据)

网络层:给 TCP 报文段加 IP 头部 → 封装成 IP 数据报(载荷 = TCP 报文段)

链路层:给 IP 数据报加以太网头 + 尾 → 封装成以太网帧(载荷 = IP 数据报)

传输

以太网帧通过物理链路传输到接收端。

接收端(FTP 服务器):从下到上解封装

链路层:剥掉以太网头 + 尾 → 取出 IP 数据报

网络层:剥掉 IP 头部 → 取出 TCP 报文段

传输层:剥掉 TCP 头部 → 取出应用层原始数据

应用层:处理原始数据,完成端到端传递

7.跨不同链路层网络的通信
  1. 发送端(FTP 客户):从上到下封装

应用层:生成原始文件 / 命令数据(初始载荷)

传输层:加 TCP 头部 → 载荷为应用层数据,形成 TCP 报文段

网络层:加 IP 头部 → 载荷为 TCP 报文段,形成 IP 数据报

链路层:加以太网头 + 尾 → 载荷为 IP 数据报,形成以太网帧

  1. 路由器转发(跨链路时)
    接收以太网帧,剥去以太网头 + 尾 → 取出 IP 数据报
    网络层保持 IP 数据报不变(载荷仍为 TCP 报文段)
    链路层换上令牌环网头 + 尾 → 载荷为 IP 数据报,形成令牌环帧

  2. 接收端(FTP 服务器):从下到上解封装

链路层:剥去令牌环网头 + 尾 → 取出 IP 数据报

网络层:剥去 IP 头部 → 取出 TCP 报文段

传输层:剥去 TCP 头部 → 取出应用层原始数据

应用层:处理原始数据,完成端到端传递

思考

这样实现有什么好处???

我们发现每一层无论是发送端还是接收端收到的内容都是一致的

此外路由器实现了不同链路层的物理接口,能基于 IP 协议实现互联互通。

路由器的本质是网络层(IP 层)设备,它的核心作用不是直接处理 "驱动程序",而是实现不同链路层网络之间的 IP 互通

数据段、数据报、数据帧:是各层的完整协议数据单元(PDU),包含了本层的控制头部(和链路层的尾部),以及来自上层的 "载荷"。

  1. 数据段(Segment)

对应层级:传输层(TCP)

  1. 数据报(Datagram)

对应层级:网络层(IP)

  1. 数据帧(Frame)

对应层级:链路层(以太网、令牌环网)

8.端口号和socket

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

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

因此我们要先把这个软件启动起来

我们日常网络通信的本质:

就是进程间通信!!

但是同时我们应用层可能有多个进程

比如我一个手机有抖音淘宝等进程等待

因此要实现准确的网络通信 我们还需要端口号

作用类似于进程的pid

但是为什么不直接用进程pid呢

主要原因是确保进程pid和网络通信之间的独立性(低耦合)

一个进程可以绑定多个端口号吗? 可以

一个端口号可以被多个进程绑定吗? 不可以

端口号(port)是传输层协议的内容.
端口号是一个2字节16位的整数;
端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理;
IP地址 + 端口号能够标识网络上的某一台主机的某一个进程;

可以近似认为「IP + 端口号」是 Socket 地址也称套接字

9.TCP和UDP协议

TCP和UDP协议都是基于传输层的协议

我们目前先做一些简单的了解

TCP协议的特点
细节问题.
传输层协议
有连接
可靠传输
面向字节流
UDP协议的特点
传输层协议
无连接
不可靠传输
面向数据报

10.网络字节序

TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节.
不管这台主机是大端机还是小端机, 都会按照这个TCP/IP规定的网络字节序来发送/接收数据;
如果当前发送主机是小端, 就需要先将数据转成大端; 否则就忽略, 直接发送即可

这三个结构体是 Socket 编程中用于表示地址的核心结构

套接字编程的种类:

1.域间套接字编程->同一个机器内

2.原始套接字编程>网络工具

3.网络套接字编程->用户间的网络通信

但是这样太麻烦了我们一般取前16位

为了统一接口

对应下列套接字相关接口的参数sockaddr

相关推荐
@hdd11 小时前
Kubernetes 网络模型:Pod 通信、Service 网络与 CNI
网络·云原生·容器·kubernetes
崎岖Qiu13 小时前
【计算机网络 | 第十一篇】图解交换机的自学习功能
网络·学习·计算机网络
Zach_yuan13 小时前
数据链路层核心技术解析:以太网与ARP协议
服务器·网络·网络协议
上海合宙LuatOS16 小时前
LuatOS核心库API——【io】 io操作(扩展)
java·服务器·前端·网络·单片机·嵌入式硬件·物联网
她说彩礼65万17 小时前
I/O密集型 CPU密集型
网络
枷锁—sha18 小时前
【CTFshow-pwn系列】03_栈溢出【pwn 048】详解:Ret2Libc 之 Puts 泄露
网络·安全·网络安全
初恋叫萱萱18 小时前
基于 Rust 与 DeepSeek V3.2 构建高性能插件化 LLM 应用框架深度解析
网络·人工智能·rust
专业开发者20 小时前
Wi-Fi 技术学习:面向 Wi-Fi 网络的抗干扰技术
网络·学习
瘾大侠20 小时前
WingData
网络·安全·web安全·网络安全