56 网络层
本节重点
理解网络层的作用,深入理解IP协议的基本原理
对整个TCP/IP协议有系统的理解
对TCP/IP协议体系下的其他重要协议和技术有一定的了解
目录
- 前置认识
- ip协议
- 基本概念
- 协议头格式
- 网段划分
- 特殊的ip地址
- ip地址的数量限制
- 私有ip和公有ip
- 路由
- 路由表生成算法
在复杂的网络环境中确定一个合适的路径
1. 前置认识
传输层提供了很多策略,保证数据传输的各种策略,数据丢包等如何处理,那么将数据传输的跑腿活,这个具体工作是由谁来做。这就是接下来要说的网络层,用户需要的是将数据可靠的从A主机到B主机,ip协议本质工作,提供将数据从A主机到B主机的能力
2. IP协议
网络要对所有的主机进行表示。源ip,目的ip来标识源主机和目的主机。每一个局部网络通过路由器和其他局部网络相连,想要到达目的主机,需要先到达目标网络,再找到目标主机,然后是目标进程
3. 基本概念
主机:配有IP地址,但是不进行路由控制的设备
路由器:即配有ip地址,又能进行路由控制
节点:主机和路由器的统称
ip地址就像身份证号一样,每一部分都是设计好,有代表的意义,身份证号由地区码+出生年月和签发机构等构成
4. 协议头格式
- 4位版本号(version):指定IP协议的版本,对于ipv4来说,就是4
- 4位头部长度(header length):IP头部的长度是多少个32bit,也就是length*4的字节数,4bit表示最大的数字是15,单位是4,因此ip头部最大长度是60字节
- 8位服务类型(Type Of Service):3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0),4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本,这四者相互冲突,只能选择一个,对于ssh/telent这样的应用程序,最小延时比较重要,对于ftp这样的程序,最大吞吐量比较重要
- 16位总长度(total length):IP数据报整体占多少个字节
- 8位生存时间(Time To Live,TTL):是数据报到达目的地的最大报文跳数,一般是64,每次经过一个路由,TTL-1,一直减到0还没到达,那么就丢弃了,这个字段主要是用来防止游离报文出现路由循环
- 8位协议:表示上层协议的类型
- 16位头部校验和:使用CRC校验,鉴别头部是否损坏,坏了就丢弃
- 32位源地址和32位目标地址:表示发送端和接收端
- 选项字段(不定长,最多40字节):略
分片与组装
MTU对报文的大小做了限制,规定最大1500字节,如果发出的过大,网络层就需要分片交付,到达目标网络层完成拼接
- 16位标识(id):唯一的标识主机发送的报文,如果ip报文在数据链路层被分片了,那么每一个片里的id是相同的
- 3位标志字段:第一位保留(保留的意思是现在不用,没想好以后用不用),第二位置为1表示禁止分片,这时候如果报文长度超过MTU,ip模块会丢弃报文,第三位标识“更多分片”,如果分片了的话,最后一个分片位置为1,其他为0是一个结束标记
- 13位分片偏移(framegament offset):是分片相对于原始ip报文开始处的偏移,其实就是在表示当前分片在报文中哪个位置,实际便宜的字节数是这个值*8得到的,因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)
如何知道分片了
如果分片了,那么片偏移不等于0,或者更多分片等于1
如何分片
比如一个3000字节的报文,超过了1500,需要分片,先将头部1500字节取出来,设置片偏移为1,然后第二个分片取1480字节,设置报头更多分片1,偏移1500,拼接上去,最后部分添加报头,设置偏移2980,更多分片为0表示结束。这三个标识id是统一的
如何组装
根据偏移排序,去掉除第一个报文的报头,拼接数据。丢弃哪一个都可以通过偏移和标志查出来。如果丢了一个就要全部重发。所以不建议分片,会增加丢包概率
5. 网段划分(重要)
网络号:保证相互连接的两个网段具有不同的标识
主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号
不同的子网其实就是把网络号相同的主机放在一起
如果在子网中新增一台主机,这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网的其他主机重复
路由器本质也是特定一个子网的主机,也要配置ip地址。一定要至少连接2个子网,也就相当于同时在两个子网,暂时认为路由器有多张网卡就行,路由器可以配置多个ip的。一般是一个子网中第一台设备,一般它的ip地址都是:网络号.1,路由器不仅可以进行ip报文的转发,还可以构建子网(局域网)
通过合理设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的ip地址都不相同
那么问题来了,手动管理子网内的ip,是一个相当麻烦的事情
- 有一种技术叫DHCP,能够自动的给子网内新增主机节点分配ip地址,避免了手动管理ip的不便
- 一般的路由器都带有DHCP功能,因此路由器也可以看做一个DHCP服务器
ipv4是4字节的,最多只有42亿个,属于有限的资源,所以需要对ip资源合理的分配
五类划分
过去曾经提出一种划分网络号和主机号的方案,把所有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万五千多个主机,A类地址的子网内的主机数更多
- 然而实际网络架设中,不会存在一个子网内有这么多的情况,因此大量的ip地址都被浪费掉了
CIDR
针对这种情况提出了新的划分方案,称为CIDR(classless interdomain routing)
- 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号
- 子网掩码也是一个32位的正整数,通常用一串“0”来结尾
- 将ip地址和子网掩码进行“按位与”操作,得到的结果就是网络号
- 子网掩码为1,表示对应网络位,0表示主机位
- 网络号和主机号的划分与这个ip地址是A类、B类还是C类无关
下面举两个例子:
划分子网的例子1
划分子网的例子2
可见,子网掩码和ip运算可以得到网络号,主机号从全0到全1就是子网的地址范围
ip地址和子网掩码还有一种更简洁的方法,例如140.252.20.68/24,表示ip地址为140.252.20.68,子网掩码的高24位是1,也就是255.255.255.0
子网掩码可以对ip32位,进行任意划分,内网建设,比如B类主机号16位太多了,可以划出12位给网络,剩下4位作为主机号
6. 特殊的ip地址
将ip地址中的主机地址全部设为0,就成为了网络号,代表这个局域网
ip地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包
127.*的ip地址用于本机环回(loop back)测试,通常是127.0.0.1
7. ip地址的数量限制
我们知道,ip地址(ipv4)是一个4字节32位的正整数,那么一共只有2的32次方个ip地址,大概是43亿左右,而tcp/ip协议规定,每个主机都需要一个ip地址。这意味着,一共有43亿台主机接入网络吗?实际上,由于一些特殊的ip地址存在,数量远远不足43亿,另外ip地址并非是按照主机台数来配置的,而是每一个网卡都需要配置一个或多个ip地址
CIDR在一定程度上缓解了ip地址不够用的问题(提高了利用率,减少了浪费,但是ip地址的绝对上限并没有增加),仍然不是很够用,这时候有三种方式来解决:
- 动态分配ip地址:只给接入网络的设备分配ip地址,因此同一个mac地址的设备,每次接入互联网中,得到的ip地址不一定是相同的
- NAT技术(后面重点介绍)
- ipv6:ipv6并不是ipv4的简单升级版,这时互不相干的两个协议,彼此病不兼容,ipv6用16字节128位来表示一个ip地址,但是目前ipv6还没有普及
8. 私有ip地址和公网ip地址
理解运营商和全球网络
我们是怎么上网,通过调试解调器将模拟光电信号转为数字信号,再交给路由器,路由器构建了局域网,网络在运营商上网需要账号密码,交钱。路由器的管理也有一个账号密码。每个国家的基站等网络都是由运营商和国家完成的
全球网络中,将ip按国家进行了划分。每个国家和地区都有自己的ip地址段。在国内,再次划分,每个ip地址还包含了省和市网段的匹配的信息,市的定位不一定准确。如果别国想访问国内的一台主机,先拿目标ip在全球范围的路由器对比,发现是中国的,然后再交由国内的路由器,判断子网掩码后的所属,到省,到市,一直往下
数据发送过程
如果一个组织内部组建局域网,ip地址只用于局域网内的通信,而不直接连到internet上,理论上,使用任意的ip地址都可以,但是RFC1918规定了用于组建局域网的私有ip地址
- 10.*,前8位是网络号,共16,777,216个地址
- 172.16.到172.31,前12位是网络号,共1,048,576个地址
- 192.168.*,前16位是网络号,共65536个地址
- 包含在这个范围内,都称为私有ip,其余的则称为全局ip(或公网ip)
- 一个路由器可以配置两个IP地址,一个是WAN口IP,一个是LAN口IP(子网IP)
- 路由器LAN口连接的主机,都从属于当前这个路由器的子网中
- 不同的路由器,子网IP其实都是一样的(通常都是192.168.1.1),子网内的主机IP地址不能重复,但是子网之间的ip地址就可以重复了
- 每一个家用路由器,其实又作为运营商路由器的子网中的一个节点,这样的运营商可能会有很多级,最外层的运营商路由器WAN口IP就是一个公网IP
- 子网内的主机需要和外网进行通信时,路由器将Ip首部中的ip地址进行替换(替换成WAN口ip),这样逐级替换,最终数据包中的ip地址成为一个公网ip,这种技术称为NAT(Network Address Translation),网络地址转换
- 如果希望我们自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网ip的服务器上,这样的服务器可以在阿里云/腾讯云上购买
比如上面192.168.1.201主机想访问一个ip是201,100,1,1的公网,它自己是私有ip,所以到达自己所在的路由器后要替换,将源ip替换为路由器的WANip,就是10.1.1.2,由家用路由器再发送给运营商路由器,源ip是它的子网,继续替换为122.77.241.4,这个过程可能会重复,直到有一个路由器发送到广域网中,以省为例,判断这个ip是不是国内的,是就转给这个省,不断向下,根据目的ip就可以确定发送的主机
nat路由器在这个替换过程中会保存映射关系,当数据要发送回来的时候,不断还原ip
大企业的网络也由内网构成,但会提供一个公网路由器
9. 路由
在复杂的网络结构中,找出一条通往终点的路线,路由的过程,就是这样一跳一跳(Hop by Hop)“问路”的过程
所谓“一跳”就是数据链路层中的一个区间,具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间
ip数据报的传输过程和纹路一样,当ip数据报,到达路由器时,会先查看目的ip。路由器决定这个数据报时能直接发送给目标主机,还是需要发送给下一个路由器,依次反复,一直到达目标ip地址
那么如何判定这个数据包该发送到哪里?每个节点内部维护一个路由表
当路由器找路时,不会出现不知道的情况,那样数据就无法发送了。会有下面的结果:
给你具体下一跳的路
路由器不清楚,但转入默认路由器
到达入口路由器
路由表
可以用route命令查看
如果目的ip命中了路由表,就直接转发即可。路由表中的最后一行们主要由下一跳地址和发送接口两部分组成,当目的地址与路由表其他行都不匹配时,就会按缺省路由条目规定的接口发送到下一跳地址
假如某主机网络接口配置和路由表如下:
这台主机由两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络镰刀192.168.56.0/24网络
路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接口,Flags中的U标志标识此条目有效(可以禁用某些条目),G表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不闭经路由器转发
转发过程例1,发送数据报目的192.168.56.3
跟第一行的子网掩码左与运算的到,192.168.56.0,与第一行目的网络不符
第二行同样计算,正式第二行的目的网络,经由eth1接口发送。是与eth1接口直连的网络,可以直接发到目的主机,不需要转发
转发过程例2,发送数据包目的202.10.1.2
和前几项对比都不是
按缺省条目,从eht0发乎,去往192.168.10.1路由器,由这个路由器根据它的路由表决定如何发
10. 路由表生成算法
路由表可以由网络管理员手动维护(静态路由),也可以通过一些算法自动生成(动态路由)。例如距离向量算法,LS算法啊,Dijkstra算法等
相关文章:
56 网络层
本节重点 理解网络层的作用,深入理解IP协议的基本原理 对整个TCP/IP协议有系统的理解 对TCP/IP协议体系下的其他重要协议和技术有一定的了解 目录 前置认识ip协议基本概念协议头格式网段划分特殊的ip地址ip地址的数量限制私有ip和公有ip路由路由表生成算法 在复杂…...
MAC地址泛洪——华为ensp
首先搭建好网络拓扑,包含客户端、服务端、一台交换机 以及 云。 客户端client1和服务端server1各自配置好IP地址,服务端充当FTP服务器,启动ftp服务 其中要先配置cloud1相关配置,然后才可以进行连线, 第一步进行端口…...
golang 字符编码 gbk/gb2312 utf8编码相互转换,判断字符是否gbk编码函数, 字符编码转换基础原理解析, golang默认编码utf8
虽然golang里面的默认编码都是统一的unicode utf8编码, 但是我们在调用外部系统提供的api时,就可能会遇到别人的接口提供的编码非 utf8编码,而是gbk/gb2312编码, 这时候我们就必须要将别人的gbk编码转换为go语言里面的默认编码ut…...
CentOS(7.x、8)上安装EMQX
EMQX 是一个高度可扩展的分布式 MQTT 消息服务器,适用于 IoT、M2M 和移动应用程序。以下是在 CentOS 系统上安装 EMQX 的基本步骤: 在 CentOS 上安装 EMQ X 步骤 1: 添加 EMQ X YUM 源 首先,你需要添加 EMQ X 的官方 YUM 源到你的 CentOS 系…...
Mojo模型魔法:动态定制特征转换的艺术
标题:Mojo模型魔法:动态定制特征转换的艺术 在机器学习领域,模型的灵活性和可扩展性是至关重要的。Mojo模型(Model-as-a-Service)提供了一种将机器学习模型部署为服务的方式,允许开发者和数据科学家轻松地…...
多任务高斯过程数学原理和Pytorch实现示例
高斯过程其在回归任务中的应用我们都很熟悉了,但是我们一般介绍的都是针对单个任务的,也就是单个输出。本文我们将讨论扩展到多任务gp,强调它们的好处和实际实现。 本文将介绍如何通过共区域化的内在模型(ICM)和共区域化的线性模型(LMC)&…...
【PPT把当前页输出为图片】及【PPT导出图片模糊】的解决方法(sci论文图片清晰度)
【PPT把当前页输出为图片】及【PPT导出图片模糊】的解决方法 内容一:ppt把当前页输出为图片:内容二:ppt导出图片模糊的解决方法:方法:步骤1:打开注册表编辑器步骤2:修改注册表: 该文…...
TeraTerm 使用技巧
参考资料 自分がよく使うTeratermマクロによる自動ログインのやり方をまとめてみたよTera Term マクロでログインを自動化してみたTera Term のススメ 目录 简介一. 常用基础设置1.1 语言变更1.2 log设置 二. 小技巧2.1 指定host别名2.2 新开窗口2.3 设置粘贴多行命令时的行间…...
意得润色打折啦
新注册使用可以减15%,ABSJU202,直接使用哦ㅤ 此外,如果老板经费充足,预算高,完全可以试试他家的投稿套餐,科学深度编辑,从期刊选择,到投稿协助,投稿信都帮你写好…...
微软研发致胜策略 06:学无止境
这是一本老书,作者 Steve Maguire 在微软工作期间写了这本书,英文版于 1994 年发布。我们看到的标题是中译版名字,英文版的名字是《Debugging the Development Process》,这本书详细阐述了软件开发过程中的常见问题及其解决方案&a…...
学习大数据DAY21 Linux基本指令2
目录 思维导图 搜索查看查找类 find 从指定目录查找文件 head 与 tail 查看行 cat 查看内容 more 查看大内容 grep 过滤查找 history 查看已经执行过的历史命令 wc 统计文件 du 查看空间 管道符号 | 配合命令使用 上机练习 4 解压安装类 zip unzip 压缩解压 tar …...
【18】Android 线程间通信(三) - Handler
概述 接下来我们会从native层来分析一下,Handler做了什么,以及之前提到过的应用层的两个native的调用链。 nativeWake 最早接触这个方法还记得是什么时候吗?MessageQueue#enqueueMessage中,在这个方法的末尾,我们看…...
静态路由技术
一、路由的概念 路由是指指导IP报文发送的路径信息。 二、路由表的结构 1、Destination/Mask:IP报文的接收方的IP地址及其子网掩码; 2、proto:协议(Static:静态路由协议,Direct:表示直连路由) 3、pref:优先级(数值和优先级成反比) 4、cost:路由开销(从源到目的…...
SpringBoot缓存注解使用
背景 除了 RedisTemplate 外, 自Spring3.1开始,Spring自带了对缓存的支持。我们可以直接使用Spring缓存技术将某些数据放入本机的缓存中;Spring缓存技术也可以搭配其他缓存中间件(如Redis等)进行使用,将某些数据写入到缓存中间件…...
@RequestBody接收到的参数中如何限制List的长度?
在Spring MVC中,你可以使用Valid注解和自定义的验证注解来限制List的长度,防止DOS攻击。具体步骤如下: 创建自定义注解:首先,创建一个自定义注解来验证List的长度。 import javax.validation.Constraint; import jav…...
Linux C语言 54-目录操作
Linux C语言 54-目录操作 本节关键字:Linux、C语言、目录操作、遍历目录 相关C库函数:opendir、readdir、closedir 遍历目录 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <dirent.h> #include <…...
Java实战中如何使用多线程(线程池)及其为什么使用?
这个话题在入行之前就想过很多次,很多8古文或者你搜索的结果都是告诉你什么提高高并发或者是一些很高大上的话,既没有案例也没有什么公式去证明,但是面试中总是被问到,也没有实战经历,所以面试时一问到多线程的东西就无…...
kafka集群搭建-使用zookeeper
1.环境准备: 使用如下3台主机搭建zookeeper集群,由于默认的9092客户端连接端口不在本次使用的云服务器开放端口范围内,故端口改为了8093。 172.2.1.69:8093 172.2.1.70:8093 172.2.1.71:8093 2.下载地址 去官网下载,或者使用如…...
【python】Numpy运行报错分析:IndexError与形状不匹配问题
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
你有多自律就有多自由
当你失去对时间的控制权,生活也就失去了平衡。 真正对自己有要求的人,都是高度自律的人。 追求自己想要的生活,任何时候开始都不会晚,关键在于你能够坚持下去,以高度自律的精神,日复一日、年复一年的坚持下…...
Codeforces Round 959 (Div. 1 + Div. 2 ABCDEFG 题) 文字讲解+视频讲解
Problem A. Diverse Game Statement 给定 n m n\times m nm 的矩形 a a a, a a a 中的每一个数均在 1 ∼ n m 1\sim nm 1∼nm 之间且互不相同。求出 n m n\times m nm 的矩形 b b b, b b b 中的每一个数均在 1 ∼ n m 1\sim nm 1∼nm 之间且互…...
WSL2 Centos7 Docker服务启动失败怎么办?
wsl 安装的CentOS7镜像,安装了Docker之后,发现用systemctl start docker 无法将docker启动起来。 解决办法 1、编辑文件 vim /usr/lib/systemd/system/docker.service将13行注释掉,然后在下面新增14行的内容。然后保存退出。 2、再次验证 可以发现,我们已经可以正常通过s…...
分布式锁-redisson锁重试和WatchDog机制
抢锁过程中,获得当前线程,通过tryAcquire进行抢锁,该抢锁逻辑和之前逻辑相同。 1、先判断当前这把锁是否存在,如果不存在,插入一把锁,返回null 2、判断当前这把锁是否是属于当前线程,如果是&a…...
ESP8266模块(2)
实例1 查看附近的WiFi 步骤1:进入AT指令模式 使用USB转串口适配器将ESP8266模块连接到电脑。打开串口终端软件,并设置正确的串口和波特率(通常为115200)。输入以下命令并按回车确认: AT如果模块响应OK,…...
Docker安装笔记
1. Mac安装Docker 1.1 Docker安装包下载 1.1.1 阿里云 对于10.10.3以下的用户 推荐使用 对于10.10.3以上的用户 推荐使用 1.1.2 官网下载 系统和芯片选择适合自己的安装包 1.2 镜像加速 【推荐】阿里镜像 登陆后,左侧菜单选中镜像加速器就可以看到你的专属地…...
《昇思25天学习打卡营第21天|Pix2Pix实现图像转换》
Pix2Pix 是一种图像转换模型,使用条件生成对抗网络(Conditional Generative Adversarial Networks,cGANs)实现图像到图像的转换。它主要由生成器(Generator)和判别器(Discriminator)…...
Python和MATLAB网络尺度结构和幂律度大型图生成式模型算法
🎯要点 🎯算法随机图模型数学概率 | 🎯图预期度序列数学定义 | 🎯生成具有任意指数的大型幂律网络,数学计算幂律指数和平均度 | 🎯随机图分析中巨型连接分量数学理论和推论 | 🎯生成式多层网络…...
在jsPsych中使用Vue
jspsych 介绍 jsPsych是一个非常好用的心理学实验插件,可以用来构建心理学实验。具体的就不多介绍了,大家可以去看官网:https://www.jspsych.org/latest/ 但是大家在使用时就会发现,这个插件只能使用js绘制界面,或者…...
机器学习·概率论基础
概率论 概率基础 这部分太简单,直接略过 条件概率 独立性 独立事件A和B的交集如下 非独立事件 非独立事件A和B的交集如下 贝叶斯定理 先验 事件 后验 在概率论和统计学中,先验概率和后验概率是贝叶斯统计的核心概念 简单来说后验概率就是结合了先验概…...
c生万物系列(面向对象:封装)
本系列博客主要介绍c语言的一些屠龙技,里面包含了笔者本人的一些奇思妙想。 该系列博客笔者只是用作记录。如果你偶然找到了这篇博客,但是发现不知所云,请不要过多投入时间,可能笔者本人那时候也看不懂了。 笔者决定用c语言模仿…...
公司可以做网站吗/亚马逊seo推广
页面效果 场景: 比如使用layui.table数据表格显示了所有项目数据,客户数据对应另外的表数据集合,现在需要修改客户名称,需要把数据回显到表单中,然后进行修改 实现 <div class"layui-form-item"><label class…...
区政府网站建设/企业员工培训课程内容
概念 序列化:将java对象转换为字节序列的过程叫做序列化 反序列化:将字节对象转换为java对象的过程叫做反序列化 要解决的问题 1.序列化时间 2.反序列化时间 3.bytes大小 4.操作方便 支持的数据类型和应用传输数据的格式是否恰当 例举几种方式序列化的方…...
做网站的windowlcd/b站官方推广
转自:http://hi.baidu.com/jingweiyoung/item/55a895cc22b8abdeee183bb0 linux下为了多线程同步,通常用到锁的概念。 posix下抽象了一个锁类型的结构:ptread_mutex_t。通过对该结构的操作,来判断资源是否可以访问。顾名思义&#…...
做优化网站多少钱/网络营销有哪几种方式
查看页面源码 案例 """ 1. 提取页面源代码 2. 解析页面源代码,提取数据""" import requests from pyquery import PyQuery f open("qingchezhijia.csv",modew,encodingutf-8) # 创建文件def get_page_source(url): # 定…...
重庆网站开发设计公司电话/百度导航下载2021最新版
作者 | cxuan责编 | maozz大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和CPU打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,你的世界都少不了…...
wordpress 游客不可见/seo优化师培训
1、宏基Aspire 4738ZG入手本来是不准备购买笔记本电脑的,但是微知的这台华硕F5R也有3年半的历史了,运行状况还算正常,就是主板修了一次花了微知800大洋,实在是让微知心痛不已在心痛的同时,这款电脑也很难完成微知简单的…...