Linux 网络基础概念
文章目录
- 一、初始协议
- 1、理解
- 2、协议分层
- 3、软件分层
- 4、OSI七层模型
- 5、TCP/IP五层模型
- 二、再识协议
- 1、为什么要有TCP/IP协议
- 2、什么是TCP/IP协议
- 3、TCP/IP协议与操作系统的关系(宏观上,怎么实现的)
- 三、网络传输基本流程
- 1、mac地址
- 2、TCP/IP协议通信的过程
- 网络协议的共性:
- 3、认识IP地址
- IP地址 vs Mac地址
- 网络通信的宏观路径
- 四、Socket编程
- 1、理解IP和Mac
- 2、端口号Port
- 进程已经有了唯一标识的Pid,为什么还要用端口号来进行唯一标识进程呢?
- 3、传输层代表
- (1)、认识TCP协议
- (2)、认识UDP协议
- 4、网络字节序
- 5、socket编程接口
- (1)Udp
- 创建套接字socket
- 绑定端口bind
- 接收消息recvfrom
- 发送消息sendto
- (2)Tcp
- 开始监听 socket (TCP, 服务器)listen
- 接收请求 (TCP, 服务器)accept
- 建立连接 (TCP, 客户端)connet
- (3)**socketaddr结构**
一、初始协议
1、理解
- 协议是一种约定。(二进制)
举例子:打电话约定电话铃响的次数(响一声是…、响两声是…)
- 不过光是这样是不够的,还需要更加细致的规定。(语言)
举例子:同样是1 + 1 = 2, 在不同的国家之间,因为语言的不同,表达方式可能不同。
定协议的人和实现的人可能是两批人。
2、协议分层
协议本身也是软件,是层状结构。
3、软件分层
分层可以实现解耦合,让软件的成本更低。
4、OSI七层模型
会话层、表示层、应用层、传输层、网络层、数据链路层、物理层
5、TCP/IP五层模型
应用层、传输层、网络层、数据链路层、物理层
二、再识协议
1、为什么要有TCP/IP协议
本质就是通信主机的距离变远了。
2、什么是TCP/IP协议
TCP(传输层)IP(网络层)
计算机内部都是存在协议的。
TCP/IP是一种解决方案。
TCP/IP协议能分层是因为问题的本身就是分层的。
3、TCP/IP协议与操作系统的关系(宏观上,怎么实现的)
网络协议栈必须相同。
所谓协议, 就是通信双方都认识的结构化的数据类型。
因为协议栈是分层的, 所以, 每层都有双方都有协议, 同层之间, 互相可以认识对方的协议。
三、网络传输基本流程
1、mac地址
唯一标识主机:mac地址。
mac地址用来标识数据链路层中相连的节点。
mac地址在网卡出厂的时候就确认了,不能修改,mac地址通常是唯一。
在以太网中,任何时刻,只允许一台机器向网络中发送数据。
如果有多态同时发送,会发生数据干扰,我们成为数据碰撞。
所有发送数据的主机要继承碰撞检测和碰撞检测。
在没有交换机的情况下,一个以太网就是一个局域网。
局域网通信的过程中, 主机对收到的报文确认是否是发给自己的, 是通过目标mac 地址判定。
2、TCP/IP协议通信的过程
- 报文 = 报头 + 有效载荷。—> 栈结构
- 数据在网络中发送的时候,一定最终要在硬件上跑。
网络协议的共性:
1、报头和有效载荷分离的问题 — 解包
2、除了应用层,每一层协议,都必须解决一个问题,自己的有效载荷,应该要交给上层的哪一种协议 — 分用。

3、认识IP地址
- IP地址是在IP协议中,用来标识不同主机的地址。(IPv4,32位,4字节的整数)
- IP地址用点分十进制表示。
- 网络层(就是IP层)向上(包括网络层)看到的所有的报文都是一样的,都至少是IP报文。
- IP可以屏蔽底层网络的差异!
- 所有的网络都是IP网络。
IP地址 vs Mac地址
IP地址是报文的目的地。
Mac地址是报文的途径地。

网络通信的宏观路径

四、Socket编程
1、理解IP和Mac
Mac地址只在局域网内有效,标识局域网中主机的唯一性。
IP在网络中,用来标识主机的唯一性。
数据传输到主机不是目的,而是手段。到达主机内部,再交给主机内的进程才是目的。
传输层协议(TCP、UDP)中源端口、目的端口,描述数据是谁发的,要发给谁。
2、端口号Port
- 端口号是一个2字节,16位的整数。用来表示一个主机内部的唯一进程。
- IP + Port = 网络中唯一的进程!
- 网络通信的本质就是进程间通信。
- 服务端启动的时候,就一定要和一个port关联起来。
进程已经有了唯一标识的Pid,为什么还要用端口号来进行唯一标识进程呢?
为了保证系统和网络进行解耦!当底层pid部分发生更改了,也不影响网络通信。
- 同主机内部:两个进程通信,要看到同一个资源,进程具有独立性。
- 不同主机内部:两个进程通信,看到同一个资源(网络),进程具有独立性。
进程都有pid,但是不是所有的进程都需要网络通信,只有需要网络通信的进程才会有端口号。
3、传输层代表

(1)、认识TCP协议
特点:
- 传输层协议
- 有连接
- 可靠传输
- 面向字节流
(2)、认识UDP协议
特点:
- 传输层协议
- 无连接
- 不可靠传输
- 面向数据报
4、网络字节序
都知道计算机有大小端之分,那如何保证大小端之间的计算机之间能进行正常通信呢?
规定在网络中传输的数据以大端形式发送。
小端存储:小小小(小端存储、低地址、低字节)
大端存储:大大小(大端存储、高地址、低字节)
#include <arpa/inet.h>
// h--->host:本主机
// n--->net:网络
uint32_t htonl(uint32_t hostlong); // 将hostlong的32位无符号整数转化为网络字节序
uint32_t ntohl(uint32_t netlong); // 将netlong的32位无符号整数转化为主机字节序
uint16_t htons(uint16_t hostshort); // 将hostshort的16位无符号整数转化为网络字节序
uint16_t ntohs(uint16_t netshort); // 将netshort的16位无符号整数转化为主机字节序
5、socket编程接口
(1)Udp
创建套接字socket
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);

绑定端口bind
#include <sys/types.h>
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
// 返回值:成功返回0, 失败返回-1,设置errno
---------------------------------------------
#include <netinet/in.h>struct sockaddr_in {sa_family_t sin_family; // 地址族,通常是 AF_INETuint16_t sin_port; // 端口号struct in_addr sin_addr; // IP 地址
};struct in_addr {uint32_t s_addr; // IP 地址
};// 填充sockaddr
struct sockaddr_in local;
memset(&local, 0, sizeof(local));//先置空
local.sin_family = AF_INET;
local.sin_port = htos(_localport);
//local.sin_addr.s_addr = inet_addr(_localip.c_str())// 需要4字节IP,需要网络序列的IP,不建议
inet_pton(AF_INET, _localip.c_str(), &local.in_addr); // 建议
// 将字符串IP地址转化为网络字节序
int inet_pton(int af, const char *src, void *dst);
in_addr_t inet_addr(const char *cp);
// 将网络字节序IP地址转化成字符串
const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
char *inet_ntoa(struct in_addr in);

接收消息recvfrom
#include <sys/types.h>
#include <sys/socket.h>ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);

发送消息sendto
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);

(2)Tcp
socket,bind和Udp同理。
开始监听 socket (TCP, 服务器)listen
#include <sys/types.h>
#include <sys/socket.h>
int listen(int socket, int backlog);
// 这个backlog我设置为8
// 成功返回0,失败返回-1且错误码被设置

接收请求 (TCP, 服务器)accept
#include <sys/types.h>
#include <sys/socket.h>
int accept(int socket, struct sockaddr* address, socklen_t* address_len);

建立连接 (TCP, 客户端)connet
#include <sys/types.h>
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

(3)socketaddr结构
为了使用同意一套接口既能实现网络通信又能实现本主机通信,所以设计了一个socketaddr结构体,接口中使用socketaddr,但是传的是struct sockaddr_in、struct sockaddr_un。—这种结构,也就是C语言版的多态。

谢谢大家!
相关文章:
Linux 网络基础概念
文章目录 一、初始协议1、理解2、协议分层3、软件分层4、OSI七层模型5、TCP/IP五层模型 二、再识协议1、为什么要有TCP/IP协议2、什么是TCP/IP协议3、TCP/IP协议与操作系统的关系(宏观上,怎么实现的) 三、网络传输基本流程1、mac地址2、TCP/I…...
【题目】MySQL选择题
来源:MySQL专项练习选择题 1.有一个User用户表,要删除整张表(指完全删除表数据和结构),下面正确的MySQL语句是: A.DELETE TABLE User; B.DROP TABLE User; C.TRUNCATE TABLE User; D.DELETE FROM User …...
自然语言处理系列六十三》神经网络算法》LSTM长短期记忆神经网络算法
注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列六十三神经网络算法》LSTM长短期记忆神经网络算…...
亚马逊IP关联及其解决方案
在电子商务领域,亚马逊作为全球领先的在线购物平台,吸引了众多商家和个人的参与。然而,随着业务规模的扩大,商家在使用亚马逊服务时可能会遇到IP关联的问题,这不仅影响账户的正常运营,还可能带来一系列不利…...
Definition and Detection of Defects in NFT Smart Contracts论文解读、复现
背景知识\定义 NFT 是数字或物理资产所有权的区块链表示。不仅限于数字图片,视频和画作等艺术品也可以转化为 NFT 进行交易。近年来受到广泛关注,2021 年 NFT 交易额达到约 410 亿美元。 智能合约 是在区块链上运行的图灵完备程序。支持各种去中心化…...
Neo4j图数据库
文章目录 一、Neo4J相关介绍1.为什么需要图数据库方案1:Google方案2:Facebook 2.特定和优势3.什么是Neo4j4.Neo4j数据模型图论基础属性图模型Neo4j的构建元素 5.软件安装 二、CQL语句1.CQL简介2.CREATE 命令3.MATCH 命令4.RETURN 子句5.MATCH和RETURN6.C…...
k8s API资源对象
API资源对象Deployment 最小的资源是pod,deployment是多个pod的集合(多个副本实现高可用、负载均衡等)。 使用yaml文件来配置、部署资源对象。 Deployment YAML示例: vi ng-deploy.yaml apiVersion: apps/v1 kind: Deployment…...
GB/T28181规范解读之编码规则详解
GB/T28181,即《安全防范视频监控联网系统信息传输、交换、控制技术要求》,是我国安防行业的重要标准之一。该标准详细规定了城市监控报警联网系统中信息传输、交换、控制的互联结构、通信协议结构,以及传输、交换、控制的基本要求和安全性要求…...
Vue封装的过度与动画(transition-group、animate.css)
目录 1. Vue封装的过度与动画1.1 动画效果11.2 动态效果21.3 使用第三方动画库animate.css 1. Vue封装的过度与动画 作用:在插入、更新或移除DOM元素时,在合适的时候给元素添加样式类名 1.1 动画效果1 Test1.vue: transition内部只能包含一个子标签。…...
免费云服务器申请教程
免费云服务器的申请流程通常包括以下几个步骤,但请注意,不同云服务提供商的具体步骤可能略有不同。以下是一个通用的申请流程: 一、选择合适的云服务提供商 首先,需要选择一家提供免费云服务器服务的云服务提供商。 免费云服务器汇…...
Spring Cloud Gateway中的常见配置
问题 最近用到了Spring Cloud Gateway,这里记录一下这个服务的常见配置。 spring:data:redis:host: ${REDIS_HOST:xxx.xxx.xxx.xxx}port: ${REDIS_PORT:2345wsd}password: ${REDIS_PASS:sdfsdfgh}database: ${REDIS_DB:8}session:redis:flush-mode: on_savenamespa…...
SelectDB 多计算集群核心设计要点揭秘与场景应用
需求起源 SelectDB 设计多计算集群架构初衷主要源于两类典型的使用场景: 写入与读取隔离:传统数仓架构中,数据的写入和读取在同一个计算集群,当遇到业务写入高峰期或突增的写入压力时,容易因资源相互抢占影响查询服务…...
Docker 清理和查看镜像与容器占用情况
查看容器占用磁盘大小 docker system df 查看单个image、container大小: docker system df -v 清理所有废弃镜像与Build Cache docker system prune -a...
如何在Android 12 aosp系统源码中添加三指下滑截图功能
如何在Android 12 aosp系统源码中添加三指下滑截图功能 系统中截图api非常简单: private static ScreenshotHelper sScreenshotHelper;sScreenshotHelper new ScreenshotHelper(mContext);//调用 sScreenshotHelper.takeScreenshot(WindowManager.TAKE_SCREENSHO…...
使用SQL语句查询MySQL数据表
6.1 创建单表基本查询 1.Select 语句的语法格式及其功能 (1)Select 语句的一般格式。 Select < 字段名称或表达式列表 > From < 数据表名称或视图名称 > [ Where < 条件表达式 > ] [ Group By < 分组的字段名称…...
【AI绘画、换脸、写作、办公】从零开始:使用AIStarter启动器发布AI应用
随着人工智能技术的快速发展,越来越多的开发者希望通过自己的创意来构建和分享AI应用。AIStarter启动器正是为此而设计的一个强大工具,它可以帮助开发者轻松打包并发布自己的AI应用项目。本文将详细介绍如何使用AIStarter启动器来实现这一目标。 注册账…...
eeprom使用 cubemx STM32F407ZGT6【IIC驱动AT24C02】
存储器的简单介绍 ROM(只读存储器)、RAM(随机存取存储器)、Flash(闪存)、和EEPROM(电可擦可编程只读存储器)是四种不同类型的存储介质。ROM用于存储固件或永久数据,不易…...
STL-stack/queue/deque(容器适配器)
目录 编辑 STL-stack 150. 逆波兰表达式求值 stack queue std::stack deque 性能测试 结构 STL-stack 栈的压入、弹出序列_牛客题霸_牛客网输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假。题目…...
NVDLA专题15:Runtime environment-核心模式驱动
核心模式驱动(Kernel Mode Driver) KMD主入口点在内存中接收一个推理作业,从多个可用的作业中选择要执行的作业(如果在多进程系统上),并将其提交给核心引擎调度程序。该核心引擎调度程序负责处理来自NVDLA的中断,调度每…...
计算机毕业设计选题推荐-班级管理系统-教务管理系统-Java/Python项目实战
✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...






