Linux高级编程:网络

news2025/1/19 13:14:42

回顾:

进程间的通信:

同一主机内通信:

        传统的进程间通信方式(管道、信号);

        IPC对象(共享内存,消息队列,信号量集);

不同主机间进程的通信:

IP地址:

        作用:用来标识网络中一台主机的,解决了如何在网络中找到一台主机

        IP地址 == 网络位 + 主机位
        IP地址的分类:  点分十进制(方便人看)   ipv4  712934

 

网关(局域网的门)192.168.0.1         //  ip地址 与 子网掩码(默认网络掩码:255.255.255.0)                                                                   与运算  192.168.0.0(网络号)

设备(路由器)--- 路由(route)--- 网络路径的选择

192.168.0.255 boardcast广播  全发

C类地址最多连接254台主机

端口号:

        编号----16位的数据、2个字节、范围:0~65535

        作用:唯一标识计算机中用于通信的某个进程的

IP + 端口号 --》网络中通信的进程  //地址

源IP + 源端口  《=》目标IP +  目标端口

通信的四元组

网络链接:

  物理层面:

                有线 -- wifi -- 宽带(光纤)--- 光信号

                5G -- 毫米波

  逻辑层面:

                osi标准(open system interconnect)

OSI 模型  ===》开放系统互联模型  ==》分为7层:

7应用层

6表示层          加密解密  gzip

5会话层          网络断开,连接状态,keep-close keep-alive

4传输层tcp      udp  协议  文件    视频,音频  ipx 
3网路层ip        NAT      网际层

2链路层          交 换机  数据的格式化  帧 校验

                     尾|1010 1010|头  --- 帧格式。

1物理层          100Mb/8  10Gbits   100MB 同轴电缆,发送比特流

TCP五层或四层结构

举例:网络的封包和解包

       

每一层都封包协议,因为要保证各个层的功能实现,这是由协议实现的

协议:

IP--》mac地址   //ARP地址解析协议 ,mac地址就是物理地址

mac地址--》IP   // 反向地址协议

IPV4 标准,因为只有32位  不够用了  ----》ipv6  128位可以解决ip地址不够用的问题

TCP/UDP协议:

TCP(Transmission Control Protocal)

        特点:(1.面向连接  2.可靠连读,3.字节流)  //字节流 一个字节一个字节发

通过内部各层特性保证数据正确性

        

socket

1、socket函数接口-系统调用

2、socket是一种特殊的文件,专门用于“网络通信,用于不同主机间进程的通信,相同主机也可以

3、socket是网络通信中,抽象出来的函数接口

基于TCP的模型:

两种常见的网络通信模型:

                1、C/S  client - server   客户端/服务器模型  专有的客户端

                2、B/S  browser - server  浏览器--通用的客户端

tcp通信 步骤

1、进行连接   2、进行通信

     举例

客户端://主动的一方,发起通信请求                          服务器端:

socket      //买了一部手机                                             socket  买了一部手机

bind       (可选)   绑定一个sim卡                              bind       绑定sim卡

connect    拨打电话                                                      listen     待机 -- 来电

write          收发消息                                                     accept    接听电话

read                                                                              write 

close                                                                             read    close

1、socket()

#include <sys/types.h>       
#include <sys/socket.h>

int socket(int domain, int type, int protocol);

        功能:程序向内核提出创建一个基于内存的套接字描述符

        参数:

                @domain  地址族,PF_INET == AF_INET ==>互联网程序

                                                PF_UNIX == AF_UNIX ==>单机程序

                @type     套接字类型:
                                SOCK_STREAM  流式套接字 ===》TCP   
                                SOCK_DGRAM   用户数据报套接字===>UDP
                                SOCK_RAW     原始套接字  ===》IP

                @protocol  protocol 协议 ==》0 表示自动适应应用层协议。

        返回值:成功 返回申请的套接字id   ;失败  -1。

网络接口
    1、sokcet  套接字 ==》BSD socket ==》用于网络通信的一组接口函数。
    2、ip+port 地址+端口===》地址用来识别主机

bzero 

        结构体清零

       #include <strings.h>

       void bzero(void *s, size_t n);

       

inet_addr()   

         将ip地址转换为二进制 并以网络字节序(大端)放置

       #include <sys/socket.h>
       #include <netinet/in.h>
       #include <arpa/inet.h>

        in_addr_t inet_addr(const char *cp);
 

htonl 

       #include <arpa/inet.h>
       uint16_t htons(uint16_t hostshort);     将端口转换为字节序放置

2、bind()

       #include <sys/types.h>         
       #include <sys/socket.h>

        int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);

        功能:如果该函数在服务器端调用,则表示将参数1相关的文件描述符文件与参数2 指定的接口地址关联,用于从该接口接受数据。如果该函数在客户端调用,则表示要将数据从参数1所在的描述符中取出并从参数2所在的接口设备上发送出去。

注意:如果是客户端,则该函数可以省略,由默认接口发送数据。

         参数:      

                @sockfd 之前通过socket函数创建的文件描述符,套接字id
                @my_addr 是物理接口的结构体指针。表示该接口的信息。

                      struct sockaddr      通用地址结构
                     {
                          u_short sa_family;  地址族
                          char sa_data[14];   地址信息
                      };

                      转换成网络地址结构如下:
                      struct _sockaddr_in    ///网络地址结构
                      {
                          u_short           sin_family; 地址族
                          u_short           sin_port;   ///地址端口
                         struct in_addr  sin_addr;   ///地址IP
                          char               sin_zero[8]; 占位
                      };

                      struct in_addr
                      {
                          in_addr_t s_addr;
                      }

                     @socklen_t addrlen: 参数2 的长度。

3、connect()

UDP:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux之线程概念

目录 一、细粒度划分 1、堆区细粒度划分 2、物理内存和可执行程序细粒度划分 3、虚拟地址到物理地址的转化 二、线程的概念 1、基本概念 2、线程的优点 3、线程的缺点 4、线程异常 5、线程用途 三、Linux下的进程和线程 一、细粒度划分 1、堆区细粒度划分 在语言…

【MySQL】索引优化与关联查询优化

数据库调优的几个维度&#xff1a; 索引失效&#xff0c;没有充分用到索引——索引建立关联查询太多JOIN——SQL优化服务器调优以及各个参数设置——调整my.cnf数据过多——分库分表 SQL查询优化的几种方式&#xff1a; 物理查询优化&#xff1a;通过索引以及表连接方式进行…

Day30-Linux基础阶段总复习

Day30-Linux基础阶段总复习 1. 运维人员的三个核心职责&#xff08;了解&#xff09;2. 企业网站和应用的可用性的衡量标准&#xff08;重点&#xff09;2.1 高并发企业业务写入流程图2.2 中小型企业案例 3. Linux系统诞生发展过程中的关键代表人物4. 企业场景如何针对不同的业…

Springboot配置MySQL数据库

Springboot配置MySQL数据库 一、创建springboot项目&#xff0c;并添加如下依赖 <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope> </dependency>二、在applica…

Django框架——路由

上篇文章我们学习了Django框架——请求与响应&#xff0c;这篇文章我们学习Django框架——路由。本次学习过程中使用的项目目录如下图所示&#xff1a; 大家放心&#xff0c;这个是新建的Django项目&#xff0c;还没编写任何代码&#xff0c;这里展示目录是为了大家更好地理解本…

力扣大厂热门面试算法题 - 矩阵

解数独&#xff0c;单词搜索&#xff0c;被围绕的区域。每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.07 可通过leetcode所有测试用例。 目录 37. 解数独 解题思路 完整代码 Python Java 79. 单词搜索 解题思路 完整代码 Python…

金融行业数据安全面临的问题及解决办法

金融行业包括商业银行业务、证券业务、保险业务、基金业务、信托业务等&#xff0c;因此数据类型多种多样&#xff0c;并且数据涉及主体众多&#xff0c;应用场景上较为多样复杂&#xff0c;在数据交换上存在安全、合规、可控、可靠、高效等需求。首先&#xff0c;我们来看一下…

c++初阶------类和对象(六大默认构造函数的揭破)

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

部署YOLOv8模型的实用常见场景

可以的话&#xff0c;GitHub上点个小心心&#xff0c;翻不了墙的xdm&#xff0c;csdn也可以点个赞&#xff0c;谢谢啦 车流量检测&#xff08;开源代码github&#xff09;&#xff1a; test3 meiqisheng/YOLOv8-DeepSORT-Object-Tracking (github.com) 车牌检测&#xff0…

代码随想录算法训练营第11天

20. 有效的括号 方法&#xff1a; 1. 如果 !st.empty() return false2.如果st.top() ! s[i] return false3. 如果 st.empty() return false注意&#xff1a; 以下这种写法 不满足 题目要求的第二点&#xff0c;不能以正确的顺序闭合 if(s[i] st.top()){return true;s…

openssl调试记录

openssl不能直接解密16进制密文&#xff0c;需要把密文转化成base64格式才能解密 调试记录如下&#xff1a;

【必读】产品经理必须要熟练掌握的五类产品管理框架

产品管理从其传统根源已经走过了很长一段路&#xff0c;不断发展以适应现代企业的步伐和需求。随着产品变得更加复杂&#xff0c;用户的需求更加细致&#xff0c;用于指导这些产品的框架需要升级。请阅读本文&#xff0c;深入了解从字面上看改变了产品管理游戏规则的结构。 01.…

越南、泰国发稿案例分析:CloudNEO专家级海外新闻传播矩阵

在东南亚地区&#xff0c;越南和泰国作为经济增长迅速、市场潜力巨大的国家&#xff0c;吸引着越来越多的国际企业进驻和投资。在这个充满机遇和挑战的市场中&#xff0c;有效的新闻传播成为企业赢得市场份额和建立品牌形象的关键一环。CloudNEO作为专业的海外新闻传播服务提供…

事务 失效的八种情况

在某些业务场景下&#xff0c;如果一个请求中&#xff0c;需要同时写入多张表的数据。为了保证操作的原子性&#xff08;要么同时成功&#xff0c;要么同时失败&#xff09;&#xff0c;避免数据不一致的情况&#xff0c;我们一般都会用到 spring 事务。 确实&#xff0c;sprin…

docker-compose Install ONLYOFFICE

ONLYOFFICE 前言 ONLYOFFICE 是一款全面的协作办公软件套件,集成了文档处理、电子表格和演示文稿等功能,为团队提供了无缝协作的工作环境。其功能强大,操作简便,是各种规模和类型的团队的首选工具。 功能介绍 多人协作:ONLYOFFICE 提供实时协作功能,让团队成员可以同时…

【设计模式 04】建造者模式

如果要构建的对象很复杂&#xff0c;那么可以将整个构建过程拆分成多个步骤&#xff0c;并为每一个步骤定义一个抽象的接口。并添加一个指导者用来控制构建产品的顺序和步骤。 Java实现&#xff1a; // 产品类 class Product {private String part1;private String part2;pub…

vue3+ts项目创建 使用npm create vue@latest

npm create vuelatest相关创建代码&#xff1a;

android基础学习

从上面的描述就可以知道&#xff0c;每一个Activity组件都有一个对应的ViewRoot对象、View对象以及WindowManager.LayoutParams对象。这三个对象的对应关系是由WindowManagerImpl类来维护的。具体来说&#xff0c;就是由WindowManagerImpl类的成员变量mRoots、mViews和mParams所…

onnxruntime模型部署(二)C++部署手写数字识别

导出onnx模型 模型链接&#xff1a; 夸克网盘链接 百度网盘链接&#xff0c;提取码&#xff1a;8fkb 环境配置 OpenCV配置 自行百度 onnxruntime C版配置 有两种方法&#xff0c;一种是下载源码自己编译&#xff0c;还有一种是使用预编译好的文件。众说周知&#xff0c;…

Vue深度教程

一、Vue简介 1.简介 2.快速上手 二、基础 1.创建一个Vue应用 2.模板语法 3.响应式基础 4.计算属性 5.Class与 Style绑定 6.条件渲染 7.列表渲染 8.事件处理 9.表单输入绑定 10.生命周期钩子 11.侦听器 12.模板引用 13.组件基础 三、深入组件 1.组件注册 2.Props 3.组件事件 …