Linux网络编程:网络基础
文章目录:
1.协议
2.锁
3.网络层次模型
4.以太网帧和ARP协议
5.IP协议
6.UDP协议
7.TCP协议
8.BS模式和CS模式
9.网络套接字(socket)
10.网络字节序
11.IP地址转换函数
12.sockaddr地址结构
学习Linux的网络编程原则上基于:Linux的系统编程 和 Linux基础的Shell编程(第十章);除此之外还包含了计算机网络的知识
Linux基础shell编程——>Linux 系统编程——>Linux 网络编程
1.协议
互联网协议(Internet Protocol Suite)
什么是协议:从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则典型协议传输层 常见协议有TCP/UDP协议应用层 常见的协议有HTTP协议,FTP协议网络层 常见协议有IP协议、ICMP协议、IGMP协议网络接口层 常见协议有ARP协议、RARP协议TCP传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议UDP用户数据报协议(User Datagram Protocol)是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务HTTP超文本传输协议(Hyper Text Transfer Protocol)是互联网上应用最为广泛的一种网络协议FTP文件传输协议(File Transfer Protocol)IP协议是因特网互联协议(Internet Protocol)ICMP协议是Internet控制报文协议(Internet Control Message Protocol)它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息IGMP协议是 Internet 组管理协议(Internet Group Management Protocol),是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间ARP协议是正向地址解析协议(Address Resolution Protocol),通过已知的IP,寻找对应主机的MAC地址RARP是反向地址转换协议,通过MAC地址确定IP地址
2.锁
如何避免死锁:保证资源的获取顺序,要求每个线程获取资源的顺序一致当得不到已有的资源时,放弃已经获取的资源,等待读写锁:当读次数远大于写次数时写独占,读共享写锁优先级高锁只有一把条件变量指明了共享数据区值不值得访问(有无空位或产品),锁是访问共享数据区的通行证信号量可以看作进化版互斥锁:1-->N,保证同步的同时,提高了并发sem_wait:给信号量加锁,sem–,locksem_post:给信号量解锁,sem++,unlock,同时唤醒阻塞在该信号上的线程
3.网络层次模型
物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)这一层的数据叫做比特数据链路层:定义了如何让格式化数据以帧为单位进行传输,以及如何让控制对物理介质的访问这一层通常还提供错误检测和纠正,以确保数据的可靠传输如:串口通信中使用到的115200、8、N、1网络层:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层传输层:定义了一些传输数据的协议和端口号(WWW端口80等)如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据)UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)表示层:可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC)而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换应用层:是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务
OSI七层模型结构(我的记忆方法_巫术网传会报应): 物、数、网、传、会、表、应TCP/IP 4层模型结构:网(链路层/网络接口层)、网、传、应应用层:http、ftp、nfs、ssh、telnet。。。传输层:TCP、UDP网络层:IP、ICMP、IGMP链路层:以太网帧协议、ARP网络传输数据封装流程
数据没有封装之前,是不能在网络中传递。数据-》应用层-》传输层-》网络层-》链路层 --- 网络环境只有应用层协议在用户态可见,往下的都处在内核中(什么是内核?)
4.以太网帧和ARP协议
以太网帧协议:根据mac地址,完成数据包传输以太网帧中的目的地址和源地址是指MAC地址ARP协议(数据报格式):根据 Ip 地址获取 mac 地址
5.IP协议
版本: IPv4、IPv6 -- 4位TTL: time to live 。 设置数据包在路由节点中的跳转上限。每经过一个路由节点,该值-1, 减为0的路由,有义务将该数据包丢弃源IP: 32位。--- 4字节 192.168.1.108 --- 点分十进制 IP地址(string) --- 二进制 目的IP:32位。--- 4字节
6.UDP协议
源端口号 目的端口号序号确认序号数据偏移 保留 URG/ACK/PSH/RST/SYN/FIN 窗口检验和 紧急指针选项和填充(从这开始往上是首部)数据IP地址:可以在网络环境中,唯一标识一台主机端口号:可以网络的一台主机上,唯一标识一个进程多数应用程序使用5000以下的端口(80端口:http协议)ip地址+端口号:可以在网络环境中,唯一标识一个进程
7.TCP协议
16位:源端口号 16位:目的端口号32序号32确认序号4位首部长度 保留6位 URG/ACK/PSH/RST/SYN/FIN 16位窗口大小16位检验和 16位紧急指针选项(从这开始往上是报头)数据
8.BS模式和CS模式
C/S:Client/Server B/S:Browser/Server优点: 缓存大量数据、协议选择灵活、速度快 安全性、跨平台、开发工作量较小缺点: 安全性差、开发工作量大、跨平台难 不能缓存大量数据、必须严格遵守http协议
9.网络套接字(socket)
一个文件描述符指向一个套接字(该套接字内部由内核借助两个缓冲区实现)在通信过程中, 套接字一定是成对出现的
10.网络字节序
小端法:(pc本地存储) 高位存高地址。地位存低地址。 int a = 0x12345678 大端法:(网络存储) 高位存低地址。地位存高地址。htonl --> 本地--》 网络 (IP) 192.168.1.11 --> string --> atoi --> int --> htonl --> 网络字节序 htons --> 本地--》 网络 (port) ntohl --> 网络--》 本地(IP) ntohs --> 网络--》 本地(Port)用库函数做网络字节序和主机字节序的转换
#include<arpa/inet.h> uint32_t htonl(uint32_t hostlong); //主要针对IP uint16_t htons(uint16_t hostshort); //主要针对port uint32_t ntohl(uint32_t netlong); uint16_t ntohs(uint16_t netshort);
11.IP地址转换函数
由于如
192.168.45.2这种的IP地址为点分十进制表示,需要转化为uint32_t型,有现成的函数(IPv4和IPv6都可以转换)int inet_pton(int af, const char *src, void *dst); 本地字节序(string IP) ---> 网络字节序af:AF_INET、AF_INET6src:传入,IP地址(点分十进制)dst:传出,转换后的 网络字节序的 IP地址。 返回值:成功: 1异常: 0, 说明src指向的不是一个有效的ip地址。失败:-1const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); 网络字节序 ---> 本地字节序(string IP)af:AF_INET、AF_INET6src: 网络字节序IP地址dst:本地字节序(string IP)size: dst 的大小。返回值: 成功:dst、失败:NULL
12.sockaddr地址结构
IP + port --> 在网络环境中唯一标识一个进程
struct sockaddr_in addr;addr.sin_family = AF_INET/AF_INET6 man 7 ipaddr.sin_port = htons(9527);int dst;inet_pton(AF_INET, "192.157.22.45", (void *)&dst);addr.sin_addr.s_addr = dst;【*】addr.sin_addr.s_addr = htonl(INADDR_ANY); 取出系统中有效的任意IP地址。二进制类型。bind(fd, (struct sockaddr *)&addr, size);举例
/*相初始化*/ addr.sin_family=AF_INET/AF_INET6; addr.sin_port=htons(9527); //端口号为short类型(16bit)int dst; inet_pton(AF_INET,"192.168.10.2",(void*)&dst); addr.sin_addr.s_addr=dst; /*或者采取下面的方法*/ addr.sin_addr.s_addr=htonl(INADDR_ANY) //取出系统中任意有效的IP地址/*相关结构体定义,在man 7 ip*/ struct sockaddr_in{sa_family_t sin_family;in_port_t sin_port;struct in_addr sin_addr; }; struct in_addr{uint32_t s_addr; }; struct sockaddr_in addr;int bind(int sockfd,const struct sockaddr* addr,socklen_t addrlen); /*struct sockaddr是早已废弃的数据结构,已不再使用,用新的时注意强转一下*/ int ret = bind(sockfd,(struct sockaddr*)&addr,size);
相关文章:
Linux网络编程:网络基础
文章目录: 1.协议 2.锁 3.网络层次模型 4.以太网帧和ARP协议 5.IP协议 6.UDP协议 7.TCP协议 8.BS模式和CS模式 9.网络套接字(socket) 10.网络字节序 11.IP地址转换函数 12.sockaddr地址结构 学习Linux的网络编程原则上基于:Linux的系统编程…...
3D沉浸式旅游网站开发案例复盘【Three.js】
Plongez dans Lyon网站终于上线了。 我们与 Danka 团队和 Nico Icecream 共同努力,打造了一个令我们特别自豪的流畅的沉浸式网站。 这个网站是专为 ONLYON Tourism 和会议而建,旨在展示里昂最具标志性的活动场所。观看简短的介绍视频后,用户…...
IO的几个模型
I/O模型名词介绍 说到I/O模型,都会牵扯到同步、异步、阻塞、非阻塞这几个词,以下讲解这几个词的概念。 阻塞和非阻塞 阻塞和非阻塞指的是一直等还是可以去做其他事。 阻塞(blocking):调用结果返回之前,…...
中路对线发现正在攻防演练中投毒的红队大佬
背景 2023年8月14日晚,墨菲安全实验室发布《首起针对国内金融企业的开源组件投毒攻击事件》NPM投毒事件分析文章,紧接着我们在8月17日监控到一个新的npm投毒组件包 hreport-preview,该投毒组件用来下载木马文件的域名地址竟然是 img.murphys…...
【LINUX相关】生成随机数(srand、/dev/random 和 /dev/urandom )
目录 一、问题背景二、修改方法2.1 修改种子2.2 使用linux中的 /dev/urandom 生成随机数 三、/dev/random 和 /dev/urandom 的原理3.1 参考连接3.2 重难点总结3.2.1 生成随机数的原理3.2.2 随机数生成器的结构3.2.3 二者的区别和选择 四、在代码的使用方法 一、问题背景 在一个…...
spark使用心得
spark入门 启停spark sbin/start-all.shsbin/stop-all.shspark-shell 进入spark/bin目录,执行: ./spark-shell 输出中有这么一行: Spark context Web UI available at http://xx.xx.xx.188:4040意味着我们可以从web页面查看spark的运行情…...
什么是边车
名词和概念定义 Sidecar:边车。微服务中数据平面的进程,负责转发应用、服务请求,并支持限流、熔断、负载均衡等特性。 Control-plane: 控制平面。微服务的配置中心,负责配置下发、数据搜集、服务发现等功能。 应用: 应用是指服务…...
vue项目打包成exe文件
1. 获取electron-quick-start demo git clone https://github.com/electron/electron-quick-start2. 安装依赖包 npm install 或 npm i // 安装依赖时可能会遇到node版本的问题,需要切换node版本的可以先看下nvm,简单易操作3. 打包项目(需要…...
基于MFCC特征提取和GMM训练的语音信号识别matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 MFCC特征提取 4.2 Gaussian Mixture Model(GMM) 4.3. 实现过程 4.4 应用领域 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3…...
client-go实战之十二:选主(leader-election)
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是《client-go实战》系列的第十二篇,又有一个精彩的知识点在本章呈现:选主(leader-election)在解释什么是选主之前&…...
2023年即将推出的CSS特性对你影响大不大?
Google开发者大会每年都会提出有关于 Web UI 和 CSS 方面的新特性,今年又上新了许多新功能,今天就从中找出了影响最大的几个功能给大家介绍一下 :has :has() 可以通过检查父元素是否包含特定子元素或这些子元素是否处于特定状态来改变样式,也…...
opencv实战项目-停车位计数
手势识别系列文章目录 手势识别是一种人机交互技术,通过识别人的手势动作,从而实现对计算机、智能手机、智能电视等设备的操作和控制。 1. opencv实现手部追踪(定位手部关键点) 2.opencv实战项目 实现手势跟踪并返回位置信息&a…...
NLP文本匹配任务Text Matching [无监督训练]:SimCSE、ESimCSE、DiffCSE 项目实践
NLP文本匹配任务Text Matching [无监督训练]:SimCSE、ESimCSE、DiffCSE 项目实践 文本匹配多用于计算两个文本之间的相似度,该示例会基于 ESimCSE 实现一个无监督的文本匹配模型的训练流程。文本匹配多用于计算两段「自然文本」之间的「相似度」。 例如…...
复习vue3,简简单单记录
这里的知识是结合视频以及其他文章一起学习,仅用于个人复习记录 ref 和reactive ref 用于基本类型 reactive 用于引用类型 如果使用ref 传递对象,修改值时候需要写为obj.value.attr 方式修改属性值 如果使用reactive 处理对象,直接obj.att…...
【自用】云服务器 docker 环境下 HomeAssistant 安装 HACS 教程
一、进入 docker 中的 HomeAssistant 1.查找 HomeAssistant 的 CONTAINER ID 连接上云服务器(宿主机)后,终端内进入 root ,输入: docker ps找到了 docker 的 container ID 2.config HomeAssistant 输入下面的命令&…...
使用dockerfile手动构建JDK11镜像运行容器并校验
Docker官方维护镜像的公共仓库网站 Docker Hub 国内无法访问了,大部分镜像无法下载,准备逐步构建自己的镜像库。【转载aliyun官方-容器镜像服务 ACR】Docker常见问题 阿里云容器镜像服务ACR(Alibaba Cloud Container Registry)是面…...
编程语言学习笔记-架构师和工程师的区别,PHP架构师之路
🏆作者简介,黑夜开发者,全栈领域新星创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责…...
Streamlit 讲解专栏(十):数据可视化-图表绘制详解(上)
文章目录 1 前言2 st.line_chart:绘制线状图3 st.area_chart:绘制面积图4 st.bar_chart:绘制柱状图5 st.pyplot:绘制自定义图表6 结语 1 前言 在数据可视化的世界中,绘制清晰、易于理解的图表是非常关键的。Streamlit…...
其他行业跳槽转入计算机领域简单看法
其他行业跳槽转入计算机领域简单看法 本人选择从以下几个方向谈谈自己的想法和观点。 先看一下总体图,下面会详细分析 如何规划才能实现转码 自我评估和目标设定:首先,你需要评估自己的技能和兴趣,确定你希望在计算机领域从事…...
Unity制作一个简单的登入注册页面
1.创建Canvas组件 首先我们创建一个Canvas画布,我们再在Canvas画布底下创建一个空物体,取名为Resgister。把空物体的锚点设置为全屏撑开。 2.我们在Resgister空物体底下创建一个Image组件,改名为bg。我们也把它 的锚点设置为全屏撑开状态。接…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

