网络编程(一)

网络编程(一)

  • 网络基础
    • 网络体系结构
    • **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);

如何实现网络通讯

在这里插入图片描述

封包解包

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

10个令人惊叹的Python自动化脚本

大家好&#xff0c;Python凭借其简单和通用性&#xff0c;能够为解决每天重复同样的工作提供最佳方案。本文将介绍10个Python自动化脚本&#xff0c;可以帮助自动化完成任务&#xff0c;提高工作效率&#xff0c;它们可以成为项目运行中的便捷工具&#xff0c;可以收藏这些脚本…

conflicting types for 错误问题

操作系统真象还原中&#xff0c;第十一章出现的问题&#xff1a; 怎样编译都会出现一个conflicting types for ’xxx‘的错误 出现这个错误的原因&#xff1a; 头文件声明和定义参数稍有不同 头文件中声明 void Hanlder(const char * buf); 在定义时写作 void Hanlder(char…

C# WPF入门学习主线篇(六)—— TextBox常见属性和事件

欢迎回到C# WPF入门学习系列的第六篇。在前面的文章中&#xff0c;我们探讨了按钮&#xff08;Button&#xff09;的事件处理。今天&#xff0c;我们将继续学习另一个常用的WPF控件——TextBox。本文将介绍 TextBox 的常见属性和事件&#xff0c;并通过示例代码展示如何在实际应…

用这个AI工具,做公众号爆款图文,5分钟一篇10w+,居然这么简单!(附工具教程)

文章首发于公众号&#xff1a;X小鹿AI副业 大家好&#xff0c;我是程序员X小鹿&#xff0c;前互联网大厂程序员&#xff0c;自由职业2年&#xff0c;也一名 AIGC 爱好者&#xff0c;持续分享更多前沿的「AI 工具」和「AI副业玩法」&#xff0c;欢迎一起交流~ 之前X小鹿一直在各…

泵制造5G智能工厂工业物联数字孪生可视化,推进制造业数字化转型

泵制造5G智能工厂工业物联数字孪生可视化&#xff0c;推进制造业数字化转型。泵制造行业&#xff0c;作为工业领域的核心部分&#xff0c;更是急需通过技术创新实现生产流程的智能化和高效化。而5G智能工厂工业物联数字孪生可视化技术的出现&#xff0c;为泵制造业的数字化转型…

代码随想录算法训练营第四十四天 | 01背包问题理论基础、01背包问题滚动数组、416. 分割等和子集

背包问题其实有很多种&#xff0c;01背包是最基础也是最经典的&#xff0c;软工计科学生一定要掌握的。 01背包问题 代码随想录 视频讲解&#xff1a;带你学透0-1背包问题&#xff01;| 关于背包问题&#xff0c;你不清楚的地方&#xff0c;这里都讲了&#xff01;| 动态规划经…

YOLO10:手把手安装教程与使用说明

目录 前言一、YOLO10检测模型二、YOLO安装过程1.新建conda的环境 yolo10安装依赖包测试 总结 前言 v9还没整明白&#xff0c;v10又来了。而且还是打败天下无敌手的存在&#xff0c;连最近很火的RT-DETR都被打败了。那么&#xff0c;笑傲目标检测之林的v10又能持续多久呢&#…

2024第三届全国大学生数据分析大赛,有没有没有思路的朋友?

大家好呀&#xff0c;2024第三届全国大学生数据分析大赛准备开始咯&#xff0c;大家是不是没有思路呀。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 比赛现在还能报名哈&#xff01;6-7才截…

图像背景去除工具:removebg

文章目录 简介面向不同用户价格 简介 removebg&#xff0c;就是remove background&#xff0c;是一款智能图片背景去除工具。 在免费使用时&#xff0c;用到的是本地的CPU。我第一次试用时&#xff0c;图片刚上传之后&#xff0c;电脑的帧率便直线下降&#xff0c;鼠标都拖不…

买视觉检测设备需要多少钱?

随着工业自动化的发展&#xff0c;其应用范围逐步提高&#xff0c;其中母子图像传感器、CMOS和CCD摄像机、DSP、ARM嵌入式技术、图像处理和模式识别技术的快速发展&#xff0c;有效地推动了视觉检测设备的发展。在机器视觉领域中&#xff0c;常见的就是视觉检测、视觉识别、视觉…

Win11中Yolo V10安装过程记录

1. 配置Anaconda环境&#xff1a; conda create -n yolov10 python3.9 conda activate yolov10 pip install -r requirements.txt pip install -e . 这里由于torch2.0.1太慢&#xff0c;单独用pytorch官网安装流程&#xff08;选择支持GPU版本&#xff09;&#xff1a; con…

数据治理挑刺行动:深化治理,提升数据质量

在当今信息化社会&#xff0c;数据已经成为推动经济发展、社会进步的重要驱动力。然而&#xff0c;随着数据量的爆炸式增长&#xff0c;数据质量问题也日益凸显&#xff0c;给各行各业带来了不小的挑战。为了应对这一挑战&#xff0c;深化数据治理&#xff0c;提升数据质量已成…

【CT】LeetCode手撕—3. 无重复字符的最长子串

目录 题目1- 思路1-1 模式1&#xff1a;涉及去重判断1-2 模式2&#xff1a;遍历字符串区间 2- 题解⭐无重复字符的最长子串——题解思路 3- ACM实现 原题链接&#xff1a;3. 无重复字符的最长子串 题目 无重复字符的最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有…

kubernetes负载均衡---MetalLB

https://github.com/metallb/metallb 参考 &#xff1a; https://mp.weixin.qq.com/s/MBOWfcTjFMmgJFWw-FIk0Q 自建的Kubernetes集群&#xff0c;默认情况下是不支持负载均衡的。当需要提供服务的外部访问时&#xff0c;可使用 Ingress、NodePort等方式。他们都存在一些问题 …

python基础篇(1):type()

1 type()函数 type()函数是Python内置的函数之一&#xff0c;它用于获取一个对象的数据类型。 一般语法如下&#xff1a; type(object) 其中&#xff0c;object是您要检查其类型的变量或对象。type()函数将返回一个表示对象类型的类型对象。 2 使用方式 &#xff08;1&…

C语言中指针的说明

什么是指针&#xff1f; 在C语言当中&#xff0c;我们可以将指针理解为内存当中存储的地址&#xff0c;就像生活当中&#xff0c;一个小区里面&#xff0c;在小区里面有很单元&#xff0c;每一栋单元&#xff0c;单元内的房间有着不同的房间号&#xff0c;我们可以同过几栋几单…

推荐系统学习 一

参考&#xff1a;一文看懂推荐系统&#xff1a;召回08&#xff1a;双塔模型——线上服务需要离线存物品向量、模型更新分为全量更新和增量更新_数据库全量更新和增量更新流程图-CSDN博客 一文看懂推荐系统&#xff1a;概要01&#xff1a;推荐系统的基本概念_王树森 小红书-CSD…

【Linux基础】安装nginx

【Linux基础】安装nginx 文章目录 【Linux基础】安装nginx1、下载nginx2、安装nginx3、使用nginx4、配置nginx环境变量 1、下载nginx 在Nginx的官网的下载页面中(http://nginx.org/en/download.html)&#xff0c;就展示了当前Nginx版本&#xff0c;并提供了下载的连接。 如下&a…

学习笔记——路由网络基础——静态路由(static)

三、静态路由(static) 1、静态路由 (1)定义 静态路由(Static)&#xff1a;由管理员手动配置和维护的路由。静态路由配置简单&#xff0c;被广泛应用于网络中。此外还可以实现负载均衡和路由备份。 静态路由默认优先级为60&#xff0c;如果想在多条静态路由中让某条路由优选…

深入探索AliExpress API接口:技术实现与代码示例

AliExpress API是阿里巴巴集团为开发者提供的一套开放接口&#xff0c;它允许开发者通过编程方式访问AliExpress平台的数据&#xff0c;如商品信息、订单数据、物流信息等。API支持多种编程语言&#xff0c;包括Java、Python、PHP等&#xff0c;同时提供了丰富的API接口和详尽的…