Linux高级编程:网络

回顾:

进程间的通信:

同一主机内通信:

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

        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.rhkb.cn/news/270203.html

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

相关文章

C++ 链表OJ

目录 1、2. 两数相加 2、24. 两两交换链表中的节点 3、143. 重排链表 4、23. 合并 K 个升序链表 5、25. K 个一组翻转链表 解决链表题目常用方法&#xff1a; 1、画图 2、引入虚拟"头”结点 便于处理边界情况方便我们对链表操作 3、大胆定义变量&#xff0c;减少连接…

STM32CubeMX软件界面花屏,混乱的解决方案。

添加系统环境变量:J2D_D3D 值:false 即可解决。

MySQL:一行记录如何

1、表空间文件结构 表空间由段「segment」、区「extent」、页「page」、行「row」组成&#xff0c;InnoDB存储引擎的逻辑存储结构大致如下图&#xff1a; 行 数据库表中的记录都是按「行」进行存放的&#xff0c;每行记录根据不同的行格式&#xff0c;有不同的存储结构。 页…

机器学习中类别不平衡问题的解决方案

类别不平衡问题 解决方案简单方法收集数据调整权重阈值移动 数据层面欠采样过采样采样方法的优劣 算法层面代价敏感集成学习&#xff1a;EasyEnsemble 总结 类别不平衡&#xff08;class-imbalance&#xff09;就是指分类任务中不同类别的训练样例数目差别很大的情况 解决方案…

信呼OA普通用户权限getshell方法

0x01 前言 信呼OA是一款开源的OA系统&#xff0c;面向社会免费提供学习研究使用&#xff0c;采用PHP语言编写&#xff0c;搭建简单方便&#xff0c;在中小企业中具有较大的客户使用量。从公开的资产治理平台中匹配到目前互联中有超过1W的客户使用案例。 信呼OA目前最新的版本是…

码住!微信自动回复的实现方式

对于很多企业和个人来说&#xff0c;如何高效地回复微信客户消息是一个非常重要的问题。在这样的需求下&#xff0c;使用微信管理系统的机器人自动回复功能成为了一种不错的选择。 1、自动通过好友 当有大量的好友请求时&#xff0c;手动处理好友申请会变得非常繁琐。而微信管…

C++max函数的使用案例20个

文章目录 1. **基本用法&#xff1a;**2. **比较浮点数&#xff1a;**3. **比较字符串&#xff1a;**4. **使用自定义比较函数&#xff1a;**5. **比较容器中的元素&#xff1a;**6. **使用std::initializer_list&#xff1a;**7. **变长参数版本&#xff08;C11及以上&#xf…

Elasticsearch搜索引擎

目录 初识elasticsearch 了解ES 什么是elasticsearch elasticsearch的发展 搜索引擎技术排名&#xff1a; 总结 倒排索引 正向索引和倒排索引 正向索引 倒排索引 总结 es的一些概念 文档 索引 概念对比 架构 总结 安装es&#xff0c;kibana 安装es 安装kiba…

Redis的三种集群模式(图解)

主从复制模式 一个主节点和多个从节点。主节点提供写入和读取功能&#xff0c;但是从属节点只提供读取功能。 主从复制的数据同步过程如下&#xff1a; &#xff08;1&#xff09;首先主节点启动&#xff0c;然后从属节点启动&#xff0c;从属节点会连接主节点并发送SYNC命令以…

Android多线程实现方式及并发与同步,Android面试题汇总

一. 开发背景 想要成为一名优秀的Android开发&#xff0c;你需要一份完备的知识体系&#xff0c;在这里&#xff0c;让我们一起成长为自己所想的那样。 我们的项目需要开发一款智能硬件。它由 Web 后台发送指令到一款桌面端应用程序&#xff0c;再由桌面程序来控制不同的硬件设…

python 蓝桥杯填空题

文章目录 字母数判断列名&#xff08;进制问题&#xff09;特殊日期大乘积星期几 字母数 由于是填空题&#xff0c;那么寻找的话&#xff0c;就直接让每一个位置都是A,通过计算看看是不是结果大于2022即可 判断列名&#xff08;进制问题&#xff09; 这道题目&#xff0c;我们可…

Claude 3家族惊艳亮相:AI领域掀起新浪潮,GPT-4面临强劲挑战

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-agd7RSCGMblYxo85 {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

chatgpt-3的文章生成器有哪些?可以批量生成文章的生成器

GPT-3&#xff08;Generative Pre-trained Transformer 3&#xff09;作为人工智能领域的一项重大突破&#xff0c;开启了新一代的文本生成技术。同时市面上也涌现出了一些GPT-3文章生成器&#xff0c;为用户提供了快速、高效地生成各种类型文章的工具。本文将介绍一些中国的GP…

[BUG]vscode插件live server无法自动打开浏览器

问题描述&#xff1a; 点了open with live server但是浏览器没有自动跳出来 http://127.0.0.1:5500/里面是有东西的 解决方法&#xff1a; 配置环境变量&#xff0c;在path中添加program files

2023天津公租房网上登记流程图,注册到信息填写

2023年天津市公共租赁住房网上登记流程图 小编为大家整理了天津市公共租赁住房网上登记流程&#xff0c;从登记到填写信息。 想要体验的朋友请看一下。 申请天津公共租赁住房时拒绝申报家庭情况会怎样&#xff1f; 天津市住房保障家庭在享受住房保障期间&#xff0c;如在应申…

闰年导致的哪些 Bug

每次闰年对程序员们都是一个挑战&#xff0c;平时运行好好的系统&#xff0c;在 02-29 这一天&#xff0c;好像就会有各种毛病。 虽然&#xff0c;提前一天&#xff0c;领导们都会提前给下面打招呼。但是&#xff0c;不可避免的&#xff0c;今天公司因为闰年还是有一些小故障。…

BUUCTF-Misc-百里挑一

题目链接&#xff1a;BUUCTF在线评测 (buuoj.cn) 下载附件打开是一个流量包文件&#xff1a; 全是在传图片时候的流量&#xff0c;先把图片保存出来文件–>导出对象–>HTTP–>保存到一个文件夹 然后使用kali下的exiftool找到了一半flag exiftool *|grep flag 另外一半…

vulhub中ThinkPHP5 5.0.23 远程代码执行漏洞复现

ThinkPHP是一款运用极广的PHP开发框架。其5.0.23以前的版本中&#xff0c;获取method的方法中没有正确处理方法名&#xff0c;导致攻击者可以调用Request类任意方法并构造利用链&#xff0c;从而导致远程代码执行漏洞。 环境启动后&#xff0c;访问http://your-ip:8080即可看到…

Linux系统:内核参数调优

目录 1、/proc目录 2、sysctl命令 3.1 控制源路由验证 3.2 控制内核的系统请求调试功能 3.3 控制核心转储是否将PID附加到核心文件名 3.4 控制TCP同步cookie的使用 3.5 在网桥上禁用netfilter 3.6 控制消息队列的默认最大大小 3.7 调试TCP内核参数 3.8 调试套…

(学习日记)2024.03.06:UCOSIII第八节:空闲任务+阻塞延时+main函数修改

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…