网络编程(一)

网络编程(一)

  • 网络基础
    • 网络体系结构
    • **OSI的7层模型**:(理想化)
      • **每层的功能**
    • **TCP/IP的4层模型**:(在使用)
    • 常见的协议
    • IP地址
      • IPV4
        • 分类
        • A类(第1位固定为0)
        • B类(第1,2位固定为10)
        • C类(前3位固定为110)
        • D类(组播地址)(前4位固定为1110)
        • E类(保留地址)(前四位固定为1111)
      • IPV6
      • 网络协议
      • 端口号
        • 范围
    • 字节序
      • 主机字节序
      • 网络字节序(**本身大端序**)
      • 主机字节序转化成网络字节序(htons/htonl)
      • 网络字节序转化为主机字节序(ntohl/ntohs)
      • 如何实现网络通讯
      • 封包解包

网络基础

网络体系结构

定义:网络的分层模型和每层所使用的协议的集合

网络体系结构有两种:OSI的7层模型和TCP/IP的4层模型
在这里插入图片描述

OSI的7层模型:(理想化)

开放系统互连参考模型 (Open System Interconnect 简称OSI

七层(应用层、表示层、会话层、传输层、网络层、数据链路层、物理层)
在这里插入图片描述

每层的功能

物理层:定义物理设备的标准,主要对物理连接方式,电气特性,机械特性等制定统一标准,传输比特流,因此最小的传输单位——位(比特流)

数据链路层:主要是对物理层传输的比特流包装,检测保证数据传输的可靠性,将物理层接收的数据进行MAC(媒体访问控制)地址的封装和解封装,也可以简单的理解为物理寻址。交换机就处在这一层,最小的传输单位——帧

网络层:控制子网的运行,如逻辑编址,分组传输,路由选择最小单位——分组(包)报文

传输层:定义一些传输数据的协议和端口。传输协议同时进行流量控制,或是根据接收方接收数据的快慢程度,规定适当的发送速率,解决传输效率及能力的问题——tpdu

会话层:负责在网络中的两节点建立,维持和终止通信,在一层协议中,可以解决节点连接的协调和管理问题。包括通信连接的建立,保持会话过程通信连接的畅通,两节点之间的对话,决定通信是否被终端一斤通信终端是决定从何处重新发送,最小单位——spdu

表示层:确保一个系统的应用层发送的消息可以被另一个系统的应用层读取,编码转换,数据解析,管理数据的解密和加密,最小单位——ppdu

应用层:文件传输,文件管理,电子邮件的信息处理

在这里插入图片描述
TCP/IP协议:
在这里插入图片描述

TCP/IP的4层模型:(在使用)

“四层”:应用层,传输层,网络层,网络接口和物理层
在这里插入图片描述
TCP/IP与OSI参考模型的对应关系
在这里插入图片描述

常见的协议

IP(27)、tcp(77)、udp(110)、ping(64)
在这里插入图片描述

IP地址

定义:在网络中唯一标识一台主机的符号

MAC地址–》物理地址(硬件地址),唯一标识一台主机的符号

在这里插入图片描述

IPV4

4代表

  1. (版本号)
  2. (IPV4协议维护的IP地址的宽度是4byte=32bit)所以IPV4地址有2^32次方个,范围是0.0.0.0~255.255.255.255
分类

在这里插入图片描述

A类(第1位固定为0)

范围:0.0.0.0~127.255.255.255

A类地址 = 网络号(8bit)+主机号(24bit)

  1. A类地址网络号第一位固定为0,其他七位可以分配,主机号长度为24位
  2. 网络号分配的数量为2^7 = 128,地址范围为:1.0.0.0~127.255.255.255
  3. 10.0.0.0-10.255.255.255是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址,路由器接收到私有地址,不会向Internet转发该分组,私有地址与NAT相关)
  4. 127.0.0.0-127.255.255.255是保留地址,用做循环测试用的
  5. 0.0.0.0—0.255.255.255也保留用作特殊用途
  6. 因此网络号可分配的只有128-3 =125个,每个网络段的主机号可以分配的只有 2^24-2=16777214个(主机号全0和主机号全1保留
B类(第1,2位固定为10)

范围:128.0.0.0~191.255.255.255

B类地址 = 网络号(16bit)+主机号(16bit)

  1. B类地址网络号第1,2位固定为10,其它14位可以分配,主机号长度为16位
  2. 地址范围为:128.0.0.0—191.255.255.255
  3. 172.16.0.0—172.31.255.255是私有地址
  4. 169.254.0.0—169.254.255.255是保留地址(如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器。就会得到其中一个IP)
  5. 每个网络段可分配的主机号为2^16 - 2 = 65534(主机号全0和主机号全1保留
C类(前3位固定为110)

范围192.0.0.1 ~ 223.255.255.254(全0全1不用和1号地址)

2^8-3个主机

C类地址 = 网络号(24bit)+主机号(8bit)

  1. C类地址网络号前3位固定为110,其它21位可以分配,主机号长度为8位
  2. C类地址范围:192.0.0.0—223.255.255.255
  3. 192.168.0.0—192.168.255.255是私有地址
  4. 网络号可分配的块数为2^21 = 2097152,每个网络号可分配的主机号数为2^8-2 = 254(主机号全0和主机号全1保留)

在这里插入图片描述

D类(组播地址)(前4位固定为1110)

范围224.0.0.1 ~ 239.255.255.254

D类IP地址不标志网络,前4位固定为1110,地址范围为:224.0.0.0—239.255.255.255,用作特殊用途,如多播地址

E类(保留地址)(前四位固定为1111)

240~保留地址

E类地址不分网络地址和主机地址,它的第1个字节的前四位固定为1111。E类地址范围:240.0.0.0—255.255.255.255,用于某些实验和将来使用

总结:

  1. A类地址的第1块网络号和第2块网络号要保留
  2. ABC三类地址的主机号全0和全1都保留,主机号全1为子网广播地址,主机号全0为子网网络地址(一个网段中第一个IP地址为网络地址)

ABC三类地址中的特殊IP地址

  1. 直接广播地址
    如果主机号全1,例如191.1.255.255,那么这个地址为直接广播地址路由器将这个分组以广播的形式发送到网络号位191.1.x.x的全部主机
  2. 受限广播地址
    网络号与主机号的32位全为1(255.255.255.255)为受限广播地址用来将一个分组以广播方式发送给本网的所有主机
  3. “这个网络上的特定主机”地址
    网络号是全0 (如0.0.0.25) 的地址是这个网络号的特定主机地址路由器接到这样的分组,不向外转发,而是直接交付给本网络中主机号为25的主机
  4. 回送地址
    A类地址中127.0.0.0是回送地址,它是一个保留地址

IPV6

IPv6地址采用”冒号十六进制表示法“,将128位地址按每16位划分为一个位段,每个位段转换为一个4位的十六进制数

  1. 冒号十六进制表示法:
    21DA : 0000 : 0000 : 0000 : 02AA : 000F : FE08 : 9C5A

  2. 如果某段存在几位都是0的情况,可以使用零压缩法压缩:

    21DA : 0 : 0 : 0 : 2AA : F : FE08 : 9C5A

    零压缩法:00D3(D3),02AA(2AA),000A(A),0000(0),但是AB08不能压缩为AB8

  3. 如果存在几个连续位段都是0,可以用”双冒号表示法“(双冒号只能出现一次)

    21DA : :2AA : F : FE08 : 9C5A

    用”双冒号表示法“表示的一个问题:如何确定冒号省略的段数?
    8 - 现有段数 = 冒号省略的段数

网络协议

定义:在网络通信中对某种通信规则的约定
分类:

  1. 网络通用协议(TCP/IP协议)

  2. 行业专用协议

  3. 自定义协议

端口号

为了区分一台主机接受到的数据包应该转交给那个进程来进行处理,使用端口号来区别

TCP端口号与UDP端口号独立

端口号作用:用于区分应用程序

范围

端口号是一个16位的无符号整数,范围1-65535(0不用),其中1-1023已被占用。用户可用的是1024~65535之间

在这里插入图片描述
在这里插入图片描述

字节序

分类:主机字节序,网络字节序

主机字节序

概念:不同的CPU主机存储多字节整数的方式,有小端主机字节序和大端主机字节序(大小端由CPU决定)

小端序:将数据的低字节存放在内存的低地址

大端序:将数据的低字节存放在内存的高地址处
在这里插入图片描述
案例:验证虚拟机是大端序还是小端序

#include <stdio.h>
//功能:使用指针判断虚拟机是大端序还是小端序
int main(int argc, const char *argv[])
{int a = 0x12345678;char* p = &a;if(0x78 == *p){printf("虚拟机为小端序\r\n");}else{printf("虚拟机为大端序\r\n");}return 0;
}
#include <stdio.h>
//功能:使用共用体判断虚拟机是大端序还是小段序
typedef union myunion
{char a;int b;
}myunion;
int main(int argc, const char *argv[])
{myunion un;un.b = 0x12345678;if(0x78 == un.a){printf("虚拟机为小端序\r\n");}else{printf("虚拟机为大端序\r\n");}return 0;
}

在这里插入图片描述

网络字节序(本身大端序

把给定系统所采用的字节序称为主机字节序。为了避免不同类型主机之间在数据交换时由于对于字节序的不同而导致的差错,引入网络字节序

作用:用作适配不同类型的主机的主机字节序

提前转化:0x12345678–>转化0x78563412

主机字节序转化成网络字节序(htons/htonl)

u_long htonl(u_long hostlong);//32bit使用
u_short htons(u_short short);//小于32bit使用

网络字节序转化为主机字节序(ntohl/ntohs)

u_long ntohl(u_long hostlong);
u_short ntohs(u_short short);

如何实现网络通讯

在这里插入图片描述

封包解包

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

「前端+鸿蒙」核心技术HTML5+CSS3(十二)

1、CSS3 伸缩盒模型简介 CSS3 的 Flexbox(伸缩盒)模型是一种布局模式,用于在容器内对齐和分配空间,即使它们的大小未知或动态变化。Flexbox 使得布局能够适应不同屏幕尺寸和设备。 示例代码: <div class="flex-container"><div>项目1</div>…

大文件续传,文件分享

1. 最近各种文件分享平台&#xff0c;很多都要注册&#xff0c; 对于很多需要临时分享文件下的场景&#xff0c;不想被这种东西烦恼&#xff0c;于是借鉴网上代码&#xff0c;进行了一些修改&#xff0c; 写了一个文件分享项目&#xff0c; 该项目只是自用&#xff0c;数据库都…

为何使用代理池:

匿名性&#xff1a; 代理池允许爬虫在请求目标网站时使用不同的IP地址&#xff0c;从而保护真实身份。 防封锁&#xff1a; 通过动态切换IP&#xff0c;可以规避网站对特定IP的封锁&#xff0c;提高爬虫的稳定性。 分布式请求&#xff1a; 代理池使爬虫能够通过多个IP地址发起…

go语言接口之接口类型

接口类型具体描述了一系列方法的集合&#xff0c;一个实现了这些方法的具体类型是这个接口类型的 实例。 io.Writer类型是用的最广泛的接口之一&#xff0c;因为它提供了所有的类型写入bytes的抽象&#xff0c;包括文 件类型&#xff0c;内存缓冲区&#xff0c;网络链接&#x…

Science Robotics 可实现中心聚焦与多光谱成像的鸟类视觉启发钙钛矿人工视觉系统

一、前沿速览 来自韩国基础科学研究所&#xff08;IBS&#xff09;纳米粒子研究中心的研究人员及其合作者提出了一个利用鸟类视觉注视点和多光谱成像的人工视觉系统。近日在Science Robotics 上发表的文章引入了人工中央凹和垂直堆叠的钙钛矿光电探测器阵列&#xff0c;其设计…

webserver timer

定时器用来处理非活动链接。 webserver项目中&#xff0c;通过信号函数来实现定时。 调用alarm()系统调用&#xff0c;设置好时间&#xff0c;这段时间结束后&#xff0c;alarm会发出sig_alarm信号。而信号处理函数做的事情仅仅只是将代表该信号的值写入管道(pipefd)。 在event…

NLP基础——序列模型(动手学深度学习)

序列模型 定义 序列模型是自然语言处理&#xff08;NLP&#xff09;和机器学习领域中一类重要的模型&#xff0c;它们特别适合处理具有时间顺序或序列结构的数据&#xff0c;例如文本、语音信号或时间序列数据。 举个例子&#xff1a;一部电影的评分在不同时间段的评分可能是…

#!/usr/bin/env bash

#!/usr/bin/env bash 是一个在 Unix 和 Unix-like 系统&#xff08;如 Linux 和 macOS&#xff09;中常见的 shebang&#xff08;或称为 shebang 行、hashbang、pound bang 或 hash-bang&#xff09;指令。 这个指令有以下几个部分&#xff1a; #!&#xff1a;这是一个特殊的…

智慧校园的发展趋势

在21世纪的数字化浪潮中&#xff0c;教育领域正经历着前所未有的变革。智慧校园&#xff0c;作为这场变革的前沿阵地&#xff0c;其发展趋势正引领着未来教育的新模式。我们将探讨智慧校园在融合技术、全场景应用、生态建设、数据安全以及可持续发展等方面的崭新动向&#xff0…

In eMule and the Kad network, “distance“ meaning

In eMule and the Kad network, “distance” is not defined as the literal number of hops or jumps from one node to another. Instead, it is a mathematical metric used to measure how “close” two identifiers are to each other in the key space. This distance …

特征交叉系列:FFM场感知因子分解机原理与实践

从FM到FFM知识准备 在上一节中[特征交叉系列&#xff1a;完全理解FM因子分解机原理和代码实战]介绍了FM算法&#xff0c;FM因子分解机通过在逻辑回归基础上增加所有特征的二阶交互项实现特征的交叉&#xff0c;但是随着特征数的增多二阶交互的数量呈平方级别增长&#xff0c;F…

ArcGIS模型构建器实例:一键拓扑(附模型下载)

ArcGIS模型构建器特别适用于流程固定的工作流。 要素的拓扑处理就非常符合这一特点&#xff0c;一个要素的拓扑过程基本固定&#xff0c;但是每次拓扑都要来一轮操作就很烦&#xff0c;这正是模型构建器的用武之地。 下面以ArcGIS Pro为例介绍在模型构建器中的整个拓扑流程&a…

CPU 使用率过高问题排查

文章目录 CPU 使用率过高问题排查1. CPU使用率过高常见问题2. 压力测试2.1 stress安装参数说明测试示例 2.2 stress-ng安装参数说明测试示例 3. 问题排查3.1 使用 top 命令3.2 使用 ps 命令3.3 使用 perf top3.4 vmstat 命令常用信息内存信息磁盘信息 CPU 使用率过高问题排查 …

第一篇 逻辑门(与门、或门、非门、异或门)

一、实验目的 了解DE1-SOC开发板一些外设。 掌握常用组合逻辑门电路的基本原理。 学习Verilog HDL的基本语法。 学习使用ModelSim工具对设计的电路进行仿真&#xff0c;包括编写Testbench仿真代码&#xff0c;以及ModelSim工具的使用。 熟悉使用Quartus软件从创建Quartus工…

算法金 | Python 中有没有所谓的 main 函数?为什么?

​大侠幸会&#xff0c;在下全网同名[算法金] 0 基础转 AI 上岸&#xff0c;多个算法赛 Top [日更万日&#xff0c;让更多人享受智能乐趣] 定义和背景 在讨论Python为何没有像C或Java那样的明确的main函数之前&#xff0c;让我们先理解一下什么是main函数以及它在其他编程语言…

javaweb——js

JavaScript是一种网页脚本语言。JavaScript代码可以很容易的嵌入到HTML页面中。 js引入 JavaScript嵌入到HTML页面中 <body><script>alert("Hello JS")</script> </body>再HTML页面中插入外部脚本JavaScript <body><script src&…

GIS数据快捷共享发布工具使用时注意事项

我们所有工具软件下载解压后&#xff0c;不要放在C盘或桌面&#xff0c;这样会产生权限冲突问题问题&#xff0c;这是WINDOWS的安全保护&#xff0c;大家要注意&#xff01;也不要让解压目录嵌套太深&#xff0c;Windows目录长度识别是有一定限制的!如果可以&#xff0c;最好是…

微收付系统让客户有钱花,让商家有钱赚!

微收付系统让客户有钱花&#xff0c;让商家有钱赚&#xff01; 作者按&#xff1a;随着那场呼啸全球的疫情&#xff0c;谜一样的消失&#xff01;给全球经济带来了沉重的打击&#xff0c;经济不振和战争笼罩着世界每一个角落&#xff0c;实体店面临着收款难&#xff0c;有钱人花…

DALL-E 2之学习心得

一、简介 DALL-E 2 是 OpenAI 开发的一款人工智能图像生成器&#xff0c;它可以根据自然语言的文本描述创建图像和艺术形式。这是一个根据文本生成图像的人工智能系统&#xff0c;是 DALL-E 模型的升级版。 DALL-E 2 的特点包括&#xff1a; 图像生成&#xff1a;能够从文本描述…

用旧安卓手机当 linux 开发机

1. 下载 Termux (快速链接&#xff0c;如果失效或者要下载最新版请去github release 下载 ) 注意手机硬件&#xff0c;我这个是 64 的所以下 64 的 https://github.com/termux/termux-app/releases/download/v0.118.0/termux-app_v0.118.0github-debug_arm64-v8a.apk 2. 弄到…