Linux网络编程

网络:不同主机,进程间通信

目的

       1, 解决主机之间的硬件层面的互联互通

        2,解决主机间软件层面的互联互通

        

IP地址:区分不同主机(软件地址)

MAC地址:硬件地址

端口号:区分同一主机上的不同进程

协议:定义的网络标准

网络协议

1,OSI七层模型

        OSI:开放系统互联模型

应用层:要传输的数据信息,如文件传输,电子邮件等

表示层:数据加密,解密操作,压缩,解压缩

会话层:建立数据传输通道

传输层:传输的方式UDP  TCP 端口号

网络层:实现数据路由 路由器ip

数据链路层:封装成帧,点对点通信(局域网内通信),差错检测  交换机   ARP

物理层:定义物理设备标准,比如网线,光纤等传输介质   比特流bit  0  1

2,TCP/IP模型(五层模型)

       应用层:

                HTTP:超文本传输协议

                HTTPS:超文本传输协议

                FTP:文件传输协议

                TFTP:简单文件传输协议

                MQTT:消息队列遥测传输协议(物联网协议)

        传输层:

                UDP:用户数据报协议

                TCP:传输控制协议

                DNS:域名解析协议(域名和ip地址转换)

        网络层:

                IP协议:IPv4,IPv6

                网络接口层

                        ARP:地址解析协议

                IPv4: 32位                 192.168.1.23 ---》点分十进制

                IPv6: 128位:解决IP地址不够用问题


                        ipv4的:

                        网络位:子网掩码全为1的位是ip地址的网络位

                        主机位:子网掩码全为0的位是ip地址的主机位


                  端口号:16位的数据 0~65535,用于区分数据包属于哪个进程

                  

                  

        数据链路层:

        物理层:

                                                        



网络配置

        1,虚拟机---》设置----》网络适配器---》桥接模式

         2,编辑----》虚拟网络编辑器----》更改设置 ---》VMnt0----》桥接至---》PC正在上网的网卡----》应用---》确定

        3,配置网络文件

        打开网络配置文件:

        sudo vim /etc/network/interfaces


 auto loiface lo inet loopback
auto ens33iface ens33 inet dhcp
重启网络服务
sudo /etc/init.d/networking resta1t

        4,网络相关命令

        ping IP/域名

      www.baidu.com

        ifconfig:查看当前主机ip地址



网络协议:

传输层协议:

1.UDP(User Datagram Protocol)协议:用户数据报协议

User Datagram Protocol

2,网络编程框架

    B/S模型:browser/server(浏览器/服务器)通用的客户端(浏览器)----专业的服务器

    C/S模型:client/server(客户端/服务端)专用的客户端-----专用的服务器

3,UDP编码

 client / server

网络套接字:文件描述符,代表了底层封装出来的用于网络通信收发数据的端口。

       UDP特点:

      1,尽最大努力交付(不安全,不可靠(丢包,乱序))

      2,无连接

       3,面对数据报

       4,机制简单,传输效率高

        应用场景:

                要求实时性高,但是允许数据丢失(eg:直播)

4,函数接口

int socket(int domain, int type, int protocol);      ***
功能:创建一个通信套接字

参数:

        domain:IP层协议族

                        AF_INET:IPv4

                        AF_INET6:IPv6

        type:传输层使用的协议类型

        SOCK_DGRAM:        UDP

        SOCK_STREAM:        TCP        

        protocol: 0  按照默认协议方式

        成功:返回套接字

        失败:返回-1

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

功能:向套接字发送数据

参数

        sockfd:套接字

        buf:要发送的数据的首地址

        len:要打送的数据的大小

        flags:0   默认方式发送

        dest_addr:保存接收方地址信息的指针

        socklen_t addrlen:接收方地址变量的大小

返回值

        成功:实际发送的字节数

        失败:-1

网络字节序:大端

主机字节序:小端

uint32 thtonl(uint32 t hostlong);主机转网络

uint16 t htons(uint16 t hostshort);主机转网络

uint32 t ntohl(uint32 t netlong);网络转主机

uint16 t ntohs(uint16 t netshort);网络转主机

bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen) 
功能:绑定当前主机的ip和进程的端口 
参数: sockfd:套接字
        addr:自己信息的地址
        addrlen:地址信息的大小
 
返回值:成功:0

              失败:-1 

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                        struct sockaddr *src_addr, socklen_t *addrlen);

功能:从套接字接收数据

参数:
        sockfd:套接宁

        buf:存储接收到数据的位置的首地址

        len:期待接收到的字节数

        flags:默认方式:0

        src addr:送发地址信息的首地址

返回值:

        成功:实际接收到的字节数

        失败: -1

2,TCP  :传输控制协议

UDPTCP
面向数据报面对数据流(流式套接字)

不安全不可靠

(尽最大努力交付)

安全可靠的传输协议
无连接建立连接

三次握手:TCP建立连接时,需要进行三次握手,确保收发数据前,双方都已准备就绪

四次挥手:TCP断开连接时,需要进行四次挥手,从而确保通信双方都已收发数据结束

TCP编程:
        C/S模型:

                        

  ssize_t recv(int sockfd, void *buf, size_t len, int flags);
功能:从TCP套接字接收数据

参数

        sockfd:套接字

        buf:保存接受数据内容的首地址

        len:期待接收到的字节数

        flags:0:默认方式

返回值

        成功:实际收到的字节数

        失败:返回-1

        0:当发送端套接字关闭时,recv将不在阻塞,返回0;

int listen(int sockfd, int backlog);

功能:监听套接字

参数

        sockfd:监听套接字

        backlog:最多允许同时访问的客户端个数

返回值:

        成功 : 0

        失败: -1       

        

  int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
功能:接收建立三次握手的客户端并产生与之通信的套接字

参数:

        sockfd:监听套接字

        addr:保存客户端地址信息的变量指针

        addrlen:客户端地址大小的变量指针

返回值

        成功:返回通讯套接字

        失败:-1

HTTP协议:超文本传输协议

万维网www:大规模的联机式的信息储存所  英文名 web(服务器)

1,万维网服务器如何标记万维网文档?----->url:统一资源定位符

2,万维网客户端和万维网服务器如何通信?------>http:超文本传输协议

3,万维网客户端如何显示数据?------>heml:超文本标记语言

URL:

        

eg  :    https://mp.csdn.net/mp_blog/creation/editor/145919630?spm=1001.2014.3001.45

           https://www.baidu.com/------>主页

应用层: 

HTTP协议:浏览器与服务器直接的通信标准

端口号:80

传输层:tcp协议

2,HTTP报文格式:

连接方式:

Connextion:keep-alive

http的(tcp)连接方式

keep-alive:长连接,服务器不会立马断开,会等待一段实际断开

close:短链接,服务器在发送完数据的时候立马断开

(记上3~4个方法)



单循环服务器:服务器同一时刻只能相应一个客户端的请求

并发服务器:服务器同一时刻可以相应多个客户端的请求

UDP:无连接

TCP:有连接

构建TCP并发服务器:

让TCP服务端具备同时响应多个客户端的能力。

1多进程

        资源消耗大,同资源平台下,并发量小

2多线程

        创建线程,进程比较耗时

3,线程池

        提前预创建大量线程,避免任务执行过程中创建线程的耗时问题

4,IO多路复用

        在不创建新的进程和线程的前提下,可以在一个进程中

        同时检测多个IO(文件描述符fd/sockfd/connfd)

        

阻塞IO:read,recv,fgets,recvform

IO多路复用(转接):

在不创建新的进程和线程的前提下,可以在一个进程中同时检测多个IO

(文件描述符fd/sockfd/connfd)

优势:节省资源

不足:不利于处理比较耗时,延时比较长的任务

1,创建文件描述符集合

2,将关注的文件描述符加入到集合中

3,等待IO事件到达(调取函数)

4,根据不同的IO事件处理不同的任务

select:实现IO多路复用

 int select(int nfds, fd_set *readfds, fd_set *writefds,
                  fd_set *exceptfds, struct timeval *timeout);

功能:阻塞等待IO事件,返回事件结果

参数:

        nfds:关注的最大文件描述符+1

        readfds:文件描述符读事件集合表

        writefds:写事件集合表

        exceptfds:其他事件集合表

        time out :超时时间(不设置超时则置为空NULL)

返回值

        成功: 返回到达的事件个数

        失败:-1

        返回 0:超时时间到达但没有IO事件到达

       void FD_CLR(int fd, fd_set *set);
       int  FD_ISSET(int fd, fd_set *set);
       void FD_SET(int fd, fd_set *set);
       void FD_ZERO(fd_set *set);
 


​​​select不足之处

1,使用位图管理文件描述符,最多允许同时检测1024个文件描述符(有上限)

2,文件描述符集合在应用层创建,需要实现应用层和内核层的反复拷贝

3,需要应用层对集合表进行遍历,寻找到达的事件

4,只能工作在水平触发模式(低速模式),不能工作在边沿触发模式(高速模式)

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

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

相关文章

【JavaScript】07-APIs - DOM + BOM

本文目前介绍JS中的API的知识点,操作案例后续补充。 目录 1. web API基本认知 2. API 作用和分类 2.1 DOM 2.1.1 DOM树 2.1.2 DOM对象 2.1.2.1 操作DOM对象 ① 选中这个标签后才能操作 1. 选择匹配的第一个元素 2. 选择多个元素 3. 获取1个可直接修改 4…

postgresql

作者本人也搭建了一个docker镜像加速器,需要的朋友随时联系作者,镜像加速嘎嘎快,快速解决docker镜像拉不下的问题,文章最后带有作者wx,先好好学习吧。 一:PostgreSQL数据库 1.1:PostgreSQL介绍和…

推荐几款优秀的PDF转电子画册的软件

当然可以!以下是几款优秀的PDF转电子画册的软件推荐,内容简洁易懂,这些软件都具有易用性和互动性,适合不同需求的用户使用。​ ❶ FLBOOK|在线创作平台 支持PDF直接导入生成仿真翻页电子书。提供15主题模板与字体库&a…

Spring Boot使用JDBC /JPA访问达梦数据库

Spring Boot 是一个广泛使用的 Java 框架,用于快速构建基于 Spring 的应用程序。对于达梦数据库(DMDB)的支持,Spring Boot 本身并没有直接内置对达梦数据库的集成,但你可以通过一些配置和依赖来支持达梦数据库。 以下…

2025牛客寒假算法基础集训营6

A.复制鸡 思路&#xff1a;比较简单&#xff0c;略。 void solve() {int n, m, k;cin >> n;int last -1, ans 0;for (int i 0; i<n; i){int x;cin >> x;if (x ! last){ans;}last x;}cout << ans << endl; } B.好伙计猜拳 思路&#xff1a;这…

记录排查服务器CPU负载过高

1.top 命令查看cpu占比过高的进程id 这里是 6 2. 查看进程中占用CPU过高的线程 id 这里是9 top -H -p 6 ps -mp 6 -o THREAD,tid,time 使用jstack 工具 产看进程的日志 需要线程id转换成16进制 jstack 6 | grep “0x9” 4.jstack 6 可以看进程的详细日志 查看日志发现是 垃圾回…

vscode离线配置远程服务器

目录 一、前提 二、方法 2.1 查看vscode的commit_id 2.2 下载linux服务器安装包 2.3 安装包上传到远程服务器&#xff0c;并进行文件解压缩 三、常见错误 Failed to set up socket for dynamic port forward to remote port&#xff08;vscode报错解决方法&#xff09;-C…

Spark(5)host配置

&#xff08;一.)host配置的作用&#xff1a; hosts 文件是一个本地的文本文件&#xff0c;它的作用是将主机名映射到对应的 IP 地址&#xff0c;在 DNS&#xff08;域名系统&#xff09;解析之前&#xff0c;系统会先查询 hosts 文件来确定目标主机的 IP 地址。 &#xff08;二…

CInternetToolbar::_CommonHandleFileSysChange函数分析之CReBar::_IDToIndex函数的作用

第一部分&#xff1a; // IMPORTANT: dont change the value of anything between CBIDX_FIRST and CBIDX_LAST. // CInternetToolbar::_LoadUpgradeSettings assumes these values havent changed from // version to version. #define CBIDX_MENU 1 …

ZYNQ-PL学习实践(五)IP核之FIFO

ZYNQ-PL学习实践&#xff08;四&#xff09;IP核之FIFO&#xff09; 1 概述2 程序2.1 FIFO IP核2.2 写FIFO模块2.3 读FIFO模块2.4 顶层例化模块 3 仿真总结 1 概述 FIFO在fpga应用过程相当于一个先进先出的缓冲器&#xff0c;跨时钟域传输信号传递&#xff0c;采用顺序写入数据…

AI优化SEO关键词精准定位

内容概要 数字营销领域正经历由人工智能驱动的范式革新&#xff0c;尤其在SEO关键词优化层面呈现出颠覆性变革。基于机器学习的语义分析引擎能够对海量搜索数据进行意图解码&#xff0c;通过自然语言处理技术剥离出用户搜索行为背后的真实需求。不同于传统依赖静态词库的优化方…

PGlite:浏览器中运行的PostgreSQL

PGlite 是一款基于 WebAssembly&#xff08;WASM&#xff09;构建的轻量级 PostgreSQL 数据库引擎&#xff0c;旨在简化开发者在浏览器、Node.js、Bun 或 Deno 环境中运行 PostgreSQL。PGlite 无需复杂的安装或配置&#xff0c;特别适合开发测试、本地化应用及快速原型设计。 一…

【Hudi-SQL DDL创建表语法】

CREATE TABLE 命令功能 CREATE TABLE命令通过指定带有表属性的字段列表来创建Hudi Table。 命令格式 CREATE TABLE [ IF NOT EXISTS] [database_name.]table_name[ (columnTypeList)]USING hudi[ COMMENT table_comment ][ LOCATION location_path ][ OPTIONS (options_lis…

系统架构评估方法-ATAM方法

架构权衡分析方法(Architecture Tradeoff Analysis Method,ATAM) 是在SAAM的基础上 发展起来的&#xff0c;主要针对性能、实用性、安全性和可修改性&#xff0c;在系统开发之前&#xff0c;对这些质量属性 进行评价和折中。 (1)特定目标。 ATAM的目标是在考虑多个相互影响的质…

DeepSeek开源Day4:DualPipeEPLB技术详解

2 月 24 日&#xff0c;DeepSeek 启动 “开源周”&#xff0c;第四个开源的代码库为 DualPipe 与 EPLB&#xff08;一下发布了两个&#xff09;。DualPipe 与 EPLB 依然使用了大量与 Hopper 架构绑定的技术。 DualPipe 是由 DeepSeek-AI 团队开发的一种双向流水线并行通信算法&…

推荐算法和推荐系统入门第一趴

以下是推荐系统技术总结的架构梳理和建议表达思路&#xff1a; 从原理到生产环境&#xff1a;推荐系统核心技术与实战代码解析 一、推荐算法的演进图谱 传统算法三剑客 ![推荐系统算法分类示意图] &#xff08;使用Mermaid绘制算法分类关系图&#xff0c;清晰展示技术演进&am…

Cursor+Claude3.7实现从原型到app开发

最近在X上看到了一些人在用Claude 3.7 Sonnet生成 app原型图的尝试&#xff0c;受到启发&#xff0c;发现这么先生成不同界面的原型图再让Cursor基于原型图开发app会是很好的尝试。尤其是&#xff0c;你也可以不两步直接生成&#xff0c;而是在过程中更可视化地思考你要生产的原…

Flink深入浅出之01:应用场景、基本架构、部署模式

Flink 1️⃣ 一 、知识要点 &#x1f4d6; 1. Flink简介 Apache Flink — Stateful Computations over Data StreamsApache Flink 是一个分布式大数据处理引擎&#xff0c;可对有界数据流和无界数据流进行有状态的计算。Flink 能在所有常见集群环境中运行&#xff0c;并能以…

在线教育网站项目第二步 :学习roncoo-education,服务器为ubuntu22.04.05

一、说明 前端技术体系&#xff1a;Vue3 Nuxt3 Vite5 Vue-Router Element-Plus Pinia Axios 后端技术体系&#xff1a;Spring Cloud Alibaba2021 MySQL8 Nacos Seata Mybatis Druid redis 后端系统&#xff1a;roncoo-education&#xff08;核心框架&#xff1a;S…

JavaWeb6、Servlet

6.1Servlet简介 Servlet就是sun公司开发动态web的一门技术 sun公司在这些API中提供一个接口叫做Servlet&#xff0c;如果想开发一个Servlet程序&#xff0c;只需要完成两个小步骤&#xff1a; 编写一个类&#xff0c;实现Servlet接口 把开发好的Java类部署到web服务器中 把…