lv7 嵌入式开发-网络编程开发 04 IP地址与端口号

news2024/11/20 15:23:43

目录

1 IP地址

1.1 IP 地址及其表示方法

1.2 分类的 IP 地址

1.3 无分类编址 CIDR

 1.3.1 网络前缀

1.3.2 地址块

1.3.3 地址掩码 (address mask) 

1.4 IPv6 的地址

1.4.1 表示方式

1.4.2 零压缩

2 端口号

2.1 进程之间的通信

2.2 运输层的作用 

2.3 屏蔽作用 

2.4 可靠信道与不可靠信道 

2.5 运输层的两个主要协议

2.6 运输协议数据单元 

2.7 UDP 与 TCP 的区别

2.8 运输层的端口 

2.9 端口号 (protocol port number)

2.10 TCP/IP 运输层端口的标志 

2.11 两大类、三种类型的端口

2.12 常用的熟知端口 

2.13 BSD端口 (也是一个标准)


1 IP地址

1.1 IP 地址及其表示方法

示例: 

 

IP 地址采用 2 级结构

IP地址在整个互联网范围内是唯一的。

IP 地址指明了连接到某个网络上的一个主机 

网络号的位数 n 是多少?

1.2 分类的 IP 地址

  • 任意一个IP地址我们都可以迅速的得出类别,并计算得出网络号
  • 当一个主机通过两个网卡同时连接到两网络时,也就是该主机同时拥有两个IP地址,该主机被称为多归属主机
  • 一个路由器至少连接到两个不同的网络,一个路由器至少拥有两个IP地址

各类 IP 地址的指派范围

注意:

  • A 类网络地址中, 网络号 0 和 127 是保留地址,不指派。0 表示“本网络”,127 保留作为本地环回测试地址。
  • B 类网络地址中,网络号 128.0  是被 IANA 保留的,不指派。采用无分类编址(CIDR)时可以指派。
  • C 类网络地址中,网络号 192.0.0 是被 IANA 保留的,不指派。采用无分类编址(CIDR)时可以指派。
  • 指派主机号时,要扣除全 0 和全 1 。全 0 和全 1 有特殊含义和用途。 

一般不使用的特殊的 IP 地址

分类的 IP 地址的优点和缺点 

  • 管理简单; 使用方便; 转发分组迅速; 划分子网,灵活地使用。
  • 设计上不合理: 大地址块,浪费地址资源; 即使采用划分子网的方法,也无法解决 IP 地址枯竭的问题。

例:一个拥有1000台主机的组织,需要申请哪类IP地址?

需要申请一个B类地址,这就会导致超过64000个地址不能被其他组织使用。随着加入互联网的组织数量的迅速增加,IP地址面临被分配完的危险

为了解决上述问题,IETF提出了划分子网的编址改进方案

三级IP地址:网络号、子网号和主机号

例:假设有一个IP地址为192.168.1.100,子网掩码为255.255.255.0的网络。

  1. 网络号:网络号是指用来标识网络的部分。在这个例子中,子网掩码为255.255.255.0意味着前3个字节(24个位)用于表示网络号。因此,192.168.1是网络号。

  2. 子网号:子网号是指在一个网络内再进行划分而得到的子网的部分。在这个例子中,子网掩码为255.255.255.0意味着最后一个字节(8个位)用于表示子网号。因此,1是子网号。

  3. 主机号:主机号是指在一个子网内具体的主机或设备的标识。在这个例子中,最后一个字节(8个位)除去子网号的部分就是主机号。因此,100是主机号。

综上所述,IP地址192.168.1.100在子网掩码为255.255.255.0的网络中,网络号为192.168.1,子网号为1,主机号为100。

需要注意的是,子网划分和IP地址的具体规模和网络需求有关,因此在实际应用中,可以根据需要选择不同的子网掩码来划分网络、子网和主机。

1.3 无分类编址 CIDR

CIDR (Classless Inter-Domain Routing) :无分类域间路由选择。

消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,可以更加有效地分配 IPv4 的地址空间,但无法解决 IP 地址枯竭的问题。

 1.3.1 网络前缀

最大的区别: 前缀的位数 n 不固定,可以在 0 ~ 32 之间选取任意值。 

CIDR 记法:

        斜线记法 (slash notation)

a.b.c.d / n:

        二进制 IP 地址的前 n 位是网络前缀。 例如:128.14.35.7/20:前 20 位是网络前缀。

1.3.2 地址块

  • CIDR 把网络前缀都相同的所有连续的 IP 地址组成一个 CIDR 地址块。
  • 一个 CIDR 地址块包含的 IP 地址数目取决于网络前缀的位数。

注意: 

1.3.3 地址掩码 (address mask) 

又称为子网掩码 (subnet mask)。

位数:32 位。

目的:让机器从 IP 地址迅速算出网络地址。

由一连串 1 和接着的一连串 0 组成,而 1 的个数就是网络前缀的长度。

/20 地址块的地址掩码: 11111111 11111111 11110000 00000000

点分十进制记法:255.255.240.0        

CIDR 记法:255.255.240.0/20。

默认地址掩码

网络地址 = (二进制的 IP 地址) AND (地址掩码) 

 【例】已知 IP 地址是 128.14.35.7/20。求网络地址。

(a) 点分十进制 IP 地址

        128.14.35.7

(b) 二进制 IP 地址

        1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1 1 1

(c) 地址掩码是 255.255.224.0

        1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0

(d) IP 地址与地址掩码按位 AND

        1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0

(e) 网络地址(点分十进制)

        128.14.32.0

1.4 IPv6 的地址

  • 在 IPv6 中,每个地址占 128 位,地址空间大于 3.4 *10^38 。
  • 使用冒号十六进制记法(colon hexadecimal notation, 简写为 colon hex):16 位的值用十六进制值表示,各值之间用冒号分隔。

1.4.1 表示方式

点分十进制数记法:

        104.230.140.100.255.255.255.255.0.0.17.128.150.10.255.255

冒号十六进制记法:

        68E6:8C64:FFFF:FFFF:0000:1180:960A:FFFF

冒号十六进制记法:

        68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF

两个技术:零压缩,点分十进制记法的后缀。

1.4.2 零压缩

零压缩 (zero compression):一串连续的零可以用一对冒号取代。

FF05:0:0:0:0:0:0:B3 可压缩为:FF05::B3

注意:在任一地址中,只能使用一次零压缩。 

2 端口号

2.1 进程之间的通信

2.2 运输层的作用 

2.3 屏蔽作用 

运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道

2.4 可靠信道与不可靠信道 

2.5 运输层的两个主要协议

互联网的正式标准:

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

传输控制协议 TCP (Transmission Control Protocol)

2.6 运输协议数据单元 

两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元 TPDU (Transport Protocol Data Unit)。

TCP 传送的数据单位协议是 TCP 报文段 (segment)。

UDP 传送的数据单位协议是 UDP 报文或用户数据报。

2.7 UDP 与 TCP 的区别

UDP

  • 传送数据之前不需要先建立连接。
  • 收到 UDP 报后,不需要给出任何确认。
  • 不提供可靠交付,但是一种最有效的工作方式。

TCP

  • 提供可靠的、面向连接的运输服务。
  • 不提供广播或多播服务。
  • 开销较多。

使用 UDP 和 TCP 的典型应用和应用层协议

2.8 运输层的端口 

复用:应用进程都可以通过运输层再传送到 IP 层(网络层)。 

分用:运输层从 IP 层收到发送给应用进程的数据后,必须分别交付给指明的各应用进程。

如何指明各应用进程?

需要考虑的问题

  • 进程的创建和撤销都是动态的,因此发送方几乎无法识别其他机器上的进程。
  • 我们往往需要利用目的主机提供的功能来识别终点,而不需要知道具体实现这个功能的进程是哪一个。
  • 有时我们会改换接收报文的进程,但并不需要通知所有的发送方。

2.9 端口号 (protocol port number)

解决方法:在运输层使用协议端口号 (protocol port number),或通常简称为端口 (port)。把端口设为通信的抽象终点。

2.10 TCP/IP 运输层端口的标志 

端口用一个 16 位端口号进行标志,允许有 65,535 个不同的端口号。

端口号只具有本地意义,只是为了标志本计算机应用层中的各进程。

在互联网中,不同计算机的相同端口号没有联系

由此可见,两个计算机中的进程要互相通信,不仅必须知道对方的端口号,而且还要知道对方的 IP 地址。 

2.11 两大类、三种类型的端口

 

2.12 常用的熟知端口 

2.13 BSD端口 (也是一个标准)

  • 0不使用,1-1023为系统端口,也叫BSD保留端口。
  • 0-1023: BSD保留端口,也叫系统端口,这些端口只有系统特许的进程才能使用
  • 1024~65535为用户端口,其中:      
  • 1024-5000: BSD临时端口,一般的应用程序使用1024到4999来进行通讯;      
  • 5001-65535:BSD服务器(非特权)端口,用来给用户自定义端口。

IANA建议49152至65535作为“动态或私有端口”

许多Linux内核使用32768至61000范围。配置文件/proc/sys/net/ipv4/ip_local_port_range有当前系统设定。

3 练习

1.以下不是合法的IPV4的地址是:

A). 192.168.0.14 B). 10.87.384.31 C).255.255.255.255 D). 127.0.0.1

2.以下关于IP地址说法,错误的是:

A). IP可以采用数字表示,比如0xe80e0832就可以表示一个IP地址

B). IPV6的提出主要目的是解决IPV4的IP地址枯竭的问题

C). 234.76.10.1是一个合法的广播地址

D). ::1是一个合法的IP地址

3.以下关于端口号的说法,错误的是:

A). 端口是一个16位的数字,主要用于系统区分不同的网络数据该由那个任务来处理

B).为避免冲突,TCP和UDP端口不能同时使用同一端口

C).网络数据是由IP地址和端口以及套接字类型决定的

D).用户编程不可使用1024以下的端口

  1. 选项B). 10.87.384.31 不是合法的IPv4地址,因为每个IP段的取值范围是0到255,而384超出了有效范围。
  2. 选项A). IP可以采用数字表示,比如0xe80e0832就可以表示一个IP地址 是错误的。IP地址通常用点分十进制表示,而不是十六进制。
  3. 选项B). 为避免冲突,TCP和UDP端口不能同时使用同一端口 是错误的。实际上,TCP和UDP协议使用独立的端口空间,所以同一端口号可以同时被TCP和UDP使用。

 

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

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

相关文章

CompletableFuture 异步编排

目录 CompletableFuture 的详解代码测试配置类的引入Demo1Demo2CompletableFuture的async后缀函数与不带async的函数的区别ThreadPoolTaskExecutor 和 ThreadPoolExecutor 的区别Spring 线程池的使用业务使用多线程的原因场景一:场景二:FutureTask介绍线程池为什么要使用阻塞队…

(三) Markdown插入互联网或本地视频解决方案

前言 不论博客系统是WordPress还是Typecho,绕不开的是两种书写语言,一种称之为富文本,一种叫做Markdown。 Markdown有很多好处,也有很多坏处,比如Markdown本身不具备段落居中的功能,以及Markdown也不具有…

聊聊JAVA中的锁优化锁升级及其底层原理剖析

文章目录 1. 基础介绍java中的锁什么是锁优化和锁升级 2. Java中的锁升级过程及底层原理1. 偏向锁实现机制和原理1. 偏向锁的原理2. 偏向锁的底层实现 2. 轻量级锁1. 轻量级锁的原理2. 轻量级锁的底层实现 3. 重量级锁1. 重量级锁的原理2. 重量级锁的底层实现 3. Java中锁升级的…

selenium +IntelliJ+firefox/chrome 环境全套搭配

1第一步:下载IntelliJ idea 代码编辑器 2第二步:下载浏览器Chrome 3第三步:下载JDK 4第四步:配置环境变量(1JAVA_HOME 2 path) 5第五步:下载Maven 6第六步:配置环境变量&#x…

新环境下配置jupyter notebook并启动

1.先切换到我们需要使用的环境 2.安装python内核 conda install ipykernel 3.创建指定内核 ipython kernel install --user --nametensorflow2 4.运行jupyter notebook 即出现新创建的内核

计算机网络 第一章计算机网络体系结构

非常好的课程。计算机网络 //----------------------------------------------------------------------------------------------------------------// 需要清楚实体、协议、服务。 网络协议三要素,语法、语义、同步。

遗留系统陷入困境

当我们谈论遗留系统时,我们经常会想到数据中心某处的过时服务器和交换机。我们带着一种病态的迷恋阅读了有关系统性技术问题的文章,这些问题在假期周末困扰着其他旅行者,并为他们缺乏远见而摇头。 然后,我们坐在屏幕前&#xff0…

数据结构—栈、队列、链表

一、栈 Stack(存取O(1)) 先进后出,进去123,出来321。 基于数组:最后一位为栈尾,用于取操作。 基于链表:第一位为栈尾,用于取操作。 1.1、数组栈 /*** 基于数组实现的顺序栈&#…

4 Ways to Fix an Operation Did Not Complete Virus Error on Windows

文章目录 Can’t open a file on your PC? Use these methods to fix your issue. A Windows operation did not complete virus error.Mahesh Makvana / How-To Geek Readers like you help support How-To Geek. When you make a purchase using links on our site, we ma…

Spring实例化源码解析之registerBeanPostProcessors(六)

BeanPostProcessors是Spring框架中的一个扩展机制,它允许开发人员在Spring容器实例化、配置和初始化Bean的过程中干预和定制化。BeanPostProcessor接口定义了两个方法:postProcessBeforeInitialization和postProcessAfterInitialization,分别…

【WSN】无线传感器网络 X-Y 坐标到图形视图和位字符串前缀嵌入方法研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

MacOS - Sonoma更新了啥

1 系统介绍 苹果公司于2023年9月26日发布了macOS Sonoma 14.0正式版。名称由来不知道,可能是地名:Sonoma是一个地名,指加利福尼亚州北部索诺玛县(Sonoma County)。 2 系统重要更新 2.1 将小组件添加到桌面 速览提醒事项和临近日程等。按住Control键点…

(一) 使用 Hugo 搭建个人博客保姆级教程(上篇)

手把手教你如何从0开始构建一个静态网站,这不需要有太多的编程和开发经验和时间投入,也基本不需要多少成本(除了个性化域名),使用GitHub和Hugo模板即可快速构建和上线一个网站。 目标读者 本文档适用于以下用户&…

学信息系统项目管理师第4版系列16_资源管理过程

1. 组建项目团队,建设项目团队和管理项目团队属于执行过程组 1.1. 【高22上选21】 1.1.1. 【高21上选25】 1.2. 3版 2. 【高19上案三】 2.1. 【高18上案三】 2.2. 【高23上案一】 3. 规划资源管理 3.1. 定义如何估算、获取、管理和利用团队以及实物资源的过…

二叉树的顺序存储——堆——初识堆排序

前面我们学过可以把完全二叉树存入到顺序表中,然后利用完全二叉树的情缘关系,就可以通过数组下标来联系。 但是并不是把二叉树存入到数组中就是堆了,要看原原来的二叉树是否满足:所有的父都小于等于子,或者所有的父都…

十二、【漏洞复现】Rails任意文件读取(CVE-2019-5418)

十二、【漏洞复现】Rails任意文件读取(CVE-2019-5418) 12.1、漏洞原理 Ruby on Rails是一个使用 Ruby 语言写的开源 Web 应用框架,它是严格按照 MVC 结构开发的。它努力使自身保持简单,来使实际的应用开发时的代码更少,使用最少…

JavaScript系列从入门到精通系列第十三篇:JavaScript中基本数据类型和引用数据类型,创建对象的两种方式

一:基本数据类型与引用数据类型 基本数据类型:String Number Boolean Null Undefined 引用数据类型:Object 我们的内存分成了两大块,一是栈内存二是堆内存。变量都是保存到栈内存中,var a 123; a和123都在栈空间&…

互联网Java工程师面试题·ZooKeeper 篇·第一弹

目录 1. ZooKeeper 面试题? 2. ZooKeeper 提供了什么? 3. Zookeeper 文件系统 4. ZAB 协议? 5. 四种类型的数据节点 Znode 6. Zookeeper Watcher 机制 -- 数据变更通知 7. 客户端注册 Watcher 实现 8. 服务端处理 Watcher 实现 9. 客…

Redis最常见的5种应用场景

Redis作为当今最流行的内存数据库,已经成为服务端加速的必备工具之一。对于Redis为什么那么快?以及Redis采用单线程,但为什么反而获得更高的性能的疑问,在之前的Redis为什么那么快?一文中,已经有所介绍。 …

TCP端口崩溃,msg:socket(): Too many open files

一、现象 linux系统中运行了一个TCP服务器,该服务器监听的TCP端口为10000。但是长时间运行时发现该端口会崩溃,TCP客户端连接该端口会失败: 可以看到进行三次握手时,TCP客户端向该TCP服务器的10000端口发送了SYN报文,…