当前位置: 首页 > article >正文

网络编程之网络基础

基础理论IP子网掩码端口号字节序网络基础模型传输协议

socketTCPUDP广播组播抓包工具的使用协议头并发服务器

Modbus协议 HTTP协议HTML 分析服务器 源码、数据库

一、认识网络

网络:实现多设备通信

二、IP地址

1.基本概念

1. IP地址是Internet中主机的标识

2. Internet中的主机要与别的机器通信必须具有一个IP地址

3. IP地址为32位(IPv4)或者128位(IPv6)

NAT:公网转私网、私网转公网

4. IPV4表示形式:常用点分十进制形式,如202.38.64.10,最后都会转换为一个32位的无符号整数。

补充:

2.分类

分类

地址范围

有效地址范围

子网掩码

A

0.0.0.0~127.255.255.255

1.0.0.1~126.255.255.254

255.0.0.0

B

128.0.0.0~191.255.255.255

128.0.0.1~191.255.255.254

255.255.0.0

C

192.0.0.0~223.255.255.255

192.0.0.1~223.255.255.254

255.255.255.0

D

224.0.0.0~239.255.255.255

224.0.0.1~239.255.255.254

-----

E

240.0.0.0~255.255.255.255

------

-----

特殊地址:

1.  0.0.0.0:在服务器中,0.0.0.0指的是本机上的所有IPV4地址,如果一个主机有两个IP地址,192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是0.0.0.0,那么通过两个ip地址都能够访问该服务

2.  127.0.0.1回环地址/环路地址,所有发往该类地址的数据包都应该被loop back。本机通信

3.  网络地址: 每一个网段主机号为0的地址; 如:192.168.50.223--->192.168.50.0 它是网络中的一个特殊地址,不能被分配给任何具体的主机

4.  广播地址: 主机号最大的地址是该网段的广播地址 如:192.168.50.223--》192.168.50.255

5.  全网广播地址:255.255.255.255

 ifconfig命令:

 3.子网掩码

1.  子网掩码:是一个32位的整数,作用是将某一个IP划分成网络地址和主机地址;长度是和IP地址长度完全一样;

2.  特点:网络号全为1,主机号全为0

3.  公式:网络地址=IP & MASK(子网掩码)

                     主机地址= IP& ~MASK

注意: 定长与不定长子网划分

 

 

 三、网络体系结构

网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。

每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。

每层向上层提供服务,同时使用下层提供的服务

网络体系结构即指网络的层次结构和每层所使用协议的集合

两类非常重要的体系结构:OSI与TCP/IP

 1.OSI模型

                               

                

 2.TCP/IP模型

                     

 应用层:应用协议和应用程序的集合

传输层:决定数据交给机器的哪个任务(进程)去处理,通过端口寻址

        进程一定有进程号,不一定有端口号,端口号只在进行网络通信才有 

网络层:提供设备到设备的传输,可以理解为通过IP寻址机器

网络接口和物理层:屏蔽硬件差异(驱动),向上层提供统一的操作接口

 3.OSI和TCP/IP模型对应关系图

 

 4.常见协议

                           

补充:

                    

 5.TCP与UDP

TCP:全双工通信、面向连接、可靠

TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)。

高可靠原因:         1. 三次握手、四次挥手

2.  序列号和应答机制

3.  超时,错误重传机制

4.  拥塞控制、流量控制(滑动窗口)

适用场景

适合于对传输质量要求较高的通信

在需要可靠数据传输的场合,通常使用TCP协议

MSN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议

UDP:全双工通信、面向无连接、不可靠

UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输

适用场景

发送小尺寸数据(如对DNS服务器进行IP地址查询时)

适合于广播/组播式通信中。

MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通讯通常采用UDP协议

 6. 网络调试命令

(1)  ping

测试网络连通性(ICMP)

作为平时网络连通检测使用最多的命令,它的作用主要为:

用来检测网络的连通情况和分析网络速度;

根据域名得到服务器IP;

根据ping返回的TTL值来判断对方所使用的操作系统及数据包经过路由器数量。

字节:数据包大小

时间:响应时间,时间越小证明你链接这个地址的速度越快

TTL:Time To Live,从源到目的,每经过一个路由器,TTL减一,当TTL=0,包丢失

(2)  ifconfig

查看网络接口信息

ens33:网卡名称 en:Ethernet s:表示热插拔插槽上的设备 33:插槽编号

lo:回环网卡

格式

含义

ifconfig 具体网卡名称

只显示具体网卡的详细信息(无论是否启用)

ifconfig -a

表示显示所有网卡包括没有启动的网卡

ifconfig 网卡名称 up/down

表示开启或关闭网卡

ifconfig 网络接口 IP地址[/子网掩码长度]

新建临时IP地址(添加 一块虚拟网卡)

ifconfig -s

查看通讯情况

(3)  netstat

netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP相关的统计数据,一般用于检验本机各端口的网络连接情况。

netstat -a  //查看所有网络状态
netstat -at  //查看tcp所有网络状态
netstat -au //查看udp所有网络状态
netstat -l //查看处于监听状态的链接
netstat -lt //查看处于监听状态的链接tcp
netstat -lu //查看处于监听状态的链接udp
netstat -lx //查看处于监听状态的链接unixs

四、套接字

 1.  socket发展

1)1982 - Berkeley Software Distributions 操作系统引入了socket作为本地进程之间通信的接口

2)1986 - Berkeley 扩展了socket 接口,使之支持UNIX 下的TCP/IP 通信

3)现在很多应用 (FTP, Telnet) 都依赖这一接口

2.  socket介绍

1、是一个编程接口

2、是一种特殊的文件描述符 (everything in Unix is a file)

3、socket是一种通信机制,并不仅限于TCP/IP协议

4、面向连接 (Transmission Control Protocol - TCP/IP)

5、无连接 (User Datagram Protocol -UDP 和 Inter-network Packet Exchange - IPX)

3.  为什么需要socket?

1.普通的I/O操作过程 :打开文件->读/写操作->关闭文件

2.TCP/IP协议被集成到操作系统的内核中,引入了新型的“I/O”操作 ----->进行网络通信的两个进程在不同的机器上,如何连接? 网络协议具有多样性,如何进行统一的操作 ?

需要一种通用的网络编程接口:Socket

4.  socket类型

流式套接字(SOCK_STREAM) ---> TCP

提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流

数据报套接字(SOCK_DGRAM) --> UDP

提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送可能乱序接收。

原始套接字(SOCK_RAW)

可以对较低层次协议如IP、ICMP直接访问,还有一些ping命令

5.位置

五、端口号

● 为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区分

TCP端口号与UDP端口号独立(UDP port为8888,TCP port也可为8888 )

端口号一般由IANA (Internet Assigned Numbers Authority) 管理

端口用两个字节来表示

 

六、字节序

 1.  字节序: 不同类型的cpu主机,内存存储大于一个字节类型的数据在内存中的存放顺序

2.  浮点类型,字符类型,字符串没有字节序

3.  分类

小端序(little-endian) - 低序字节存储在低地址 (主机字节序)

大端序(big-endian)- 高序字节存储在低地址 (网络字节序)

注意:

 网络中传输的数据必须使用网络字节序,即大端字节序

终端显示的数据必须是主机字节序,即小端字节序

端口号占2字节 --->需要区分大小端---->大小端转换

端口号的字节序转换:

主机字节序转换为网络字节序 (小端序->大端序)

#include <arpa/inet.h>u_long htonl (u_long hostlong); //host to network longu_short htons (u_short short);  //掌握这个

网络字节序转换为主机字节序(大端序->小端序)

#include <arpa/inet.h>u_long ntohl (u_long hostlong);u_short ntohs (u_short short);

 IP地址的字节序转换:

 

主机字节序转换为网络字节序 (小端序->大端序)

  #include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>uint32_t  inet_addr(const char *strptr);  //该参数是字符串struct in_addr {uint32_t s_addr;
};
功能:  主机字节序转为网络字节序
参数:  const char *strptr: 字符串
返回值: 返回一个无符号长整型数(无符号32位整数用十六进制表示), 否则NULL

网络字节序转换为主机字节序(大端序->小端序)

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>char *inet_ntoa(stuct in_addr inaddr);
功能:   将网络字节序二进制地址转换成主机字节序。 
参数:  stuct in_addr in addr  : 只需传入一个结构体变量
返回值:  返回一个字符指针, 否则NULL;

使用时注意:

参数要填的stuct in_addr类型的结构体变量需要通过 struct sockaddr_in 类型的结构体变量的链式调用来获取

 七、数据的封装与传递过程

以太网帧:

对于网络层最大数据帧长度是1500字节

对于链路层最大数据长度是1518字节(1500+14+CRC)

发送时候,IP层协议栈程序检测到发送数据和包头总长度超过1500字节时候,会进行自动

分包处理,接收端在IP层进行包重组,然后才继续往上传递

八、wireshark抓包

 windows上:

linux上:

(1)下载wireshark:  sudo apt-get install wireshark

  (2) 启用wireshark : sudo wireshark

过滤包:

1.  ip.addr == x.x.x.x:只显示源或目标IP地址为x.x.x.x的数据包。

2.  tcp.port == x:只显示源或目标端口号为x的TCP数据包。

3.  udp.port == x:只显示源或目标端口号为x的UDP数据包。

4.  ip.src == x.x.x.x:只显示源IP地址为x.x.x.x的数据包。

5.  ip.dst == x.x.x.x:只显目标IP地址为x.x.x.x的数据包。

dst:目标

src:源

seq:序列号

ack:确认号

PSH:数据包

ACK:确认包

SYN:握手包(同步包)

FIN:挥手包

 

相关文章:

网络编程之网络基础

基础理论&#xff1a;IP、子网掩码、端口号、字节序、网络基础模型、传输协议 socket&#xff1a;TCP、UDP、广播、组播、抓包工具的使用、协议头、并发服务器 Modbus协议 、HTTP协议、HTML、 分析服务器 源码、数据库 一、认识网络 网络&#xff1a;实现多设备通信 二、IP地址…...

Spring AI(11)——SSE传输的MCP服务端

WebMVC的服务器传输 支持SSE&#xff08;Server-Sent Events&#xff09; 基于 Spring MVC 的服务器传输和可选的STDIO运输 导入jar <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webmvc</a…...

计算机网络备忘录

计算机网络 - 网络互联与互联网 计算机网络重点学习本章&#xff0c;属于核心知识 包含网络层和传输层 的 相关协议 计算机网络层次重点掌握网络层与传输层。其中网络层主要是IP协议&#xff0c;解决主机-主机通信&#xff0c;传输层主要是TCP/UDP 协议&#xff0c;解决应用-…...

Spring Boot论文翻译防丢失 From船长cap

本文内容 微服务 微服务风格的特性组件化&#xff08;Componentization &#xff09;与服务&#xff08;Services&#xff09;围绕业务功能的组织产品不是项目强化终端及弱化通道分散治理分散数据管理基础设施自动化容错性设计设计改进 微服务是未来吗其它 微服务系统多大微…...

[蓝桥杯]最优包含

最优包含 题目描述 我们称一个字符串 SS 包含字符串 TT 是指 TT 是 SS 的一个子序列&#xff0c;即可以从字符串 SS 中抽出若干个字符&#xff0c;它们按原来的顺序组合成一个新的字符串与 TT 完全一样。 给定两个字符串 SS 和 TT&#xff0c;请问最少修改 SS 中的多少个字符…...

NuxtJS入门指南:环境安装及报错解决

在学习NuxtJS的过程中&#xff0c;正确的安装环境是非常重要的一步。然而&#xff0c;有时候在安装过程中会遇到一些问题&#xff0c;比如使用corepack安装pnpm时出现的错误。本文将详细介绍如何安装NuxtJS以及解决上述安装过程中遇到的问题。 Nuxt.js简介 Nuxt.js是一个强大的…...

在java 项目 springboot3.3 中 调用第三方接口(乙方),如何做到幂等操作(调用方为甲方,被调用方为乙方)? 以及啥是幂等操作?

什么是幂等操作&#xff1f; 幂等性&#xff08;Idempotence&#xff09; 是指一个操作无论执行一次还是多次&#xff0c;对系统状态产生的影响都是相同的。在分布式系统中&#xff0c;由于网络不稳定、超时重试等因素&#xff0c;接口可能被重复调用&#xff0c;幂等设计能确…...

贪心算法应用:集合划分问题详解

贪心算法与集合划分问题详解 集合划分问题是组合优化中的经典问题&#xff0c;其核心目标是将元素集合划分为若干满足特定条件的子集。本文将深入探讨贪心算法在集合划分中的应用&#xff0c;涵盖算法原理、适用场景、Java实现细节及优化策略。 一、集合划分问题定义 1.1 基础…...

electron下载文件

const http require(http); const https require(https); const fs require(fs); const { URL } require(url); const path require(path);// 下载文件函数 function downloadFile(url, savePath) {return new Promise((resolve, reject) > {try {console.log(开始下载…...

Neo4j 数据导入:原理、技术、技巧与最佳实践

在构建知识图谱、社交网络分析或复杂关系系统时,高效准确地将数据导入Neo4j图数据库至关重要。本文基于官方文档,深入探讨Neo4j数据导入的核心原理、主流技术、实用技巧及行业最佳实践。 Neo4j的数据导入不仅是技术操作,更是图模型设计的延续。深入理解存储原理、灵活运用C…...

数论~~~

质数 质数Miller-Rabin算法质因子分解质数筛埃氏筛欧拉筛如果只是计数&#xff0c;埃氏筛改进 快速幂乘法快速幂矩阵快速幂1维k阶实战(提醒&#xff1a;最好在mul函数中作乘法时加上&#xff08;long long&#xff09;的强制类型转换 &#xff0c;或者全部数组换成long long&am…...

web第十次课后作业--Mybatis的增删改查

&#xff08;一&#xff09;删除操作 功能&#xff1a;根据主键删除数据 SQL 语句 -- 删除id17的数据 delete from emp where id 17;Mybatis 框架让程序员更关注于 SQL 语句 接口方法 Mapper public interface EmpMapper {//Delete("delete from emp where id 17&qu…...

贪心算法应用:集合覆盖问题详解

贪心算法与集合覆盖问题详解 贪心算法在组合优化问题中展现出独特优势&#xff0c;集合覆盖问题&#xff08;Set Cover Problem&#xff09;是其中的经典案例。本文将用2万字全面解析贪心算法在集合覆盖/划分中的应用&#xff0c;涵盖算法原理、正确性分析、Java实现、复杂度证…...

BLOB 是用来存“二进制大文件”的字段类型

BLOB 是用来存“二进制大文件”的字段类型&#xff0c;可以存 0 到 65535 字节的数据&#xff0c;常用来存图片、音频、PDF、Word 等“非文本”内容。 BLOB 0-65535 bytes 二进制形式的长文本数据✅ 关键词 1&#xff1a;BLOB 全称&#xff1a;Binary Large Object中文&…...

5.Declare_Query_Checking.ipynb

这个教程 5.Declare_Query_Checking.ipynb 主要讲解了如何使用 DECLARE 查询检查器来分析事件日志中的约束关系。 1. 主要功能 这个教程展示了如何使用 DeclareQueryChecker 来&#xff1a; 发现事件日志中满足特定支持度的约束模式查询不同类型的约束关系分析活动之间的关联…...

【知识点】第7章:文件和数据格式化

文章目录 知识点整理文件概述文件的打开和关闭文件的读操作文件的写操作 练习题填空题选择题​​ 知识点整理 文件概述 文件是一个存储在辅助存储器上的数据序列&#xff0c;可以包含任何数据内容。概念上&#xff0c;文件是数据的集合和抽象&#xff0c;类似地&#xff0c;函…...

NetSuite Bundle - Dashboard Refresh

儿童节快乐&#xff01; 今朝发一个Bundle&#xff0c;解决一个NetSuite Dashboard的老问题。出于性能上的考虑&#xff0c;NetSuite的Dashboard中的Portlet&#xff0c;只能逐一手工刷新。有人基于浏览器做了插件&#xff0c;可以进行自动刷新。但是在我们做项目部署时&#…...

AI+3D 视觉重塑塑料袋拆垛新范式:迁移科技解锁工业自动化新高度

在工业自动化浪潮席卷全球的当下&#xff0c;仓储物流环节的效率与精准度成为企业降本增效的关键战场。其中&#xff0c;塑料袋拆垛作为高频、高重复性的作业场景&#xff0c;传统人工或机械臂操作面临着诸多挑战。迁移科技&#xff0c;作为行业领先的 3D 工业相机和 3D 视觉系…...

智慧赋能:移动充电桩的能源供给革命与便捷服务升级

在城市化进程加速与新能源汽车普及的双重推动下&#xff0c;移动充电桩正成为能源供给领域的一场革命。传统固定充电设施受限于布局与效率&#xff0c;难以满足用户即时、灵活的充电需求&#xff0c;而移动充电桩通过技术创新与服务升级&#xff0c;打破了时空壁垒&#xff0c;…...

【项目实践】SMBMS(Javaweb版)(三)登出、注册、注销、修改

文章目录 登出、注册、注销、修改登出操作的实现逻辑及方式防止用户登出后可以继续访问修改密码功能实现导入jsp实现Dao层数据接口实现Service层业务接口注册Servlet 注册和注销 用户的方式导入jsp实现Dao层的数据逻辑实现Service逻辑注册Servlet 登出、注册、注销、修改 登出…...

斐波那契数列------矩阵幂法

斐波那契数列 斐波拉楔数是我们在学递归的使用看到的题目&#xff0c;但递归法是比较慢的&#xff0c;后面我们用循环递进来写的&#xff0c;但今天我有遇到了新的方法—— 矩阵幂法&#xff08;线性代数的知识点&#xff09;。 矩阵幂法&#xff1a; F11*F10*F2; F20*F11*…...

【Go语言基础【四】】局部变量、全局变量、形式参数

文章目录 一、一句话总结二、作用域分类1. 局部变量&#xff08;函数内/块内变量&#xff09;1.1、语法说明1.2、示例 2. 全局变量&#xff08;包级变量&#xff09;2.1、语法说明2.2、示例&#xff1a;全局变量的访问 3. 形式参数&#xff08;函数参数&#xff09; 三、作用域…...

DeepSeek 赋能车路协同:智能交通的破局与重构

目录 一、引言二、智能交通车路协同系统概述2.1 系统定义与原理2.2 系统构成2.3 发展现状与挑战 三、DeepSeek 技术剖析3.1 DeepSeek 简介3.2 核心技术原理3.2.1 Transformer 架构3.2.2 混合专家架构&#xff08;MoE&#xff09;3.2.3 多头潜在注意力&#xff08;MLA&#xff0…...

RabbitMQ 的异步化、解耦和流量削峰三大核心机制

RabbitMQ 的异步化、解耦和流量削峰三大核心机制 RabbitMQ 是解决数据库高并发问题的利器&#xff0c;通过异步化、解耦和流量削峰三大核心机制保护数据库。下面从设计思想到具体实现&#xff0c;深入剖析 RabbitMQ 应对高并发的完整方案&#xff1a; 一、数据库高并发核心痛点…...

Ubuntu 25.10 将默认使用 sudo-rs

非盈利组织 Trifecta Tech Foundation 报告&#xff0c;Ubuntu 25.10 将默认使用它开发的 sudo-rs——用内存安全语言 Rust 开发的 sudo 实现。 Ubuntu 25.10 代号 Questing Quokka&#xff0c;预计将于 2025 年 10 月释出&#xff0c;是一个短期支持版本。Sudo-rs 是 Trifect…...

Maven​​ 和 ​​Gradle​​ 依赖管理的详细说明及示例,涵盖核心概念、配置方法、常见问题解决和工具对比。

一、Maven 依赖管理 1. 核心概念 ​​依赖声明​​&#xff1a;在 pom.xml 中通过 <dependency> 标签定义依赖项&#xff0c;包含 groupId、artifactId、version。​​仓库​​&#xff1a;依赖下载的来源&#xff0c;包括中央仓库&#xff08;Maven Central&#xff0…...

【Web应用】若依框架:基础篇21二次开发-页面调整

文章目录 ⭐前言⭐一、课程讲解⭐二、怎样选择设计模式&#xff1f;&#x1f31f;1、寻找合适的对象✨1) ⭐三、怎样使用设计模式&#xff1f;&#x1f31f;1、寻找合适的对象✨1) ⭐总结 标题详情作者JosieBook头衔CSDN博客专家资格、阿里云社区专家博主、软件设计工程师博客内…...

【 java 基础知识 第一篇 】

目录 1.概念 1.1.java的特定有哪些&#xff1f; 1.2.java有哪些优势哪些劣势&#xff1f; 1.3.java为什么可以跨平台&#xff1f; 1.4JVM,JDK,JRE它们有什么区别&#xff1f; 1.5.编译型语言与解释型语言的区别&#xff1f; 2.数据类型 2.1.long与int类型可以互转吗&…...

CVE-2020-17518源码分析与漏洞复现(Flink 路径遍历)

漏洞概述 漏洞名称&#xff1a;Apache Flink REST API 任意文件上传漏洞 漏洞编号&#xff1a;CVE-2020-17518 CVSS 评分&#xff1a;7.5 影响版本&#xff1a;Apache Flink 1.5.1 - 1.11.2 修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0 漏洞类型&#xff1a;路径遍历导致的任…...

Excel表格批量下载 CyberWin Excel Doenlaoder 智能编程-——玄武芯辰

使用 CyberWin Excel Downloader 进行 Excel 表格及各种文档的批量下载&#xff0c;优势显著。它能大幅节省时间&#xff0c;一次性获取大量所需文档&#xff0c;无需逐个手动下载&#xff0c;提升工作效率。可确保数据完整性与准确性&#xff0c;避免因重复操作产生失误。还便…...