Linux网络编程第一课:深入浅出TCP/IP协议簇与网络寻址系统
知识点1【网络发展简史】

**网络节点:**路由器和交换机组成
交换机的作用:拓展网络接口
路由:网络通信路径
1、分组交换
分组的目的:
数据量大,不能一次型传输,只能分批次传输,这里的每一批次就是每个分组。
传输单元:网络传输是有限制的。以太网传输单元最大字节数:1500Byte
同一个分组系统中,数据是等分的(每组大小是等长的)
分组的组成:
每个分组都是由首部和数据段组成
首部:存储的是分组在原数据的位置、目的主机和源主机信息。
解释:每个组独立发出,并且要准确地发给目的主机,目的主机收到也要知道是谁发的。主机收到后 需要将分组 组合成一个完整的数据,也需要用到首部内的信息。

2、分组方式的交换方式:存储转发

节点收到分组,先暂时存储下来,再检查其首部,按照首部中目的地址,找到合适的节点转发出去
重组发生在目的主机上,每个节点只是数据的中转站
3、云特网发展史
因特网是从单个ARPA NET发展起来的
TCP/IP协议成为ARPA NET的标准协议
TCP/IP 是协议的统称,它是一个族,并不是单指TCP/IP协议
知识点2【TCP/IP协议】(重要)
每种协议完成不同的功能
网络是分层次来管理的
分层结构(背下来)
背下来每一层,并且要知道每一层是干什么的,这一出现问题可以快速确定是哪一层的错误,并且每层对应的协议是有限的,进而确定哪个协议有问题
1、网络的分层结构:
(一)七层结构
**七层结构:**OSI/RM(Open Standard Interconnection /Reference Model)开放互联参考模型(理论上的标准)
-
七层的解释
**物理层:**网络卡的接口类型,电流强弱等标准。(网卡在第八层)
**数据链路层:**负责完整的帧数据 收发,mac地址的封装和解封装。(设备 到 设备的通信)
帧数据:能够完整独立在网络上传输的数据单元
(在链路层上组好的报文可以直接脱离网卡,在网络上传输)
mac地址:网卡地址
**网络层:**负责IP报文的封装和解封装,IP地址。(主机 到 主机的通信)
每个主机都有自己唯一的IP地址,发数据就是封装IP地址,收数据就是解析IP地址
一个网线连接一个网卡,为了拓展网络接口,就需要用到交换机,而连接这些拓展接口,就需要利用网卡的接口接入,一个网卡可以对应多个系统,就会有一个主机的判断,主机里又可以有多个IP地址
交换机中就会形成MAC地址表
**传输层:**负责端口的封装和解封装(端口 区别的是 系统的进程)(进程到进程的通信)
**会话层:**负责数据的转发,查看数据是否能够到达目的主机,查看网络通信状态
**表示层:**将计算机识别 的二进程数据 转换成 为用户能识别的(图片,音频等)
**应用层:**具体应用程序的协议
(二)四层结构
**四层结构:**TCP/IP模型(事实上的标准)
-
四层的解释
**应用层:**具体应用程序的协议
传输层:负责端口的封装和解封装(端口 区别是 系统的进程)(进程 到 进程的通信)
网络层:负责IP报文的封装和解封装,IP地址。(主机 到 主机的通信)
链路层:负责完整的帧数据 收发(帧数据:完整独立在网上传输的数据),mac地址的封装和解封装(设备 到 设备的通信)
(三)协议
应用层
FTP文件传输协议、Telnet远程登录协议、TFTP:简单文件传送协议,NFS:网络文件系统、HTTP超文本传送协议
传输层
TCP传输控制协议、UDP用户数据报协议
网络层
IP网际协议、ICMP网络控制报文协议、IGMP网络组管理协议
链路层
ARP地址解析协议、RARP逆地址解析协议

2、IP协议(网际协议)
特点:
1、尽最大可能地将数据报文 传送到目的主机
2、IP报文独立传输,不按顺序收发
3、IP报文中要包含 源IP地址 和 目的IP地址
3、TCP报文(传输控制协议)
TCP是可靠的传输层协议(进程和进程的通信)、面向连接的、序号和确认序号、排序检 错、失败重传,面向大文件传输。
如HTTP、FTP、SMTP等
4、UDP协议(用户数据报 协议)
UDP协议是一种不靠谱的传输协议(进程与进程之间的通信),不连接,不排序检错,不冲传,简单应答服务,支持广播、多播
如NFS、NTP(网络时间协议)、DNS(域名解析协议)等
知识点3【地址】
1、mac地址(网卡的地址 链路层)
通过网卡可以将不同的计算机连接起来
mac是标识网卡地址编号(理论上全球唯一),mac地址可以修改,但是一般不修改
如果多人一起修改,会有mac地址不唯一的风险
以太网的mac地址是48位的
window:ipconfig 与 网络属性搭配使用查询 IPv4 IPv6 mac地址

2、IP地址(重要)
IPv4 32位
IPv6 128位 专家说IPv6可以给地球上每一粒沙子分配一个IP
主要介绍IPv4
32位分为 子网ID 和 主机ID
子网ID:IP地址中由子网掩码中 1 覆盖的连续位
主机ID:IP地址中由子网掩码中 0 覆盖的连续位
可见IP和子网掩码是相辅相成的 他们两个需要搭配起来才都有意义
子网ID:标示IP地址在哪一个网段
主机ID:标识IP地址在网段的具体位置
覆盖这里的意思是对应,并不是按位或按位与,让我们举例说明一下

注意
1、IPv4 与 子网掩码ID 配合才能确定 子网ID 和 主机ID
2、掩码的0和1不能相见,必须连续
3、IP地址的分类
IP地址分为A类,B类,C类,D类,E类
我们最常见的是A类,B类,C类
A类地址:默认8bit子网ID,第一位为0 (广域网 国家‐国家之间)
掩码:255.0.0.0
0xxx xxxx.0000 0000.0000 0000.0000 0000
0xxx xxxx.1111 1111.1111 1111.1111 1111
B类地址:默认16bit子网ID,前两位为10 (城域网 城市‐城市之间)
掩码:255.255.0.0
10xx xxxx.xxxx xxxx.0000 0000.0000 0000
10xx xxxx.xxxx xxxx.1111 1111.1111 1111
C类地址:默认24bit子网ID,前三位为110 (局域网)
掩码:255.255.255.0
110x xxxx.xxxx xxxx.xxxx xxxx.0000 0000
110x xxxx.xxxx xxxx.xxxx xxxx.1111 1111
D类地址:前四位为1110,多播地址
E类地址: 前五位为11110,保留为今后使用
注意
**网段个数:**2^(x的个数)
如A类 就是2^7
**主机个数:**2^ (主机ID的位数)- 2
这里为什么减2呢?
是因为全零全一的地址有特殊含义
全零:网段地址
全一:广播地址(如果是A类的广播地址,全世界都能收到)
4、IP地址分类(能否上外网)
共有IP:可直接连接Internet
私有IP:不可直接上Internet,可以借助代理上Internet
私有IP不能直接与共有IP进行通信

5、回环IP地址

回环地址的作用是什么呢?
ping这个地址段(127.0.0.1~127.255.255.254),大家会发现,这个地址段的任意地址都将回环到本地主机上,它的作用是用来测试本机的网卡和IP协议是否正常的
这个地址段不属于任何一个 有类比的地址类,它代表设备的本地入口地址
6、设置IP地址
windows下 图形页面设置 大家都应该尝试过,没有尝试过的可以问一下deepseek 或者其他AI。
这里我详细说一下Linux非图形式修改。
1、设置静态IP
(1)首先需要确定要修改的IP是否被占用,被占用不建议修改:ping一下,看能否打通
(2)ifconfig 查看网络的名称

(3)修改方法:可以修改IP地址 和 子网掩码
ifconfig eth0 目标IP netmask 掩码值
(4)验证是否修改成功 ifconfig
2、动态IP的设置
sudo dhcclient
3、拨号(了解即可)

7、子网掩码
子网掩码(subnet mask)又称网络掩码,地址掩码
是一个32bit的由1和0组成的数值,并且1和0分别连续。
作用
表明IP中的哪些位标识的是主机所在的子网 以及 哪些位标识的是主机号
特点
1、必须结合IP地址一起使用,不能单独存在
2、IP地址中由字码掩码中1 覆盖的连续位 是子网ID;其余的是主机ID
子网掩码的表现形式
192.168.220.0/255.255.255.0
192.168.220.0/24
知识点4【端口】(重要)
1、端口的概述
TCP/IP协议 采用端口标识通信的进程
在系统编程中,是在同一主机操作,我们用进程ID标识进程
在网络编程中,是在不同的主机操作,我们用端口标识进程
本质
端口的本质是 一段缓冲区
特点:(理解记忆)
1、同一系统,一个端口只能对应一个进程
2、同一个端口(端口号相同),在不同的系统中对应不同的进程
3、在同一个系统中,一个进程可以对应多个端口
4、一个进程拥有一个端口后,传输层送到该端口的数据全部被该进程接收,同样,进程送交传输层的数据也通过该端口被送出
不同的主机如何识别端口呢?这就需要引入端口号的概念了。
2、端口号
端口号类似于PID 标识一个进程,在网络编程中,用端口号(port)来标识一个运行的网络程序。
给端口取一个端口号,其他主机(端口号对其他主机无特殊含义,只知道将端口号发送到目标主机)要向目标主机端口发送数据,数据到了目标主机的传输层,目标主机识别端口号,来找到对应的缓冲区。
结束
代码重在练习!
代码重在练习!
代码重在练习!
今天的分享就到此结束了,希望对你有所帮助,如果你喜欢我的分享,请点赞收藏夹关注,谢谢大家!!!
相关文章:
Linux网络编程第一课:深入浅出TCP/IP协议簇与网络寻址系统
知识点1【网络发展简史】 **网络节点:**路由器和交换机组成 交换机的作用:拓展网络接口 路由:网络通信路径 1、分组交换 分组的目的: 数据量大,不能一次型传输,只能分批次传输,这里的每一批…...
深入解析布尔注入:原理、实战与防御
目录 一、布尔注入的原理与核心逻辑 二、布尔注入的实战步骤 三、关键函数与绕过技巧 四、实战案例:获取数据库名称 五、防御策略与最佳实践 六、总结 一、布尔注入的原理与核心逻辑 布尔注入(Boolean-Based Blind SQL Injection)是一种…...
GESP2023年12月认证C++七级( 第三部分编程题(2)纸牌游戏)
参考程序: #include <iostream> #include <cstring> // for memset #include <vector> using namespace std;const int max_n 1005; int n; int a[max_n], b[max_n], c[max_n]; // a[]: 得分系数;b[]: 换牌惩罚;c[]: …...
不同的人机验证的机制
目录 Cloudflare Turnstile验证 reCAPTCHA V2 GeeTest CAPTCHA Arkose Labs 验证码(FunCaptcha) 图像(图片)验证码 亚马逊验证码 (AWS/WAF) Cloudflare Turnstile验证 Cloudflare Turnstile 验证码以隐形方式运行…...
HarmonyOS学习 实验九:@State和@Prop装饰器的使用方法
HarmonyOS应用开发:父子组件状态管理实验报告 引言 在HarmonyOS应用开发领域,组件之间的状态管理是一个至关重要的概念。通过有效的状态管理,我们可以确保应用的数据流动清晰、可预测,从而提升应用的稳定性和可维护性。本次实验…...
基于瑞芯微RK3562 四核 ARM Cortex-A53 + 单核 ARM Cortex-M0——Linux应用开发手册
前 言 本文主要介绍TL3562-MiniEVM评估板的AMP(Asymmetric Multi-processing)开发案例,适用开发环境如下: Windows开发环境:Windows 7 64bit、Windows 10 64bit Linux开发环境:VMware16.2.5、Ubuntu20.04.6 64bit U-Boot:U-Boot-2017.09 Kernel:Linux-5.10.209 Lin…...
Java c线程等待ab线程执行完再执行
1、LockSupport AtomicInteger LockSupport.park() 函数表示挂起当前线程LockSupport.unpark© 函数表示解除线程c的阻塞状态AtomicInteger.decrementAndGet() 函数表示将该变量减一,并返回当前变量值(线程安全的原子类) 2、CountDownL…...
ubuntu20.04 Android14编译环境配置
ubuntu 更新和必要安装 sudo apt update sudo apt install git sudo apt install python2-minimal sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2 sudo upda…...
优化 Dockerfile 性能之实践(Practice of Optimizing Dockerfile Performance)
优化 Dockerfile 性能之实践 构建 Docker 镜像时,Dockerfile 的性能会显著影响构建过程的效率。经过优化的 Dockerfile 可以缩短构建时间、最小化镜像大小并提高整体容器性能。在本文中,我们将探讨优化 Dockerfile 性能的最佳实践。 尽量减少层数 影响…...
【Ai】MCP实战:手写 client 和 server [Python版本]
什么是mcp MCP 是一个开放协议,它为应用程序向 LLM 提供上下文的方式进行了标准化。你可以将 MCP 想象成 AI 应用程序的 USB-C 接口。就像 USB-C 为设备连接各种外设和配件提供了标准化的方式一样,MCP 为 AI 模型连接各种数据源和工具提供了标准化的接口…...
解决 AWS RDS MySQL mysqldump 导入sql SET @@GLOBAL 权限不足问题
在使用 mysqldump 导出数据库时,导出的 SQL 文件通常会包含一些 SET 语句,例如 SET MYSQLDUMP, SET SESSION, SET GLOBAL 等,这些语句用于设置会话或全局变量以确保数据一致性和兼容性。然而,在 AWS RDS MySQL 环境中,…...
Java与C在典型场景下的性能对比深度剖析
🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:AI 【前言】 在计算机编程领域,Java和C语言都是举足轻重的编程语言。Java以其跨平台性、自动内存管理和丰富…...
多智能体 AI 游戏框架(开源程序):竞争、发展、适应
一、软件介绍 文末提供程序和源码下载 SamoAI 在人类和 AI 之间创建了一个无缝的多代理叙事层,实现了跨多个平台的自然协作。通过一致的身份保留和情境记忆,它允许通过一系列行动随着时间的推移而演变的交互,就像人际关系一样。 二、核心概念…...
从 BI 与 SQL2API 的差异,看数据技术的多元发展路径
在数据驱动的商业世界里,商业智能(BI)与 SQL2API 如同两颗闪耀的星星,各自散发着独特的光芒。BI 早已在企业中广泛应用,成为数据分析领域的中流砥柱;而 SQL2API 作为新兴技术,虽潜力巨大&#x…...
java实现二叉树的前序、中序、后序遍历(递归和非递归方式)以及层级遍历
java实现二叉树的前序、中序、后序遍历以及层级遍历 一、二叉树节点定义二、递归方式1.前序遍历2.中序遍历3.后序遍历 三、非递归方式1.前序遍历2.中序遍历3.后序遍历4.层级遍历5.分层打印 四、测试用例 一、二叉树节点定义 class TreeNode {int val;TreeNode left;TreeNode r…...
Solr admin 更新文档
<add><doc><field name"id">1904451090351546368</field><field name"companyName" update"set">测试科技有限公司</field></doc> </add>...
【Netty篇】EventLoopGroup 与 EventLoop 详解
目录 开场白:话说 Netty 江湖第一段:EventLoopGroup——“包工头”的角色第二段:EventLoop——“身怀绝技的工人”第三段:EventLoop 如何处理 I/O 事件、普通任务和定时任务第四段:Handler 执行中如何换人?…...
操作系统之shell实现(上)
🌟 各位看官好,我是maomi_9526! 🌍 种一棵树最好是十年前,其次是现在! 🚀 今天来学习C语言的相关知识。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更…...
考研数据结构之图的遍历:深度优先搜索(DFS)与广度优先搜索(BFS)(包含真题及解析)
考研数据结构之图的遍历:深度优先搜索(DFS)与广度优先搜索(BFS) 图的遍历是图论中的核心操作之一,主要包括深度优先搜索(DFS)和广度优先搜索(BFS)。本文将详…...
数据结构与算法——链表OJ题详解(2)
文章目录 一、前言二、OJ续享2.1相交链表2.2环形链表12.2环形链表2 三、总结 一、前言 哦了兄弟们,咱们上次在详解链表OJ题的时候,有一部分OJ题呢up并没有整理完,这一个星期呢,up也是在不断的学习并且沉淀着,也是终于…...
Linux 基础知识详解
Linux 基础知识详解 一、快照与克隆 1. 📸快照(Snapshot) 快照是虚拟机当前运行状态的一次“瞬间拷贝”,包括内存、磁盘、配置等信息。这使得管理员能够快速恢复到某个特定的时间点。 用途: 安全实验前保存状态&am…...
MySQL慢SQL优化方案详解:从诊断到根治的完整指南
MySQL慢SQL优化方案详解:从诊断到根治的完整指南 一、慢SQL的致命影响 当数据库响应时间超过500ms时,系统将面临三大灾难链式反应: 用户体验崩塌 页面加载超时率上升37%用户跳出率增加52%核心业务转化率下降29% 系统稳定性危机 连接池耗…...
centOs7配置有限网络
最简单快速的是使用nmtui命令,采用图形页面修改。 点击编辑连接并回车: 选中编辑然后回车: 千万记住DNS服务器就是子网掩码,不是常说的DNS域名。把地址,网关,子网掩码配置好。只要ip不冲突,网…...
C语言 —— 指尖跃迁 刻印永恒 - 文件操作
目录 1. 什么是文件 1.1 程序文件 1.2 数据文件 1.3 文件名 2. 二进制文件和文本文件 3. 文件的打开与关闭 3.1 流和标准流 3.2 文件指针 3.3 文件的打开与关闭 fopen fclose 4. 文件的顺序读写 4.1 fgetc和fputc fgetc fputc 4.2 fgets和fputs fgets fputs…...
网络安全与信息安全的区别及共通
在数字化时代,网络安全与信息安全已成为保障个人、企业乃至国家正常运转的重要防线。尽管二者紧密相关且常被混为一谈,但实则存在显著差异。当然,它们也有一些相同点,比如都以保障数字环境下的安全为核心目标,均需要通…...
【愚公系列】《Python网络爬虫从入门到精通》052-Scrapy 编写 Item Pipeline
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! …...
【AI News | 20250416】每日AI进展
AI Repos 1、Tutorial-Codebase-Knowledge 自动分析 GitHub 仓库并生成适合初学者的通俗易懂教程,清晰解释代码如何运行,还能生成可视化内容来展示核心功能。爬取 GitHub 仓库并从代码中构建知识库;分析整个代码库以识别核心抽象概念及其交互…...
GIS开发笔记(6)结合osg及osgEarth实现半球形区域绘制
一、实现效果 输入中心点坐标及半径,绘制半球形区域,地下部分不显示。 二、实现原理 根据中心点及半径绘制半球形区域,将其挂接到地球节点。 三、参考代码 void GlobeWidget::drawSphericalRegion(osg::Vec3d point,double radius) {// 使…...
Ant Design Vue 的表格数据,第一列项目区域,项目区域相同的行数据,第一列项目区域合并
在 Ant Design Vue 的表格中,如果需要根据第一列(如“项目区域”)的值进行动态合并,可以通过 customCell 方法实现。以下是完整的代码示例,展示如何根据“项目区域”相同的行数据,合并第一列单元格。 代码示…...
SFOS2:常用容器(布局)介绍
一、前言 最近在进行sailfish os的开发,由于在此之前并没有从事过QT开发的工作,所以对这一套颇为生疏,以此记录一下。以下内容不一定完全准确,开发所使用的是Qt Quick 2.6与Sailfish.Silica 1.0两个库。 二、布局 1.Qt Quick 2.…...
