网络层协议------IP协议

2023-11-09

IP协议

IP协议:其实就是TCP/IP协议中对于网络层的一个协议(注意IP协议是TCP/IP协议族中最为核心的协议,因为对于上层的数据,都会以IP数据报的格式进行传输)。

基本概念

由于IP协议是网络层的协议,那么我们首先了解一下网络层主要是解决什么问题的:

1.网络层:主要任务是实现网络互连,进而实现数据包在各网络之间的传输。

  • 如果对于一个小型网络而言,它只是实现其内部通信,那么只需要实现这个自己所在网络中的数据链路层和物理层即可。(因为在同一个网络中的主机并不需要网络层去选择路线进行转发数据)
  • 对于一个大型网络而言,它包含有很多小型网络,而对于这不同小型网络上的主机在进行数据传输的时候,就必须由网络层进行路由划分,选择合适的路径将数据报转发给目的主机。
    在这里插入图片描述
    如上图:对于不同网络的主机B和主机C进行通信,会将数据经过多个路由器进行转发,最后到达目的主机。

路由器作用:目前在上图的作用是链接的不同的网络,对网络层的要传输的数据报进行解析,从而给其寻找路径(寻找通向目的主机的道路)和转发数据。

2.要实现网络层的这些任务,要解决的问题有哪些?(这些问题我们会在下面一一解答)

  • 网络层向上层提供的是什么服务。
  • 网络中的寻址问题。
  • 路由选择问题。

通过上面的网络层主要的任务和解决的问题,我们可以看到,对于IP协议,它主要任务是负责地址管理和路由选择。

注意:在学习的时候我们经常会了解到IP协议提供的是不可靠,无连接的数据包传输服务。

其实是这样的:

  • 不可靠:IP协议不能保证IP数据包能成功的到达目的地。(由于IP协议仅提供最好的传输服务,所以对于一些数据报出现传输错误的时候,它有一个最简单的处理方式,就是丢弃该报文,但是这可以理解为IP协议的默认处理方式,但是如果它的上层协议为TCP协议(我们知道TCP协议提供的是可靠的,有连接的服务),那么对于IP协议此时对出错的数据包会进行对应的挽救措施,所以对于可靠服务还是不可靠服务取决于上层的规定。
  • 无连接:IP协议并不维护任何关于后续数据报的状态信息。(在IP协议中,每个数据报的处理都是相互独立的。也就是说,IP协议对数据报的的接收顺序可以不按照发送顺序进行,也就是对于同一个主机向另一个主机发送数据,而在网络层的这些IP数据包,会选择不同的路径进行传输)

协议头格式

如下图:
在这里插入图片描述
如图,我们可以看到一个IP协议的数据包头部格式(其中横向表示的是32个比特位,从左到右是0~31,这样安排的原因是,对于在TCP/IP首部中的所有二进制整数都是按照大端字节序的传输方式(首先是0 ~ 7bit,接下来是8 ~ 15bit依次往后),所以也叫做网络字节序(大端))。

大概上面这些部分,每个部分所代表的内容如下:

  • 4位版本号:用于表示协议的版本。(也叫ipv4)
  • 4位首部长度:用4个bit位去表示IP首部的长度,由于4个比特位最大代表的数字为15,所以首部最长有60个字节。(以4字节为单位,而4比特位最大表示15,然后*4,所以首部最长有60个字节)
  • 8位服务类型:占有8bit位,其中分布如下:
    ①3bit位的优先权子字段。(现在已经丢弃)
    ②4bit位的TOS子字段。(分别表示:最小时延、最大吞吐量、最高可靠性、最小费用)
    注意:这4位只能置其中的1bit位。(因为这四者是相互冲突的,而对于不同的应用而言,会对不同的数据传输时不同方面要求是不同的,例如:FTP文件传时协议要求的是有最大吞吐量,其的TOS值中将最大吞吐量的位置置为1,其余为0。 如果这4个bit位全为0,那么只指该服务为一般服务。)
    ③1bit位的保留。(为了以后扩展用,但是必须制位0位)
  • 16位总长度:总长度字段代表的是IP数据报的总长(报头+数据),其中根据首部长度和总长度,我们就可以知道这个IP数据报中内容的其实位置和长度。由于总长度为16为,所以能表示的数据报的最大长度为2的16次方,也就是64k。(非常重要,因为如果一个数据报很少,所以需要填充一些数据以达到最小的长度,如果这个时候没有总长度字段,我们就无法知道那些需要传输的数据是多少,此时就不会将填充字段误以为是数据进行接收)
  • 16位标识:唯一标识该主机发送的数据,用于数据被分片后在接收端进行重组的时候,标识当前的分片属于哪个原始报文,相同的原始报文的分片具有相同的分片标识。
    链路层的MTU:为最大传输单元,限制一个数据帧在网络中的传输大小。(如果IP层有一个数据报要传递,而且数据的长度要比链路层的MTU还要大,那么该数据报在IP层要进行分片处理,把数据报分成若干片,这样每片小于MTU就可以进行传输)
  • 3位标志:其中每个bit位的作用如下:
    ①第一个bit位保留。(现在不用,为以后扩展留用)
    ②第二个bit位表示禁止分片。(此时如果数据报的长度超过MTU,那么IP模块就会丢弃该数据报)
    ③第三个bit位表示"更多分片"。(如果分片了的话,最后一个分片置为1,其他置0。也就类似一个结束标志)
  • 13位片偏移:是分片相对于原始IP报文开始处的偏移,其实就是在表示当前分片在原始报文中处在哪个位置。并且他是以8字节为单位的(因为13位最大表示的数据为8192,而一个原始数据报的大小为64k,是81928得到的),意思为实际偏移字节数是这个值8得到的。因此除了最后一个报文外,其他报文的长度必须是8的整数倍(否则报文就不连续了)
  • 8位生存时间TTL:数据报可以经过的最多路由器的数量,它指定了数据报的生存时间。TTL的初始值一般是由源主机给定,一旦经过一个路由器,该值就会-1,当该值为0时,数据报就会被丢弃,并发送ICMP报文(告诉其报文传输失败)通知源主机。
  • 8位传输层协议:用于表示上层协议。(由于数据在传输到对方的时候,会进行数据分用,也就是要选择一个传输层的协议去解析数据,而此时源端与目的端的传输层协议必须一致,所以该字段可以让目的端知道用什么协议进行解析)
  • 16位首部校验和:校验数据是否一致。(使用CRC来进行校验,来鉴别头部是否损坏)
  • 32位源ip地址和32位目的端ip地址:用于表示通信的两端主机。
  • 0~40字节选项数据:记录一些信息,大多是对于路径了,时间了一些的信息。(但是使用很少,并且并不是所有的主机和路由器都支持)

网段划分

我们知道,ipv4地址是一个uint32_t类型的数据,那么它对应的IP地址数量大概有42亿9千多万个,所以其实IP地址是不够的,而我们是如何设置IP地址才能让每台主机的IP地址不重复呢?

答:为了解决这样的问题,所以也就出现了分网络进行地址管理,一个网络中的主机能够被分配到的IP地址都会具有相同的网络号,这个时候,只要每个网络的网络号不同,那么就可以将网络地址简单管理了。

1.IP地址的组成:网络号+主机号。(其实也是网络中唯一标识一台主机)
其中:

  • 网络号:保证相互连接的两个网段具有不同的标识。(一个网络分配的IP地址中网络号是相同的)
  • 主机号:同一网段内,主机之间具有相同的网络号,但是各自的主机号不可相同。(是一台主机在该网络中的标识)
  • 在这里插入图片描述

①:通过合理的设置主机号与网络号,就可以保证在相互连接的网络中,每台主机的IP地址都不相同。
②:IP地址占用4个字节,32个bit位,并且采用点分十进制表示。

2.DHCP技术

①:由于手动管理IP地址,是一件非常麻烦的事情,所以推出了DHCP技术。
②:DHCP技术是一种动态分配IP地址的技术,能够自动的给一个网络中新增加的主机分配IP地址,避免了手动管理IP地址带来的不便。(而一般的路由器都会带有DHCP功能,因此路由器也可被称作DHCP服务器)

3.早期网段划分

早期的网段划分中,将所有的IP地址分为五类,如下图所示:

在这里插入图片描述
其中:

  • A类IP地址:网络号占1个字节并且网络号最高一位固定为0,主机号占3个字节。(所以对于A类IP地址,它表示的网络号很少,但是每个网络中对应的主机号量很大,适合用于组建超大型网络)
    ①:A类IP地址的网络号范围:0~127。
    ②:A类IP地址的每个网络中最多有255255255个主机。(由于是点十分表示方法,所以每个字节对应一个段,而一个字节所表示的最大数量就是255)
    ③:A类IP地址的范围为:0.0.0.0 ~ 127.255.255.255。
  • B类IP地址:网络号占2个字节并且网络号最高两位固定为10,主机号占用2个字节。(用于组建一些中型网络)
    ①:B类IP地址的网络号范围:128.0 ~ 191.255。
    ②:B类IP地址的每个网络中最多有255*255个主机。
    ③:B类IP地址的范围为:128.0.0.0 ~ 191.255.255.255。
  • C类IP地址:网络号占3个字节并且网络号最高三位固定为110,主机号占用1个字节。(用于组建小型网络)
    ①:C类IP地址的网络号范围:192.0 ~ 223.255。
    ②:C类IP地址的每个网络中最多有255个主机。
    ③:C类IP地址的范围为:192.0.0.0 ~ 223.255.255.255。
  • D类IP地址:多播地址,最高四位固定为1110。
  • E类IP地址:保留地址,最高五位固定为11110。

(由于能分配给网络中主机的IP地址只有A类、B类和C类,所以对于D类和E类就不做过多了解)

4.由于现代的网络发展速度飞快,大多数组织基本上都申请B类网络,所以导致B类网络地址很快就被分配完了,而A类却浪费了大量地址(由于A类中每个网络号对应的的主机号的数量实在太大了,而对于一个网络而言,他一般情况下是不会存在有这么多的主机号的)。所以针对这样的情况,引入了一个新的划分方案CIDR方案。

①:CIDR方案中提出引入一个新的字段-----子网掩码

②:子网掩码:是一个uint32_t类型的数据(也就是和IP地址一样,使用的是4个字节,并且表示方法也是以点分十进制表示),但是其中的数据是由连续的二进制1组成。

特点如下:

  • 引入一个额外的子网来区分网络号和主机号。
  • 子网掩码通常以二进制连续的0来结尾。
  • 将IP地址和子网掩码进行“按位与”操作,得到的结果就是网络号。
  • 网络号与主机号的划分与这个IP地址是A类、B类还是C类无关。

这样不管是A类、B类还是C类IP地址,都可以在IP地址下去划分子网,这样就大大减少了IP地址的浪费。

如下例子:
在这里插入图片描述①例子1:IP地址与子网掩码相与就可以得到网络号,并且在该子网中,主机号占有一个字节,所以子网范围如上所示。

②例子2:IP地址与子网掩码与得到网络号,但是在该子网中,它的最后一个子节的二进制是"1111 0000"(只看最后一位的原因是子网掩码前三个子节的十进制都是255,二进制表示为"1111 1111",这个数与任何数就等于与它与的哪个数),而IP地址的最后一个子节的68表示的二进制是"0100 0100",所以与下来之后是"0100 0000"对应的十进制也就是64,这样就可以得到其网络号是多少,然后由于子网掩码最后的bit位为0的位置有4个,最大数量表示为15,所以子网地址的范围如上所示。

由上面可以了解到,对于子网,也就是取IP地址的一个主机号的几位固定为子网(所以对于网络号所占子节对应的子网掩码所占子节的位置,子网掩码在该范围所占有的bit位全为1),然后在该子网下去划分主机号,这样就可以避免像A类网络那样,每个网络中的主机号庞大。

例如有一个公司申请了一个C类网络192.168.2.0/24(其中/24表示的是子网掩码,从高到底,24个bit位为1,8个bit位为0),这时候要将网络平均划分为4个子网。

则划分的方式为:由于是C类网络,主机号占8个bit位,取最高的两个bit位用来划分,因为2个bit位最大可以表示4个数字(00/01/11/10),而此时这写子网的掩码就为"255.255.255.192"(因为最后一个字节的最高两位已经被占用了),所以每个子网中所含有主机号的数量为剩下的6个bit位所能表示的最大数量。

特殊的ip地址

1.对于可以分配的A类、B类和C类中。
IP地址是由网络号和主机号组成,但是在特定的范围内,并不是每个主机号都可以分配给网络中的主机,其中会有两个特殊的IP地址。

  • 一个IP地址中主机号所占bit位全为"0"的地址不能分配给网络中的主机,因为该地址是网络地址,不能分配给主机或者路由器的各接口。(网络地址,作为该网络的唯一标识)
  • 一个IP地址中主机号所占bit位全为"1"的地址也不能分配给网络中的主机,因为该地址为该网络的广播地址,将数据发送给局域网的广播地址,而广播地址也就顾名思义,该数据会发送给该局域网中的每个主机。(是udp协议相较于tcp协议多出的一个功能,就是局域网广播)

2.特殊的IP地址:

  • 0.0.0.0:用于识别本机上的全部IP地址,也代表这个局域网。(通常用于服务器的绑定监听地址)
  • 255.255.255.255:全网广播地址,用于DCHP请求的时候目标主机地址。(原理是因为一个主机连接到一个网络中,会给路由器发送DHCP请求,要求路由器给字节分配IP地址,但是对于网络通信,这个主机必须知道目的端的IP地址,而新连接的主机并不知道,所以此时发送广播数据,只要是在其链路上的路由器接收到后,都会认为这个请求是发送给自己的,然后就给其分配ip地址)
  • 127.*:该段的IP地址用于本机环回测试(loop back test),而一般情况下通常是127.0.0.1(该环回地址最为经典)
    环回地址:主机向自身发送通信的一个特殊地址。为同一台设备上运行的TCP/IP应用程序和服务之间相互通信提供了一条捷径。通过ping换回地址,可以测试本机上的TCP/IP配置。

私网ip地址和公网ip地址

1.一个组织内部组建局域网,但是IP地址仅限于局域网之间的通信,而不是连接到Internet网上,所以在该局域网中,这些IP地址就是私网IP地址,理论上使用任何IP地址都可以但是不可以与公网IP地址重复,所以RFC1918文档规定:

  • 10.*,前8位是网络号。(1个大型私网网段)
  • 172.16.* ~ 172.31.* :前12位是网络号。(16个中型私网网段)
  • 192.168.*:前16位是网络号。(256个小型私网网段)

包含在这个范围中的,都是私网IP,其余则是全局IP(也称公网IP)。

2.如下图:
在这里插入图片描述

  • 一个路由器可以配置两个IP地址,分别为LAN口IP地址(子网IP地址)和WAN口IP地址(公网IP地址)。
  • 而对于一个路由器而言,连接LAN口IP地址的主机,都是从属于这个路由器的子网中的主机。
  • 对于不同路由器而言,它们的子网IP通常都是一样,几乎都是192.168.1.1,但是子网内的主机IP地址不可相同,而组网之间,其内部的主机IP地址是可以相同的。
    ①:子网内主机IP地址不可相同:主要是为了区分子网内部的不同主机,因为对于一个子网来说,连接它的就是主机,而该主机的网络号都相同,如果说此时主机号也相同,那么就无法进行区分了。(就如上图所示的,同一个子网内部, 不同的主机网络号相同,主机号必然不会相同)
    ②:组网之间,其内部的IP地址是可以相同的:因为一个路由器会配置两个IP地址,而如果说一个网络中的主机与另一个网络中的主机要进行通信时,当数据传输到路由器上时,路由器发现这是与外网的通信,就会转换IP地址,将源端IP地址转换成自己的公网IP地址(逐级替换成WAN口IP地址),然后进行网络通信。(这也就是NAT技术)所以在不同的网络间进行通信的时候,其实都是其公网IP地址间的通信,那么这样对于不同的局域网(组网)来说,它们的私网内的IP地址是可以相同的。

ip地址的数量限制

上面我们知道,IP地址的是一个4字节的32位的正整数(也就是uint32_t类型),它所能代表的最大IP地址的数量不到43亿,而TCP/IP规定,每台主机都必须有一个IP地址。(实际上,因为有一些特殊IP地址的存在,即便是这些可以被表示出来的IP地址,有的也不能被用到实际的主机IP地址中。并且当前的路由结构没有层次结构,属于平面型结构,每个网络都需要一个路由表目。所以随着网络的发展,一个具有多个网络的网站就必须分配多个C类地址)

1.CIDR(无类别的域间路由选择,其实也就是提出了子网掩码)在一定程度上缓解了IP地址不够用的问题,但是它只是停留在对原有数量的IP地址进行更高的利用,但是原有的数量是没有变化的,所以仍然是不够用的。

2.针对以上的问题,给出了三个解决方案:

  • 动态分配IP地址:只给接入网路的设备分配IP地址,因此同一个MAC地址设备,每次接入到互联网中,得到的IP地址不一定是相同的。
  • NAT技术;(下面会将)
  • IPv6:虽然说IPv6相较于IPv4来说,地址数量大大提升,但是他并不是简单的IPv4的升级版,这两个协议可以说是互不相干,彼此并不兼容。IPv6使用的是16字节128位来表示一个地址,但是现在还没有普及。

3.NAT技术:

这个技术在很大程度上解决了IP地址不够用的情况,主要是通过将IP地址进行重复使用。(这里的重复使用并不会违反网络中的IP地址不可重复的这个规定)

1.在上面我们了解到,对于一个局域网来说,他是有一个私网IP地址和一个公网IP地址。(其实就是私网IP地址用于局域网内部的通信,而公网IP地址用于不同局域网间的通信)

2.对于私网IP地址来说,它只用于局域网内部的不同主机间的通信,而在不同的局域网中的主机进行通信的时候,它们的通信其实就不是两台主机间的通信,而是其公网IP地址间的通信。所以说,对于不同的私网而言,它们内部的IP地址是可以重复的。(全局IP要求必须唯一,而私有IP不需要,在不同的局域网中出现相同的私有IP是完全不影响的,所以这也就大大减少了IP地址的使用,利用重复使用IP地址,可以缓解因IP地址数量不足带来的不利)

3.IP转换技术:将私网IP转换为公网IP进行数据通信。(不同网络间主机的通信)
如下图:
在这里插入图片描述
假设客户端A要和服务器进行通信,此时客户端A将数据发送出去,被自己所在网络的路由器接收,路由器接收后,发现该目标IP地址是外网的,所以就会将自己的公网IP地址换上去,成为源端IP地址,然后发送给服务器。大概过程如下:

  • NAT路由器将源端IP地址10.0.0.10转换为202.244.174.37;
  • NAT路由器收到外部数据时,又会把目标IP从202.244.174.37替换回10.0.0.10;
  • 在NAT路由器内部,有一张自动生成的,用于地址转换的表;
  • 而当10.0.0.10的客户端A第一次向163.221.120.9的服务器发送数据的时候,这时候就会在表中生成映射关系(这种映射关系就是从发送主机到接收主机的)。

其中:对于每个私网的主机而言,它们在与外网的主机进行通信的时候,它们的路由器在进行转发的时候,会给其安排一个不同于其他主机的端口号,这样会防止同一个私网中的不同主机请求相同的外网的主机时出现的数据混淆,如下图:
在这里插入图片描述
其中:客户端A和客户端B同时请求服务器,在NAT路由表中的转换表在进行转换的时候,会对不同的主机转换成不同的端口号进行。

4.NAT技术的缺陷
因为NAT技术非常依赖这个转换表,所以:

  • 无法从NAT外部向服务器建立连接;
  • 转换表的生成与销毁都有额外开销;
  • 通信过程中,一旦NAT出现异常,那么所有的TCP连接都会断开;
  • 私网间的主机无法之间通信;(还是要通过NAT先发送个服务器,然后服务器通过识别,再发送回来,私网之间的通信和外网之间的通信模式相同)

5.NAT和代理服务器

①代理服务器:其实就是一个中间商的作用,客户端向代理服务器发送请求,代理服务器将请求转发给客户端真正要请求的哪个服务器,而服务器在对请求进行响应,将响应数据发送给代理服务器,然后代理服务器将响应再转发给客户端。(通常用于翻墙(广域网中代理,比如去看外网的一些资源)和负载均衡(局域网中代理))

其实代理服务器的做法和NAT技术的做法是相类似的,一般的路由器都配备有NAT设备的功能,其局域网下的主机在请求外网的服务器时,都会在路由器中的NAT设备下进行中转。

②:两者如此类似,那么到底有什么区别呢?

  • 目的不同:
    ①:NAT设备是网络基础的设备之一,主要目的是为了解决IP地址不够的问题。
    ②:代理服务器是像软件类似的东西,主要是为了满足人们对外网的信息以及网速的要求,主要是贴合具体应用。
  • 工作地点不同:NAT技术主要工作在网络层,代理服务器主要工作在应用层。
  • 使用范围不同:NAT一般是在路由器等局域网接口使用,而代理服务器使用比较广泛,对于局域网、广域网都不在话下。
  • 存在位置不同:NAT一般集成在防火墙、路由器等硬件设备上,而代理服务器是一个软件,通常在服务器上。

③:正向代理和反向代理

  • 正向代理:用于请求和转发。
  • 反向代理:往往作为一个缓存。

路由

在大型网络中,两台主机之间的通信是要经过很多个不同的路由器进行转发,才能到达对端进行通信的。(因为网络是一个复杂的星型网络结构)

所以其实一台主机发送的数据从源端主机通往对端主机是经过很多路由器进行转发的,如下图:

在这里插入图片描述

如图,当主机A与主机B进行通信的时候,会经过路由器A、B、C、D四个路由器进行转发最终到达主机B。(这样的过程也被称为"跳")

而这些路由器是如何知道主机B在哪里,然后如何安排一个路线呢?

1.路由表

①:每一台节点设备上都配备有一个路由表(是在每一个网段中都有,每个节点都有),这个路由表中目的地址、网络掩码、标识路由加入IP路由表的优先级、路由开销、输出接口和下一跳IP地址这些信息。(这些信息的存在,使得IP数据包在网络中能够精准的找到目的地址)

②:IP数据包到达一个路由表的时候,会经历怎样的操作

一个路由器在拿到IP数据包时,会取出其目标的IP地址,然后在自己的路由表中进行查看,找到合适的"下一跳"后,然后转发给"下一跳",然后继续类似的操作。

具体操作如下:

  • 首先,源端主机将自己的IP地址与子网掩码相与,就可以得到自己的所在网络地址。
  • 源端主机将目的端IP地址与自己的子网掩码进行相与,就可以得到目的网络地址。
  • 然后进行比较,如果相同,则目的主机就是本网络中,如果不相同,则就会"跳到下一个主机"然后进行如上操作。
  • 如果所有的路由表项都没有。
  • 则将数据转发给自己的网关设备。(网关数据其实就是路由器,也就是当前这个目的端IP地址不是该网络中的,所以他就不知道给谁发送,所以就给路由器了,路由器连接的网络更大些,它或许知道)

如下图:
在这里插入图片描述
如上图,就是不同网络间主机的通信情况。

2.例题
如图,为一个路由表:
在这里插入图片描述
其中:

  • 这台主机有两个网络,一个网络接口连到192.168.10.0/24网络,另一个网络连接到192.168.56.0/24网络。
  • 上面的英文所代表的依次为:
    ①:Destination表示目的网路地址。
    ②:Gateway表示子网掩码。
    ③:Genmask表示下一跳地址。
    ④:Iflags表示发送接口。
    ⑤:Flags中U标志表示此条目有效,G表示此目的条目下一条的地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发。

例如:如果发送的数据包目的地址是192.168.56.3

此时操作如下:

  • 首先和第一行的子网掩码进行相与,得到192.168.56.0,与其目的网络地址不相同。
  • 然后依次往下,当到第二行的时候与其子网掩码进行相与,得到的IP地址刚好就是其目的网络IP地址,因此该数据包从eth1转发出去。
  • 并且因为192.168.56.0/24刚好就与eth1 接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发;(因为路由器是连接不同的网络的,连接的不同局域网而eth1是该网络中的一个子网,所以之间进行转发即可)

如果上例中,一致执行到了最后一行都没有找到合适的IP地址,那么证明该目的主机就不再该网络中,所以这个时候就要去找路由器(该网络的默认网关)进行转发了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网络层协议------IP协议 的相关文章

  • Java的API帮助文档

    JDK帮助文档 SUN公司为JDK工具包提供了一整套文档资料 我们习惯上称之为JDK文档 JDK文档中提供了Java中的各种技术的详细资料 以及JDK中提供的各种类的帮助说明 JDk文档是Java语言的完整说明 大多数书籍中的类的介绍都要参
  • 什么是真正的实时操作系统

    转自 http club topsage com thread 513248 1 1 html 1 首先说一下实时的定义及要求 参见 Donal Gillies 在 Realtime Computing FAQ 中提出定义 实时系统指系统的
  • [Atcoder ABC222] F - Expensive Expense

    Time Limit 4 sec Memory Limit 1024 MB Score 500 points Problem Statement The Kingdom of AtCoder is composed of N N N tow
  • python+Django的web开发实例

    一 创建一个项目 如果这是你第一次使用Django 那么你必须进行一些初始设置 也就是通过自动生成代码来建立一个Django项目 一个Django项目的设置集 包含了数据库配置 Django详细选项设置和应用 特性配置 具体操作步骤如下所示
  • TaiShan 200服务器安装Ubuntu 18.04

    TaiShan 200服务器安装Ubuntu 18 04 0 镜像下载 1 准备工作 1 1 软件硬件环境准备 1 2 组网规划 1 3 磁盘分区规划 1 4 可选 RAID配置 2 通过光驱安装Ubuntu 18 04 0 镜像下载 ub
  • 峰值电流模式Buck控制器

    图1 7 1峰值电流模式Buck Converter方块图 图1 7 1包含两个回路 分别是外回路 电压控制回路 和内回路 电感电流控制回路 外回路 电压控制回路 此回路类似与输出电压控制模式类似 Vcomp为输出电压与基准电压通过比较器而

随机推荐

  • Android Studio 中使用uiautomatorviewer插件

    1 综述 Android Studio是Google官方提供的一款用于开发Android应用程序的集成开发环境 IDE 它基于IntelliJ IDEA开发而来 为开发者提供了完整的工具链 包括代码编写 调试 测试 性能优化等 Androi
  • C++实现MySQL数据库连接池

    C 实现MySQL数据库连接池 涉及技术 MySQL数据库编程 单例模式 STL容器 C 11多线程 线程互斥 线程互斥 线程同步通信和unique lock 智能指针shared ptr lambda表达式 生产者 消费者线程模型 项目背
  • 职场日常:测试常用测试工具盘点,你用过几个?

    测试工具永远是软件测试人员的得力助手 不能完全依赖工具 但也不能没有工具 在学习软件过程中 要著中软件测试工具的使用 1 测试管理工具 禅道 简单好用 市场主流 互联网行业居多 Jira 简单好用 bugzilla 功能简单 svn 代码和
  • StringBuffer简单使用

    StringBuffer简单使用 一 简介 StringBuffer 是可以存储和操作字符串 即包含多个字符的字符串数据 String类是字符串常量 是不可更改的常量 而StringBuffer是字符串变量 它的对象是可以扩充和修改的 St
  • 【Linux】如何在Linux下提交代码到gittee

    文章目录 使用 git 命令行 创建项目 三板斧第一招 git add 三板斧第二招 git commit 三板斧第三招 git push 其他几个重要的命令 git pull 将远端同步到本地 git rm 删除 git log 查看提交
  • 如何让 useEffect 支持 async/await?

    大家在使用 useEffect 的时候 假如回调函数中使用 async await 的时候 会报错如下 看报错 我们知道 effect function 应该返回一个销毁函数 return返回的 cleanup 函数 如果 useEffec
  • linux 查看运行进程的可执行文件所在目录

    1 获取PID 方法1 执行top命令 然后找到对应的进程 方法2 执行ps ef grep 程序名 2 进入proc目录下对应的进程路径 cd proc 3 sudo ls l user为root的进程需要sudo权限 exe连接的即可执
  • go语言基础-----11-----正则表达式

    1 正则表达式介绍 正则表达式是一种进行模式匹配和文本操纵的复杂而又强大的工具 虽然正则表达式比纯粹的文本匹配效率低 但是它却更灵活 按照它的语法规则 随需构造出的匹配模式就能够从原始文本中筛选出几乎任何你想要得到的字符组合 Go语言通过r
  • Java-API简析_java.lang.RuntimePermission类(基于 Latest JDK)(浅析源码)

    版权声明 未经博主同意 谢绝转载 请尊重原创 博主保留追究权 https blog csdn net m0 69908381 article details 132571263 出自 进步 于辰的博客 因为我发现目前 我对Java API的
  • 【MySQL安装问题】找不到MSVCR120.dll,无法继续执行代码。

    Q 由于找不到MSVCP120 dll 无法继续执行代码 重新安装程序可能会解决此问题 A 参考解决方法链接由于找不到MSVCP120 dll 无法继续执行代码 重新安装程序可能会解决此问题 琴时 博客园 解决方式 点击进入微软官网下载地址
  • MATLAB 数学应用 初等数学 绘制虚数和复数数据图

    文章最后留了个超实用的matlab在线测试工具 绘制一个复数输入 本文演示如何绘制复数向量 z 的虚部与实部 在此复数输入中 plot z 等同于 plot real z imag z 其中 real z 是 z 的实部 imag z 是
  • docker容器部署pytorch模型,gpu加速部署运行

    参考文章 https www zhihu com search type content q Docker EF BC 8C E6 95 91 E4 BD A0 E4 BA 8E E3 80 8C E6 B7 B1 E5 BA A6 E5
  • thinkphp6 入门教程合集(更新中)

    thinkphp6 入门 1 安装 路由规则 多应用模式 thinkphp6 入门 1 安装 路由规则 多应用模式 软件工程小施同学的博客 CSDN博客 thinkphp6 入门 2 视图 渲染html页面 赋值 thinkphp6 入门
  • 组件是如何通信的?技术水平真的很重要!学习路线+知识点梳理

    开头 此文希望能给想跳槽和面试朋友一些参考 金九银十已过 面试的狂热季也已结束 小编也正是选择了在金九十银跳槽 之前在腾讯做了五年Android开发工作 之后感觉公司不一定能继续提供给我想要的发展空间与前景 说白了 有家室 我需要更高的薪酬
  • pandas提取时间里面的年月日_python入门

    时间模块 datetime 1 datetime date date对象 年月日 datetime date today 该对象类型为datetime date 可以通过str函数转化为str In 1 import datetime In
  • 砝码称重问题【dp】

    设有 1g 2g 3g 5g 10g 20g 的砝码各若干枚 其 总重 1000g 要 求 输入 a1 a2 a3 a4 a5 a6 表示 1g 砝码有 a1 个 2g 砝码有 a2 个 20g 砝码有 a6 个 输出 Total N N
  • 【MySQ必知必会】MySQL 是怎么存储数据的?

    文章目录 总结 前言 一 创建数据库 二 确认字段 三 创建数据表 四 插入数据 总结 CREATE DATABASE demo DROP DATABASE demo 删除数据库 SHOW DATABASES 查看数据库 创建数据表 CRE
  • Nginx——Location用法详解

    目录 一 Nginx的Httpp配置简介 二 Location匹配规则 1 精确匹配 2 最佳匹配 3 正则表达式要区分大小写 4 正则表达式不区分大小写 5 开头 通用匹配 6 综合示例 7 root alias指令区别 一 Nginx的
  • Python爬虫入门案例6:scrapy的基本语法+使用scrapy进行网站数据爬取

    几天前在本地终端使用pip下载scrapy遇到了很多麻烦 总是报错 花了很长时间都没有解决 最后发现pycharm里面自带终端 狂喜 于是直接在pycharm终端里面写scrapy了 这样的好处就是每次不用切换路径了 pycharm会直接把
  • 网络层协议------IP协议

    这里写目录标题 IP协议 基本概念 协议头格式 网段划分 特殊的ip地址 私网ip地址和公网ip地址 ip地址的数量限制 路由 IP协议 IP协议 其实就是TCP IP协议中对于网络层的一个协议 注意IP协议是TCP IP协议族中最为核心的