当前位置: 首页 > news >正文

Lesson13 IP协议

  •  IP:   提供一种能力,将数据从A主机送到B主机的能力,但不一定会成功
  • 主机 : 配有 IP 地址 , 但是不进行路由控制的设备 ;
  • 路由器: 即配有 IP 地址 , 又能进行路由控制 ;
  • 节点 : 主机和路由器的统称;

协议头格式 

如何封装和解包: 定长报头 +  自描述字段

如何交付(分用) : 8位协议(udp或tcp)

第一层 

  •  4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.
  • 4位头部长度(header length):
    • 4为首部长度虽然是4个bit位,但是单位是字节
    • 0000->1111 => 0 -> 15,即范围是0 -> 60字节
    • 报头的范围: [20,60]
      • x * 4 = 20 推出 x = 5->0101
      • x * 4 = 60 推出 x = 15->1111
  • 8位服务类型(Type Of Service):
    • 3位优先权字段(已经弃用),
    • 4位TOS字段(a.最小延时, b.最大吞吐量, c.最高可靠性, d.最小成本)
    • 1位保留字段(必须置为0)
  •  16位总长度(total length): IP数据报整体占多少个字节

第三层

  • 8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL-= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环
  • 8位协议: 表示上层协议的类型 (udp或者tcp)
  • 16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏.
  • 32位源地址和32位目标地址: 表示发送端和接收端.

第二层

 分片问题

  • 网络层的下层链路层由于物理特征的原因,一般无法发生太大的数据
  • 这时发送端的网络层就会把数据进行分片然后发送,而接收端的网络层就会进行组装

将一个比较大的ip报文,拆分成为多个小的满足条件的报文,

分片的行为是网络做的,同样组装的行为也必须由对方的网络层来做 

  •  网络向上交付也必须是一个完整的报文,
  • IP分片和组装的行为,TCP是不知道的,不关心的

如何实现分片 

  • 16位标识: IP报文序号
  • 3位标志
    • 第一位 保留 (保留的意思是现在不用, 但是还没想好说不定以后要用到).
    • 第二位置为 1表示禁止分片 , 这时候如果报文长度超过MTU, IP模块就会丢弃报文.
    • 第三位表示 "更多分片" , 如果分片了的话,最后一个分片置为1, 其他是0(结束标记)
  • 13位片偏移: 是分片相对于原始IP报文开始处偏移(确认位置)

 区分分片并确认收全->提供组装方案

 

  1. 分片行为不是主流
    1. 在网络层分片和组装中,丢包是有概率的,分片会增加丢包的概率
  2. 识别报文与报文的不同
    1. 不同报文的16位标识不同,这就能区分报文和报文之间的不同,
  3. 识别报文是否被分片
    1. 如果更多分片标志位是1,就表明它被分片了
    2. 如果我就是最后一个分片,但这个更多分片标志位就是0,无法区分是否被分片了
      但是最后一个分片的13位片偏移,一定不为0,能区分是否被分片了
      if(报文->更多分片 & 0x1) return 分片的
      else if(报文->片偏移 > 0) return 分片的
      else return 独立的报文
  4. 识别那些分片是开始,中间,结尾
    1. 开始: 更多分片1,片偏移0
    2. 中间: 更多分片1,片偏移不是0
    3. 结尾: 更多分片0,片偏移不是0
  5. 识别任何一个分片丢失
    1. 通过16位标识,确定这个报文的所有分片,并将其放在一起
    2. 然后按照片偏移进行升序排列

      偏移量 + 自身大小 = 下一个报文的偏移量
    3. 扫描整个报文如果不匹配,中间就一定会有丢失的,
      如果成功计算到结尾,就一定收取完整了(组装时也是这样做的)

  •  分片之前,一定是一个独立的ip报文
  • 分片之后,每一个分片都要有ip报文,
  • 为了支持未来的组装,每一个分片都必须有ip报文

 网段划分(重要)

ip = 网络号+主机号

  • 网络号: 保证相互连接的两个网段具有不同的标识;
  • 主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;
通过 合理设置 主机号和网络号 , 就可以保证在相互连接的网络中 , 每台主机的 IP 地址都不相同 .
那么问题来了 , 手动管理子网内的 IP, 是一个相当麻烦的事情 .
  •  有一种技术叫做DHCP, 能够自动的给子网内新增主机节点分配IP地址, 避免了手动管理IP的不便.
  • 一般的路由器都带有DHCP功能. 因此路由器也可以看做一个DHCP服务器.

过去曾经提出一种划分网络号和主机号的方案, 把所有IP 地址分为五类, 如下图所示(该图出 自[TCPIP]) 

  • A类 0.0.0.0到127.255.255.255
  • B类 128.0.0.0到191.255.255.255
  • C类 192.0.0.0到223.255.255.255
  • D类 224.0.0.0到239.255.255.255
  • E类 240.0.0.0到247.255.255.255
随着 Internet 的飞速发展 , 这种划分方案的局限性很快显现出来 ,
大多数组织都申请 B 类网络地址 , 导致 B 类地址很快就分配完了, A 类却浪费了大量地址
  •  例如, 申请了一个B类地址, 理论上一个子网内能允许6万5千多个主机. A类地址的子网内的主机数更多.
  • 然而实际网络架设中, 不会存在一个子网内有这么多的情况. 因此大量的IP地址都被浪费掉了.

针对这种情况提出了新的划分方案, 称为CIDR(Classless Interdomain Routing):  

  • 引入一个额外的 子网掩码 (subnet mask)来区分网络号和主机号;
  • 子网掩码也是一个32位的正整数. 通常用一串 "0" 来结尾;
  • 将IP地址和子网掩码进行 " 按位与 " 操作, 得到的结果就是网络号;
  • 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;

  •  可以给不同的路由器配置不同位数的子网掩码,就能看到不同的网络号
  • 目的IP & 当前路由器的子网掩码 = 该报文要去的目的网络
  • 又因为不同的路由器一定至少要级联2个网络,每一个网络的网络号可能是不同的
    每一个路由器都要给自己直接链接的网络配置对应的子网掩码

特殊的IP地址

  • 将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;
  • 将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;
  • 127.*的IP地址用于 本机环回(loop back)测试 ,通常是127.0.0.1

IP地址的数量限制

  • 我们知道, IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有 232次方个IP地址, 大概是43亿左右.
  • TCP/IP 协议规定, 每个主机都需要有一个IP地址. 且还有一些特殊的IP地址的存在, 数量远不足43亿;
  • 另外IP地址并非是按照主机台数来配置的, 而是每一个网卡 都需要配置一个或多个IP地址.
  • CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然不是很够用.

这时候有三种方式来解决

  • 动态分配IP地址 : 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到的IP地址不一定是相同的;
  • NAT技术 (后面会重点介绍);
  • IPv6 : IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表 示一个IP地址; 但是目前IPv6还没有普及;

私有IP地址和公网IP地址

  •  路由器天然的会构建区域网(子网),内网IP,
  • 家用路由器:
    • 对内: 面对自己构建的子网
    • 对外:自己本身也是别人构建子网的一个主机
  • 所有路由器一定要有两套地址:
    • 对内: Lan口IP,局域网ip(私有ip)
    • 对外:WAN口IP,自己所在上级子网给自己分配的ip(公有ip)
  • 私有网络对应的IP是局部的,可以在不同的子网中重复出现->IP不足问题就大大缓解了

 缓解IP不足->NAT技术

路由器要做的一个事情:

  • 将报文中的源IP替换成为路由器的WAN口IP
  • 每经过一个运行商的内网路由器,都要做这个工作(公网路由器不做) 
  •  目的IP地址是不变的,源IP地址在不同的内网,通过不同层级的网络节点中转发(替换),
    这种技术就叫做: NAT技术

路由 

  •  IP报文,被千里送到主机C的入口路由器,接下来需要进行交付给目标主机: 封装MAC报头,所以就必须知道主机C的MAC地址
  •  IP提供的是转发的策略,想要解决设备转发的具体功能,需要交给数据链路层解决

数据链路层

1.以太网帧格式->数据帧格式 

  • 源地址和目的地址是指 网卡 硬件地址 (也叫 MAC地址 ), 长度是48位,是在网卡出厂时固化的;
  • 帧协议类型字段有三种值,分别对应IP、ARP、RARP;
  • 帧末尾是 CRC校验码 ->标识主机 唯一性 的方案
认识 MAC 地址
  • MAC地址用来识别数据链路层中相连的节点;
  • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
    在网卡出厂时就确定了, 不能修改.
  • mac地址通常是 唯一 的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)

对比理解MAC地址和IP地址

  • IP地址描述的是 路途总体 的 起点 和 终点;
  • MAC地址描述的是路途上的 每一个区间 的起点和终点;

2.重谈局域网通信原理 

  •  局域网中的主机是越少越好,且发送数据帧的时候,数据帧越短越好
    这样就能有效的减少数据之间的碰撞
  • 碰撞避免算法->发送的主机会休息随机时间,然后,在重新发送
  • 局域网攻击原理.....

认识MTU

MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制.

  • 以太网帧中的数据长度规定最小46字节,最大1500字节,
    ARP数据包的长度不够46字节,要在后面补填充位; 
  • 最大值1500称以太网的最大传输单元(MTU), 不同的网络类型 不同的MTU ;
  • 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);
  • 不同的数据链路层 标准的 MTU是不同的 ;

 3.汇总到整体的通信流程汇总,发现问题--添补细节

  •  在网络转发的`过程中,目的IP不变的,mac帧报头要变

MSSMTU的关系

  • TCP的单个数据报的 最大消息长度 , 称为MSS(Max Segment Size);
  •  MTU的最大字节为1500 = IP
  • IP有效载荷 = 1500 - IP报头(20) = TCP + 数据 = 1480
  • 数据 = 1480 - TCP报头的长度(20) = 1460,即MSS不能大于1460

查看硬件地址和MTU 

ARP协议(地址解析协议)

  •  如果只知道目标主机的IP地址,而不知道对方的MAC地址,就无法封装MAC帧
  • 在一个网段中,通过目标IP,得知对方MAC地址的方式叫做->ARP协议(地址解析协议)

ARP数据报的格式 

  •  硬件类型指链路层网络类型,1为以太网;
  • 协议类型指要转换的地址类型,0x0800为IP地址;
  • 硬件地址长度对于以太网地址6字节;
  • 协议地址长度对于和IP地址4字节;
  • op字段为1表示ARP请求,op字段为2表示ARP应答

模拟一次ARP过程

前提是知道对方的IP地址 

  •  HA会给在这局域网中所有的主机都发送ARP请求(全广播)
  • 每一主机拿到这个请求,都会先看自己的IP地址是否匹配目的IP地址,都会处理,并向上交付
  • 不匹配就直接丢弃,匹配就发送ARP应答给对应主机

  •  HD这台主机会给HA主机发送ARP应答,在APR应答中就包括了HD自己的MAC地址
  •  当然在这个局域网中其他的主机都会收到这个应答,但是不会处理,会直接丢弃

 问题一: 如何理解上诉过程发生的两次丢弃

  • 一次是在arp层丢弃的,一次是在底层mac层丢弃的

问题二: ,是不是每一次发送数据都要发送一个arp请求和一个arp应答

  • 不是,arp请求成功之后,请求方会暂时将IP :  MAC地址的映射暂时保存下来

问题三: 除了在目标最终的子网中进行arp,其他地方会不会也发生arp呢 

  • ,arp过程会在网络中可能的所有路径中出现

小结

  • 任何主机可能之前向目标主机发起过ARP请求,同时,未来一定会受到对应的ARP应答

  • 任何一台主机,也有可能被别人发起ARP请求

  • 在局域网中:任何一台主机受到ARP的时候,可能是一个应答,也可能是一个请求 

 arp伪装

DNS(Domain Name System)

  • TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序. 但是IP地址不方便记忆.
  • 于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用hosts文件来描述主机名IP地址的关系.

最初, 通过互连网信息中心(SRI-NIC)来管理这个hosts文件的 

  • 如果一个新计算机要接入网络, 或者某个计算机IP变更, 都需要到信息中心申请变更hosts文件.
  • 其他计算机也需要定期下载更新新版本的hosts文件才能正确上网.

这样就太麻烦了, 于是产生了DNS系统

  • 一个组织的系统管理机构, 维护系统内的每个主机的IP主机名的对应关系.
  • 如果新计算机接入网络, 将这个信息注册到数据库中;
  • 用户输入域名的时候, 会自动查询DNS服务器, 由DNS服务器检索数据库, 得到对应的IP地址.
遗留问题: 浏览器中输入url后,发生的事情

NAT的转换表

 

  • 其实在进行源地址替换的过程中,可能不一定只替换原IP,必要的时候,源端口也要被替换
  • 路由器在NAT转换的过程中,除了单纯的替换,还会为我们根据报文请求的四源组
    为我们构建一个映射关系
  • 源IP表示唯一的一台主机,源端口表示该主机上唯一的一个进程
    源IP+源端口表示唯一的一个进程 -- 自己在自己的内网中的唯一性
  • 无论从内向外,还是从外向内,都能在各自的网络中表示唯一性,
    所以这个映射关系是:互为KEY值的!!
  •  如果我们从来没有访问过外网,外网能够直接访问内网吗? 理论上不能
    但是有很多基于NAT原理的软件,能够帮助我们进行从外网访问内网 -- 内网穿透

正向代理服务器

 

  •  正向代理是双向的,即请求和应答都会通过这个代理服务器

 反向代理服务器

  •  反向代理是单向的,且一般用于公司大型机房中,主要为了提高服务器的利用率,
  • 将大量的请求通过代理服务器平均分配给所有主机,以提高效率

 访问外网 - fq

 

 

  • 在国内有的服务器是可以直接访问外网的,这种代理叫做正向代理
  • 把要访问的IP(真实IP)用另一个IP(代理服务器IP)嵌套一层,并加密处理
  • 从国内发送给运营商,运营商拿到这个报文,一看IP是国内的IP(代理服务器IP)就通过了
    (运营商没有密钥无法解密,就无法看到我们真实想访问的IP)
  • 代理服务器拿到这个报文,进行解密然后根据IP发送给国外的服务器

相关文章:

Lesson13 IP协议

IP: 提供一种能力,将数据从A主机送到B主机的能力,但不一定会成功 主机 : 配有 IP 地址 , 但是不进行路由控制的设备 ; 路由器: 即配有 IP 地址 , 又能进行路由控制 ; 节点 : 主机和路由器的统称; 协议头格式 如何封装和解包: 定长报头 自描述字段 如何交付(分用) : 8…...

【每日一题Day192】LC1033移动石子直到连续 | 分类讨论 贪心

移动石子直到连续【LC1033】 三枚石子放置在数轴上,位置分别为 a,b,c。 每一回合,你可以从两端之一拿起一枚石子(位置最大或最小),并将其放入两端之间的任一空闲位置。形式上,假设这…...

2023年软件测试常见面试题100%问必背全套教程

随着数字化时代的到来,软件测试越来越受到重视。在未来的几年里,软件测试将继续成为信息技术领域中的热门职业之一。如果你是一名正在寻找或准备进入软件测试行业的人,那么这套常见面试题全套教程对你来说会非常有用。 这套教程旨在帮助你了…...

TypeScript 基本概念

TypeScript 是什么? 目标:能够说出什么是 TypeScript TS 官方文档 TS 中文参考 - 不再维护 TypeScript 简称:TS,是 JavaScript 的超集,JS 有的 TS 都有 TypeScript Type JavaScript(在 JS 基础之上…...

libfacedetection 人脸检测库 检测速度慢的问题

目录 一、libfacedetection 性能介绍 英特尔CPU 使用AVX2指令集 使用AVX512指令集 嵌入式设备 二、加速检测速度 libfacedetetion的前向推理速度很快的原因 使用axv2加速指令 一、libfacedetection 性能介绍 在上一篇文章中,我发现使用摄像头检测,构…...

项目骨架搭建

CSS样式补充 精灵图 CSS精灵图(CSS Sprites)是一种网页优化技术,通过将多个小图像合并成一个大图像,然后通过CSS的背景定位(background-position)属性来显示对应的图像部分。这种技术可以减少HTTP请求次数…...

“火灾不分昼夜,安全在我心中”——五一前厂房消防检查纪实

检查人员: Scott, Jason, Willson, Hanson 检查时间: 2023年4月28日 检查地点: 1厂房、2厂房室内外 检查内容: 一、室内外消火栓: 室内栓外观正常; 室外栓: 栓体防冻防尘套破损、遗失,消防栓缺少防撞保护; 按规定距离厂房外墙不宜小于5…...

UNIX环境高级编程——进程关系

9.1 引言 本章详细说明进程组以及会话的概念,还将介绍登录shell(登录时所调用的)和所有从登录shell启动的进程之间的关系。 9.2 终端登录 9.3 网络登录 9.4 进程组 每个进程除了有一进程ID之外,还属于一个进程组,进…...

C# ref和out用法和区别

首先:两者都是按地址传递的,使用后都将改变原来参数的数值。 其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空&am…...

信息复制的革命:印刷术【提高信噪比】

文章目录 引言I 保证信息不被噪音所影响1.1 校对抄写错误的方法1.2 印刷术II 雕版印刷和活字印刷2.1 雕版印刷术2.2 毕昇的胶泥活字印刷2.3 古腾堡的铅活字印刷引言 科学的诞生,丰富了信息产生的源头。文字和纸张,加速了信息的传播和文明的进步。I 保证信息不被噪音所影响 复…...

【MySQL】事务

事务是一组操作的集合,我们将一组操作视为一个整体,所以事务里面的操作的时候要么同时成功,要么同时失败,之所以会有事务也是因为我们在实际生活中会用到 最典型的例子就是转账操作:A向B进行转账,A这边扣款成功的同时B那边一定是收款成功的,如果没有事务的话就会出现A扣款成功但…...

学习HCIP的day.03

目录 OSPF:开放式最短路径优先协议 OSPF的数据包 -- 5种 OSPF的状态机 OSPF的工作过程 OSPF的基础配置 关于OSPF协议从邻居建立成为邻接的条件 OSPF的接口网络类型 OSPF:开放式最短路径优先协议 无类别链路状态型IGP协议;由于其基于拓…...

Maven项目的配置

Maven是什么?它的作用是什么? Maven是一种开源的构建工具,它可以自动化构建、测试、部署和管理Java项目。它提供了一个中心化的构建过程,包括依赖管理、项目结构管理、插件管理等,使得开发人员更方便地维护和协作应用…...

Spring Boot使用(基础)

目录 1.Spring Boot是什么? 2.Spring Boot使用 2.1Spring目录介绍 2.2SpringBoot的使用 1.Spring Boot是什么? Spring Boot就是Spring脚手架,就是为了简化Spring开发而诞生的 Spring Boot的优点: 1.快速集成框架,提供了秒级继承各种框架,提供了启动添加依赖的功能 2.内…...

6WINDGate-overview

6WINDGate Overview Author:Once Day Date:2023年4月29日 本文是对6WIND官网文档的整理和翻译,仅供学习和研究之用,原始文章可参考下面文档: 6WINDGate Documentation - 6WIND6WINDGate Modules — 6WINDGate Modul…...

Java8新特性-流式操作

在Java8中提供了新特性—流式操作,通过流式操作可以帮助我们对数据更快速的进行一些过滤、排序、去重、最大、最小等等操作并且内置了并行流将流划分成多个线程进行并行执行,提供更高效、快速的执行能力。接下来我们一起看看Java8为我们新增了哪些便捷呢…...

Nautilus Chain Layer 3 圆桌会议圆满举办,超4.8K用户观看

在 4 月 21 日,Nautilus Chain 举办了以 “Layer 3 区块链的意义和发展以及Crypto的演变”为主题的线上圆桌会议,我们邀请了众多行业嘉宾包括 GitcoinDAO社区管理者Bob jiang、Whalers Community 发起者崔棉大师、Chatpuppy 联合创始人 古千峰、Whalers …...

本地elasticsearch中文分词器 ik分词器安装及使用

ElasticSearch 内置了分词器,如标准分词器、简单分词器、空白词器等。但这些分词器对我们最常使用的中文并不友好,不能按我们的语言习惯进行分词。 ik分词器就是一个标准的中文分词器。它可以根据定义的字典对域进行分词,并且支持用户配置自…...

Java 中的异常处理机制是什么?如何使用它来处理程序中的异常?(七)

Java 中的异常处理机制是一种重要的编程技术,它能够帮助程序员更好地管理程序中出现的异常情况。本文将详细介绍 Java 中的异常处理机制,并提供示例来说明如何使用异常处理机制来捕获和处理程序中的异常。 什么是异常? 在程序运行过程中&am…...

基于UDQ的并网单相逆变器控制【同步参考系下单相并网全桥正弦PWM逆变器闭环控制】(Simulink)

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

JAVA开发——常用的注解

目录 spring spring MVC Spring Boot AOP MyBatis MyBatis-Plus JavaWeb开发 spring Autowired:自动安装,通过类匹配自动注册相应的Bean。 Component:将一个通用的 Java 类标记为 Bean,由 Spring 容器管理。 Controller&…...

【Java笔试强训 24】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥年终奖 …...

SpringCloud详解

SpringCloud是一个基于SpringBoot的分布式系统开发框架,它能够帮助我们快速、稳定地构建分布式系统。本篇博客将对SpringCloud进行详细解析,介绍SpringCloud的主要组件和相关应用场景,同时提供代码示例以帮助读者更好地掌握SpringCloud的实际…...

如何保障网络安全

网络安全是一个涵盖范围广、深入浅出的话题。随着互联网在现代社会中扮演的重要角色日益突出,网络安全问题成为各个领域所关注的焦点。在此,我们将从以下几个方面来阐述网络安全的重要性,并讨论几种保障网络安全的方式。 一、网络安全的重要性…...

网络基础:socket套接字

文章目录 1. 前导知识1.1 源MAC地址和目的MAC地址1.2 源IP地址和目的IP地址1.3 MAC地址和IP地址的配合1.4 源端口号和目的端口号1.5 Socket1.6 UCP协议和TCP协议1.7 网络字节序高低位高低地址大端和小端网络字节序常用转换函数 2. socket 网络编程2.1 socket 常见接口创建套接字…...

程序员如何学好PHP?做好这五个方面就够了

今天我想和大家分享一下程序员的第一份工作对自己的意义以及影响。首先,我们都知道第一份工作很重要,因为它决定了你以后的职业生涯的方向。你的第一份工作做的什么方向,很可能就是你以后职业生涯中最主要的方向。对我个人而言,我…...

【开源项目】Build your own X 构建自己的项目

【开源项目】Build your own X 构建自己的项目 简介 Build your own X 是一个精心收集了大量资源的项目指南,可以通过从头开始重新创建我们最喜爱的技术来掌握编程。 项目地址: https://github.com/codecrafters-io/build-your-own-x这些项目里的资源…...

在.NET Core中正确使用HttpClient的方式

HttpClient 是 .NET Framework、.NET Core 或 .NET 5以上版本中的一个类,用于向 Web API 发送 HTTP 请求并接收响应。它提供了一些简单易用的方法,如 GET、POST、PUT 和 DELETE,可以很容易地构造和发送 HTTP 请求,并处理响应数据。…...

【C++】位运算类题目总结

文章目录 一. 位运算符脑图二. 相关题目1. 统计二进制数中0的个数2. 数组中只出现一次的数字3. 数组中只出现一次的数字 II4. 不用加减乘除做加法 一. 位运算符脑图 二. 相关题目 1. 统计二进制数中0的个数 解题思路:x & (x-1);它的作用是每次循环…...

Node服务端开发【NPM】

文章目录 前言NPM使用NPM使用场景NPM的常用命令NPM命令使用介绍使用NPM安装模块下载三方包全局安装VS本地安装本地安装全局安装全局模块路径查看与路径修改 卸载模块更新模块搜索模块NPM服务器发布包 NPM换源nrm全局安装 nrm:nrm ls 列出来现在已经配置好的所有的原地址nrm use…...

如何用织梦cms做网站/新闻头条今日要闻

转自:https://wenku.baidu.com/view/1ef7c985b9d528ea81c779b8.html 在人像和微距摄影中经常会遇到背景虚化的手法。所谓背景虚化,就是说在保证被摄主体清晰的同时,将远处的背景模糊掉,从而突出被摄主体。很多人会问,…...

建站是什么东西/查权重工具

$to 变量里面是放是发送到的号码 $title 变量里面放的是发送邮件的主题 $content 变量里面放的是发送邮件的内容...

网站授权系统怎么用/重庆seo搜索引擎优化优与略

目录一、简介二、验证性实验1)ipconfig2)ping3)tracert4)ARP5)DHCP6)netstat7)DNS8)cache一、简介 本计算机网络实验教程由验证性、Wireshark 和 Cisco Packet Tracer 实验等三个部…...

大数据抓取客户软件/seo与sem的区别

...

济南能源建设网站/台州网站建设

今天无聊看了一下这个复选框的用法,用它来制作选择题的确是不错的选择。分别在组件面板拖动四个组件, 修改它的标签,让它成为自己适合的答案。还有一些data 的值,和选中状态等。 设置完组件的属性后,开始我们的制作&am…...

如何编辑做网站/西安优化seo托管

我必须创建字体为Times New Roman、字体大小为16的内容。如何使用python脚本创建? 我的示例脚本import xlwt workbook xlwt.Workbook(encoding ascii) worksheet workbook.add_sheet(My Worksheet) font xlwt.Font() # Create the Font font.name Times New Ro…...