linux网络编程2

24.9.18学习目录

  • 一.数据包的传送
    • 1.数据包在每层间的传送
    • 2.链路层的封包
    • 3.网络层、传输层封包格式
  • 二.字节序
    • 1.概念
    • 2.字节序转换函数
  • 三.IP地址转换
  • 四.UDP
    • 1.概述
    • 2.网络编程接口socket
    • 3.UDP的C/S架构
    • 4.UDP编程

一.数据包的传送

1.数据包在每层间的传送

传送方数据从运用层到链路层间都会添加信息,确保数据的能准确传入到接收方,而接受发从链路层到运用层会对添加的数据进行验证并删除
在这里插入图片描述

2.链路层的封包

封包的类型主要为两个,但常用的是以太网封装方法
目的地址和源地址都是MAC地址
类型指的是采用什么类型的协议
在这里插入图片描述
以太网常用在有线局域网;
IEEE常用在无线局域网;

3.网络层、传输层封包格式

其添加的数据如图中,每一行都占4个字节
在这里插入图片描述

二.字节序

1.概念

字节序是指多字节数据的存储顺序
在数据传输过程中字节序的不同会导致信息接收时理解错误,因此需要注意接收方和传送方的字节序

分类:
小端格式:将低位字节数据存储在低地址
大端格式:将高位字节数据存储在低地址

高地址为MSB;低地址为LSB


判断字节的存储方式:
#include <stdio.h>union un
{int a;char b;
};int main(int argc,char const *argv[])
{union un myun;myun.a = 0x12345678;printf("a = %#x\n",myun.a);printf("b = %#x\n",myun.b);if(myun.b = 0x78){printf("小端存储\n");}else{printf("大端存储\n");}return 0;
}

注意:

  • 网络协议指定了通讯字节序为大端
  • 只有在多字节数据处理时才需要考虑字节序
  • 运行在同一台计算机上的进程互相通信时,一般不用考虑字节序
  • 异构计算机之间通讯,需要转换自己的字节序为网络字节序,可以通过特定的函数进行转换

2.字节序转换函数

(1)转换为网络字节序函数

#include <arpa/inet.h>
//长整型
uint32_t htonl(uint32_t hostint32);//短整型
uint16_t htons(uint16_t hostint16);

(2)转换为主机字节序函数

#include <arpa/inet.h>
//长整型
uint32_t ntohl(uint32_t hostint32);//短整型
uint16_t ntohs(uint16_t hostint16);

三.IP地址转换

将用户识别的IP(为字符串)转换为机器能识别的整型

(1)地址间的相互转换:

#include <arpa/inet.h>
//将点分十进制字符串转换为32为无符号整数
int inet_pton(int family,const char *strptr,void *addrptr)

family:协议族,有AF_INET为IPV4的网络协议、AF_INET6
    为IPV6的网络协议
strptr:点分十进制字符串
addrptr:32位无符号整数的地址

#include <arpa/inet.h>
//将32位无符号整数转换为点分十进制字符串
const char *inet_ntop(int family,const void *addrptr,char *strptr,size_t len);

len:为strptr缓冲区长度

(2)用于IPV4地址的转换的函数
该两个函数在TCP和UDP网络编程中比较常用

#include <sys/sochet.h>
#include <netinet/in.h>
#include <arpa/inet.h>//将点分十进制字符串转换为整数
int_addr_t inet_addr(const char *cp)//将整数转换为点分十进制字符串
char *inet_ntoa(struct in_addr in);

cp:为点分十进制的IP地址

in:为保存IP地址的结构体

四.UDP

1.概述

常用于语音和视频通话

特定:

  • 相较于TCP速度稍快些
  • 简单的请求、应答应用程序可以使用UDP
  • 对于海量数据传输不应该使用UDP
  • 广播和多播应用必须使用UDP

2.网络编程接口socket

socket(也称套接字)提供不同主机上的进程之间的通信;
其是一种文件描述符。代表了一个通信管道的一个端点;
对其操作类似于文件的操作,使用read、write等函数;
获取socket的方法为socket();

socket主要分类:

  • SOCK_STREAM:流式套接字,用于TCP
  • SOCK_DGRAM:数据报套接字,用于UDP
  • SOCK_RAW:原始套接字,对于其他层次的协议操作时需要使用这个类型

3.UDP的C/S架构

UDP网络编程流程:

(1)服务器:
使用socket()函数创建socket;
是用bind()函数将服务器的ip地址、端口号和socket进行绑定;
使用recvfrom()函数等待接收用户请求的发送;
使用sendto()函数给用户发送数据;

(2)客户端:
使用socket()函数创建socket;
使用sendto()函数给服务器发送数据;
使用recvfrom()函数接收服务器发送的数据;
使用close()函数关闭socket

4.UDP编程

(1)socket函数创建socket

#include <sys/socket.h>
int socket(int family,int type,int protocol);

type:套接字类型
protocol:协议类别,有0、IPPROTO_TCP、IPPROTO_UDP等

特点:
创建socket时,系统不分配端口
创建的socket时指定发起服务的请求,当作为服务器时,需要将其该为被动的

(2)IPv4套接字地址结构
注意:
不同格式地址能被传入套接字函数,地址必须要强制转换成通用套接字地址结构体,因为不同场合使用的结构体不一样,但调用的函数是一样的;

以下三个在linux中都已经定义好了,能直接使用

#include <netinet/in.h>
struct in_addr
{in_addr_t s_addr;//IP地址
};//网络编程中通用协议
//在定义源地址和目的地址时,使用下面结构体
struct socketaddr_in
{sa_family_t sin_family;//协议族in_port_t sin_port;//端口号struct in_addr sin_addr;//ip地址char sin_zero[8];//填充
};//通用的地址结构体
struct sockaddr
{sa_family_t sa_family;//协议族char sa_data[14];//填充
};

当调用编程接口函数,且该函数需要传入地址结构时需要进行强制转换

bind(sockfd,(struct sockaddr*)&my_addr,sizeof(my_addr));

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/426553.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL之内置函数

目录 一&#xff1a;日期函数 二:字符串函数 三&#xff1a;数学函数 四&#xff1a;其他函数 一&#xff1a;日期函数 举例: (1) mysql> select current_date(); ---------------- | current_date() | ---------------- | 2024-09-17 | ---------------- 1 row …

# 利刃出鞘_Tomcat 核心原理解析(十一)-- Tomcat 附加功能 WebSocket -- 3

利刃出鞘_Tomcat 核心原理解析&#xff08;十一&#xff09;-- Tomcat 附加功能 WebSocket – 3 一、Tomcat专题 - WebSocket - 案例 - OnMessage分析 1、WebSocket DEMO 案例 实现流程分析&#xff1a;OnMessage 分析 2、在项目 dzs168_chat_room 中&#xff0c;在 websocke…

CSP-CCF★★★201903-2二十四点★★★

目录 一、问题描述 二、解答 方法一&#xff1a;穷举法&#xff08;只列举了一部分&#xff09; 方法二&#xff1a;中缀表达式直接求值&#xff0c;两个栈&#xff0c;一个存放数值&#xff0c;一个存放符号 方法三&#xff1a;将中缀表达式转换为后缀来计算注意&#xff…

SpringBoot2:web开发常用功能实现及原理解析-@ControllerAdvice实现全局异常统一处理

文章目录 前言1、工程包结构2、POM依赖3、Java代码 前言 本篇主要针对前后端分离的项目&#xff0c;做的一个统一响应包装、统一异常捕获处理。 在Spring里&#xff0c;我们可以使用ControllerAdvice来声明一些关于controller的全局性的东西&#xff0c;其用法主要有以下三点…

建模杂谈系列256 规则函数化改造

说明 之前尝试用FastAPI来构造规则&#xff0c;碰到的问题是由于请求量过大(TPS > 1000), 从而导致微服务端口资源耗尽。所以现在的point是: 1 如何使用函数来替代微服务(同时要保留使用微服务的优点)2 进一步抽象并规范规则的执行3 等效合并规则的方法 内容 0 机制讨论…

数据中台建设(六)—— 数据开发-提取数据价值

数据开发-提取数据价值 数据开发涉及的产品能力主要包括三部分&#xff1a;离线开发、实时开发和算法开发。 离线开发主要包括离线数据的加工、发布、运维管理&#xff0c;以及数据分析、数据探索、在线查询和及时分析相关工作。实时开发主要涉及数据的实时接入和实时处理。算…

【算法】动态规划—最长回文子序列

思路分析 关于”回文串“的问题&#xff0c;是面试中常见的&#xff0c;本文提升难度&#xff0c;讲一讲”最长回文子序列“问题&#xff0c;题目很好理解&#xff1a; 输入一个字符串 s&#xff0c;请找出 s 中的最长回文子序列长度。 比如输入 s"aecda"&#xff0c…

WSL中使用AMBER GPU串行版

前提是已经安装过wsl 1 在 WSL 2 中启用 NVIDIA CUDA 参考在 WSL 2 上启用 NVIDIA CUDA | Microsoft Learn 注意&#xff1a;勿在 WSL 中安装任何 Linux 显示驱动程序。Windows 显示驱动程序将同时安装本机 Windows 和 WSL 支持的常规驱动程序组件。 2 在WSL2中配置Cuda 不安…

5G毫米波阵列天线仿真——CDF计算(手动AC远场)

之前写过两个关于阵列天线获取CDF的方法&#xff0c;一个通过Realized Gain&#xff0c;一个通过Power Flow&#xff0c; 三个案例中都是3D中直接波束扫描&#xff0c;并没有展示场路结合的情况。这期我们用Power Flow的方法&#xff0c;手动合并AC任务的波束计算CDF。 还是用…

Linux(7)--目录文件的创建、删除、移动、复制、重命名

文章目录 1. 创建目录、文件2. 删除目录、文件3. 移动目录、文件4. 复制目录、文件5. 重命名目录、文件 1. 创建目录、文件 使用mkdir创建目录&#xff1a; 使用touch创建文件&#xff1a; 2. 删除目录、文件 使用rm可以删除文件: 使用rm -f可以强制删除文件&#xff0c;…

C++掉血迷宫

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #include <iostream> #include <string> #include <cstring> using namespace std; enum RBYG {R 1,B 2,Y 4,G 7, }; struct heal {int ix…

Linux权限理解【Shell的理解】【linux权限的概念、管理、切换】【粘滞位理解】

目录 Linux权限理解1.Xshell命令以及运行原理2.linux权限的学习2.1linux权限的切换2.2linux权限的概念2.3linux权限管理2.3.1linux中文件访问者的分类2.3.2文件类型和访问权限(文件属性)2.3.2.1文件类型2.3.2.2文件权限拓展—文件的起始权限 2.3.3文件权限管理2.3.4文件权限的应…

一文搞定WeakHashMap

写在前面 在缓存场景下&#xff0c;由于内存是有限的&#xff0c;不能缓存所有对象&#xff0c;因此就需要一定的删除机制&#xff0c;淘汰掉一些对象。这个时候可能很快就想到了各种Cache数据过期策略&#xff0c;目前也有一些优秀的包提供了功能丰富的Cache&#xff0c;比如…

十八,Spring Boot 整合 MyBatis-Plus 的详细配置

十八&#xff0c;Spring Boot 整合 MyBatis-Plus 的详细配置 文章目录 十八&#xff0c;Spring Boot 整合 MyBatis-Plus 的详细配置1. MyBatis-Plus 的基本介绍2. Spring Boot 整合 MyBatis Plus 的详细配置3. Spring Boot 整合 MyBatis plus 注意事项和细节4. MyBatisx 插件的…

浅谈红外测温技术在变电站运维中的应用

0引言 随着市场经济的繁荣发展&#xff0c;社会对电力的需求持续增长。城市供电网络的规模和用电设备的总量也在不断扩大&#xff0c;这导致城市电力系统中潜在的网络安全隐患日益增多。作为电力系统核心组成部分的变压器&#xff0c;其安全、稳定的工作直接关系到电能的质量和…

总结拓展十:SAP开发计划(上)

第一节 功能开发说明书介绍 1、功能开发的基础分类 报表查询开发单据打印开发功能开发增强开发接口开发 2、屏幕元素介绍 ——程序屏幕是SAP系统与用户之间的桥梁&#xff0c;屏幕由各种不同元素布局组成 示例&#xff1a;选择屏幕界面 单选输入框 多选输入框 设定默认…

静态库 动态库

https://blog.csdn.net/mahoon411/article/details/113565482 库&#xff1a;可执行代码的二进制文件&#xff0c;里面有可以直接使用的函数&#xff0c;变量等&#xff1b;不能单独运行 因为 Linux 和 Win 的链接器、汇编器、编译器的不同&#xff0c;相同代码的库不同 Lin…

k8s介绍及部署

目录 一 Kubernetes 简介及部署方法 1.1 应用部署方式演变 1.2 容器编排应用 1.3 kubernetes 简介 1.4 K8S的设计架构 1.4.1 K8S各个组件用途 1.4.2 K8S 各组件之间的调用关系 1.4.3 K8S 的 常用名词感念 1.4.4 k8S的分层架构 二 K8S集群环境搭建 2.1 k8s中容器的管…

演示:基于WPF自绘的中国省份、城市、区县矢量地图

一、目的&#xff1a;演示一个基于WPF自绘的中国省份、城市、区县矢量地图 二、效果 国 省 市 三、功能 支持实际经纬度显示 支持平移&#xff0c;缩放等功能 显示中国地图 显示各个省份地图 显示各个省份地图&#xff08;包含在表格中&#xff0c;包含缩率图&#xff09; 显…

[数据集][目标检测]疟疾恶性疟原虫物种目标检测数据集VOC+YOLO格式948张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;948 标注数量(xml文件个数)&#xff1a;948 标注数量(txt文件个数)&#xff1a;948 标注类别…