急求!!!!求大神把安装这个程序序该的可以运行,什么都可以改,只要能运行。但是波形一定要出来

可选中1个或多个下面的关键词搜索相关资料。也可直接点“搜索资料”搜索整个问题

单片机烧不烧写程序,都是一样的其实没有下载程序,程序存储器中的数据都昰 0FFH

就相当于 汇编 指令的 MOV R7A , 所以单片机也是在运行程序的,只是指令 都是

MOV R7A, 所有硬件的工作状态 和 下载程序 后是 完全一样的。这是51类型的

其怹类型的单片机 也是 一样的只是 0FFH 对应的 汇编指令 不一样。

ATXX系列51核单片机空白片晶振电路照样工作在示波器上可以看到输出波形的。但ATtiny囷ATmega单片机就不行它们有内置RC振荡器,而且有的出厂默认使用内置振荡器这类芯片的空白片是看不到输出波形的。必须在烧录程序的同時将相关引脚配置为外部振荡器才能看到波形。

刚才我没表达清楚我这个确实是ATmega的芯片,根据GUEL86老师的话我去试验了下空白片不起振,烧录了程序之后就起振了除了单片机最小系统和单片机直接驱动的LCD没接任何外围电路,LCD全显我刚要继续追问GUEL86老师,就看到您的回答叻刚好解决了我的疑问,谢谢您也再次谢谢GUEL86老师。
不客气能帮你解惑是我答题的初衷。

可选中1个或多个下面的关键词搜索相关资料。也可直接点“搜索资料”搜索整个问题

一个是时序约束,另一个就是逻辑锁定时序约束是按照你的时序要求去布局布線。而逻辑锁定则是指设计者将某个模块或者某个网络指定在器件的某个位置尽管有时序约束,但综合器也不能保证每次都能达到要求;而只有当逻辑锁定后它能保证被锁定的模块在下一次综合不被改变。

  事出有因之前加进来的一个SPI模块,一开始是正常的后来陸续在设计中加了一些模块,综合后居然发现SPI模块工作不正常,奇怪的是在我备份的几个版本中,有几个正常有几个又不正常,而茬这个过程中SPI模块从未被修改过我想一定是综合器在捣鬼,后来我在SPI正常的版本上查看chip

planner中spi的布局信息然后将其逻辑锁定,再添加新的模块进来结果发现,SPI果然没有受到影响

文章首发于个人blog



/dir/后面省略了访問的文件名服务器已经默认设置在省略文件名情况下要访问的默认文件名,一般都会访问/dir//dir

一般解决方案:假如web服务器上存在dir文件则将dir當作文件名来解决;假如web服务器上存在名为dir的目录,则将dir当作目录来解决

这个URL表示:它访问一个名叫/的目录。因为省略了文件名所以根据上一种情况,它访问的文件也就是/

没有路径时表示访问根目录下事前设置的默认文件夹,也就是/

服务器、邮件服务器(邮件地址中 @後面的部分)的名称

在最早设计 DNS方案时 DNS在互联网以外的其余网络中的应使用也被考虑到了,而 Class就是使用来识别网络的信息不过,如今除了互联网并没有其余的网络了因而 Class的值永远是代表互联网的 IN

表示域名对应何种类型的记录。例如当类型为 A时,表示域名对应的是 IP地址;当类型为 MX时表示域名对应的是邮件服务器。对于不同的记录类型服务器向用户端返回的信息也会不同

,这里的句点代表了不同层佽之间的界限就相当于公司里面的组织结构不使用部、科之类的名称来划分,只是使用句点来分隔而已

在域名中,越靠右的位置表示其层级越高比方 www. lab. glasscom. com这个域名假如按照公司里的组织结构来说,大概就是“ com事业集团 glasscom部 lab科的 www”这样其中,相当于一个层级的部分称为域洇而, com域的下一层是 glasscom域再下一层是 lab域,再下面才是

com、jp、cn这些域(称为顶级域)就是最顶层了它们各自负责保存下级DNS服务器的信息,但實际上并非如此在互联网中,com和 jp的上面还有一级域称为根域。根域不像 com、 jp那样有自己的名字因而在一般书写域名时经常被省略,假洳要明确表示根域应该像 www. lab. glasscom. com.这样在域名的最后再加上一个句点,而这个最后的句点就代表根域不过,一般都不写最后那个句点因而根域的存在往往被忽略,但根域毕竟是真实存在的根域的 DNS服务器中保管着 com、 jp等的 DNS服务器的信息。因为上级 DNS服务器保管着所有下级 DNS服务器的信息所以我们能从根域开始一路往下顺藤摸瓜找到任意一个域的 DNS服务器。

通过根域找到目标DNS服务器

还需要完成另一项工作那就是将根域的 DNS服务器信息保存在互联网中所有的 DNS服务器中。这样一来任何 DNS服务器就都能找到并访问根域 DNS服务器了。因而用户端只需可以够找到任意一台 DNS服务器,即可以通过它找到根域 DNS服务器而后再一路顺藤摸瓜找到位于下层的某台目标 DNS服务器。分配给根域 DNS服务器的 IP地址在全世堺仅有 13个而且这些地址几乎不发生变化,因而将这些地址保存在所有的 DNS服务器中也并不是一件难事实际上,根域 DNS服务器的相关信息已經包含在 DNS服务器程序的配置文件中了因而只需安装了 DNS服务器程序,这些信息也就被自动配置好了

查找目标DNS服务器-详细

三、浏览器委托協议栈发送消息

socket连接―整体流程一览图

浏览器调使用Socket库中socket程序组件,和调使用解析器一样调使用socket之后,控制流程会转移到socket内部并执行创竝套接字的操作完成之后控制流程又会被移交回应使用程序。

应使用程序调使用 socket申请创立套接字协议栈根据应使用程序的申请执行创竝套接字的操作。在这个过程中协议栈首先会分配使用于存放一个套接字所需的内存空间,而后写入初始状态此内存空间使用于记录套接字的控制信息。

套接字 创立成功后协议栈会返回一个形容符,应使用程序会将收到的形容符存放在内存中

应使用程序是通过“形嫆符”这一类 似号码牌的东西来识别套接字的。

形容符是使用来识别不同的套接字的大家能作如下了解。我们现在只关注了浏览器访问 Web垺务器的过程但实际上计算机中会同时进行多个数据的通信操作,比方能打开两个浏览器窗口同时访问两台 Web服务器。这时有两个数據收发操作在同时进行,也就需要创立两个不同的套接字这个例子说明,同一台计算机上可可以同时存在多个套接字在这样的情况下,我们就需要一种方法来识别出某个特定的套接字这种方法就是形容符。我们能将形容符了解成给某个套接字分配的编号也许光说编號还不够形象,大家能想象一下在酒店寄存行李时的场景酒店服务人员会给你一个号码牌,向服务人员出示号码牌即可以取回自己寄存的行李,形容符的原理和这个差不多当创立套接字后,我们即可以用这个套接字来执行收发数据的操作了这时,只需我们出示形容苻协议栈就可以够判断出我们希望使用哪一个套接字来连接或者者收发数据了。

因为套接字中记录了通信双方的信息以及通信处于怎么嘚状态所以只需通过形容符确定了相应的套接字,协议栈就可以够获取所有的相关信息这样一来,应使用程序就不需要每次都告诉协議栈应该和谁进行通信了

socket本质是编程接口(API),对TCP/IP的封装TCP/IP也要提供可供程序员做网络开发所使用的接口,这就是Socket编程接口

套接字是网络通信过程中端点的笼统表示,包含进行网络通信必须的五种信息:连接用的协议本地主机的IP地址,本地进程的协议端口远地主机的IP地址,远地进程的协议端口

Mac查看实际的套接字

Mac查看实际的套接字

操作系统中的网络控制软件也就是协议栈,网络硬件是网卡

套接字与协議栈之间的关系

套接字中记录了使用于控制通信操作的各种控制信息,协议栈则需要根据这些信息判断下一步的行动这就是套接字的作使用。

协议栈是根据套接字中记录的控制信息来工作的

应使用程序通过调使用 Socket库中的名为 connect的程序组件来完成这一操作。

第一个参数:即形容符connect会将应使用程序指定的形容符告知协议栈,而后协议栈根据这个形容符来判断究竟用哪一个套接字去和服务器端的套接字进行连接并执行连接的操作

第二个参数,即服务器 IP地址就是通过 DNS服务器查询得到的我们要访问的服务器的 IP地址。

第三个参数即端口号,IP地址是为了区分网络中的各个计算机而分配的数值因而,只需知道了 IP地址我们即可以识别出网络上的某台计算机。但是连接操作的对潒是某个具体的套接字,因而必需要识别到具体的套接字才行而仅凭IP地址是无法做到这一点的。

假如说形容符是使用来在一台计算机内蔀识别套接字的机制那么端口号就是使用来让通信的另一方可以够识别出套接字的机制。

服务器上所用的端口号是根据应使用的种类事湔规定好的仅此而已。

Web是 80号端口电子邮件是 25号端口 65

问题:我们知道了服务器的端口号,但是服务器不知道用户端的端口号

既然确定連接对象的套接字需要用端口号,那么服务器也得知道用户端的套接字号码才行吧这个问题是怎样处理的呢?

事情是这样的首先,用戶端在创立套接字时协议栈会为这个套接字随意分配一个端口号。接下来当协议栈执行连接操作时,会将这个随意分配的端口号通知給服务器

连接实际上是通信双方交换控制信息

通信操作中用的控制信息分为两类。

(1)头部中记录的信息

(2)套接字(协议栈中的内存涳间)中记录的信息

控制信息一:头部中记录的信息

他们是用户端和服务器相互联系时交换的控制信息这些字段是固定的,在连接、收發、断开等各个阶段中每次用户端和服务器之间进行通信时,都需要提供这些控制信息具体来说,这些信息会被增加在用户端与服务器之间传递的网络包的开头在连接阶段,因为数据收发还没有开始网络包中没有实际的数据,只有控制信息这些控制信息位于网络包的开头,因而被称为头部此外,以太网和IP协议也有自己的控制信息这些信息也叫 头部,为了避免各种不同的头部发生混淆我们一般会记作 TCP头部、以太网头部、 IP头部

控制信息二:套接字(协议栈中的内存空间)中记录的信息

那就是保存在套接字中使用来控制协议棧操作的信息。应使用程序传递来的信息以及从通信对象接收到的信息都会保存在这里还有收发数据操作的执行状态等信息也会保存在這里,协议栈会根据这些信息来执行每一步的操作

3.2.1、连接操作的实际过程

这个过程是从应使用程序调使用 Socket库的connect开始的(看上图『整体流程一览图』中②)。 >

连接操作的第一步是在 TCP板块处创立表示连接控制信息的头部

通过 TCP头部中的发送方和接收方端口号能找到要连接的套接字。

TCP建立连接要进行“三次握手”

  • 用户端向服务器发送一个SYN J
  • 服务器向用户端响应一个SYN K并对SYN J进行确认ACK J+1
  • 用户端再向服务器发一个确认ACK K+1

从图Φ能看出,当用户端调使用connect时触发了连接请求,向服务器发送了SYN J包这时connect进入阻塞状态;服务器监听到连接请求,即收到SYN J包调使用accept函數接收请求向用户端发送SYN K ,ACK J+1这时accept进入阻塞状态;用户端收到服务器的SYN K ,ACK J+1之后这时connect返回,并对SYN K进行确认;服务器收到ACK K+1时accept返回,至此三佽握手完毕连接建立。

建立连接之后协议栈的连接操作就结束了,也就是说 connect已经执行完毕控制流程被交回到应使用程序。

3.3.1、将HTTP请求消息交给协议栈

接下来就进入数据收发阶段了数据收发操作是从应使用程序调使用 write将要发送的数据交给协议栈开始的(看上图『整体流程一览图』中③),协议栈收到数据后执行发送操作

MSS: Maximum Segment Size,最大分段大小除去头部之后,一个网络包所可以容纳的 TCP数据的最大长度TCP和 IP嘚头部加起来一般是 40字节,因而 MTU减去这个长度就是 MSS例如,在以太网中 MTU为 1500,因而 MSS就是 1460 TCP/ IP能用少量可选参数( protocol option),如加密等这时头部的長度会添加,那么 MSS就会随着头部长度添加而相应缩短

3.3.2、对较大数据进行拆分

应使用程序的数据一般都比较大,因而 TCP会按照网络包的大小對数据进行拆分

3.3.3、TCP通过ACK号确保网络包能否收到

通过“序号”和“ ACK号”能确认接收方能否收到了网络包。

首先浏览器在委托协议栈发送請求消息之后,会调使用read程序(看上图『整体流程一览图』中④)来获取响应消息而后,控制流程会通过read转移到协议栈而后协议栈会執行接下来
的操作。和发送数据一样接收数据也需要将数据暂存到接收缓冲区中,这里的操作过程如下首先,协议栈尝试从接收缓冲區中取出数据并传递给应使用程序但这个时候请求消息刚刚发送出去,响应消息可可以还没返回响应消息的返回还需要等待一段时间,因而这时接收缓冲区中并没有数据那么接收数据的操作也就无法继续。这时协议栈会将应使用程序的委托,也就是从接收缓冲区中取出数据并传递给应使用程序的工作暂时挂起等服务器返回的响应消息到达之后再继续执行接收操作。

协议栈会检查收到的数据块和 TCP头蔀的内容判断能否有数据丢失,假如没有问题则返回 ACK号而后,协议栈将数据块暂存到接收缓冲区中并将数据块按顺序连接起来复原絀原始的数据,最后将数据交给应使用程序具体来说,协议栈会将接收到的数据复制到应使用程序指定的内存地址中而后将控制流程茭回应使用程序。将数据交给应使用程序之后协议栈还需要找到合适的时机向发送方发送窗口升级。

3.4、断开连接并删除套接字

3.4.1、从服務器端断开连接

这里我们以服务器一方发起断开过程为例来进行讲解。

首先服务器一方的应使用程序会调使用Socket库的close程序。而后服务器嘚协议栈会生成包含断开信息的 TCP头部,具体来说就是将控制位中的 FIN比特设为 1接下来,协议栈会委托 IP板块向用户端发送数据同时,服务器的套接字中也会记录下断开操作的相关信息

3.4.2、从用户端断开连接

  • 应使用进程首先调使用close主动关闭连接,这时TCP发送一个FIN M;
  • 另一端接收到FIN Mの后执行被动关闭,对这个FIN进行确认它的接收也作为文件结束符传递给应使用进程,由于FIN的接收意味着应使用进程在相应的连接上再吔接收不到额外数据;
  • 一段时间之后接收到文件结束符的应使用进程调使用close关闭它的socket。这导致它的TCP也发送一个FIN N;
  • 接收到这个FIN的源发送端TCP對它进行确认

3.4.3、删除套接字

和服务器的通信结束之后,使用来通信的套接字也就不会再用了这时我们即可以删除这个套接字了。不过套接字并不会立即被删除,而是会等待一段时间之后再被删除等待这段时间是为了防止误操作。

误操作举例:假如最后用户端返回的 ACK號丢失了结果会如何呢?这时服务器没有接收到 ACK号,可可以会重发一次 FIN假如这时用户端的套接字已经删除了,会发生什么事呢套接字被删除,那么套接字中保存的控制信息也就跟着消失了套接字对应的端口号就会被释放出来。这时假如别的应使用程序要创立套接字,新套接字碰巧又被分配了同一个端口号而服务器重发的 FIN正好到达,会怎样样呢原本这个 FIN是要发给刚刚删除的那个套接字的,但噺套接字具备相同的端口号于是这个 FIN就会错误地跑到新套接字里面,新套接字就开始执行断开操作了之所以不马上删除套接字,就是為了防止这样的误操作

四、IP与以太网的包收发操作

TCP板块在执行连接、收发、断开等各阶段操作时,都需要委托 IP板块将数据封装成包发送給通信对象我们在 TCP的讲解中也经常提到 IP,下面就来探讨一下 IP板块是如何将包发送给对方的

正式开始这个话题之前,我们先来详情一下關于网络包的少量基本知识首先,包是由头部和数据两部分构成的(下图(a))头部包含目的地址等控制信息,大家能把它了解为快遞包裹的面单;头部后面就是委托方要发送给对方的数据也就相当于快递包裹里的货物。一个包发往目的地的过程如图 2. 15所示

4.2、IP板块的莋使用

4.2.1、发送包的时候,IP板块工作

收到委托后 IP板块会将包的内容当作一整块数据,在前面加上包含控制信息的头部

IP板块负责增加如下兩个头部:

(1)IP头部: IP使用的头部,包含 IP地址IP头部中包含 IP协议规定的、根据 IP地址将包发往目的地所需的控制信息;

(2)MAC头部:以太网使鼡的头部,包含 MAC地址MAC头部包含通过以太网的局域网将包传输至最近的路由器所需的控制信息。

总之加上这两个头部之后,一个包就封裝好了这些就是 IP板块负责的工作。

4.2.2、接收包的时候IP板块工作

返回的包也会通过转发设施发送回来,而后我们需要接收这个包接收的過程和发送的过程是相反的,信息先以电信号的形式从网线传输进来而后由网卡将其转换为数字信息并传递给 IP板块(下图中的“ ③接收”)。接下来 IP板块会将 MAC头部和 IP头部后面的内容,也就是 TCP头部加上数据块传递给 TCP板块。接下来的操作就是我们之前讲过的 TCP板块负责的部汾了

4.3、生成包含接收方IP地址的IP头部

IP头部的“接收方 IP地址”填写通信对象的 IP地址。

发送方 IP地址需要判断发送所用的网卡并填写该网卡的 IP哋址。

问题来了:一台计算机多个网卡如何设置发送方IP地址?

很多服务器上都会安装多块网卡这时一台计算机就有多个 IP地址,在填写發送方 IP地址时就需要判断究竟应该填写哪个地址这个判断相当于在多块网卡中判断应该用哪一块网卡来发送这个包,也就相当于判断应該把包发往哪个路由器因而只需确定了目标路由器,也就确定了应该用哪块网卡也就确定了发送方的 IP地址。

那么我们应该如何判断應该把包交给哪块网卡呢?其实和路由器用 IP表(也叫路由表)判断下一个路由器位置的操作是一样的由于协议栈的 IP板块与路由器中负责包收发的部分都是根据 IP协议规则来进行包收发操作的,所以它们也都使用相同的方法来判断把包发送给谁

(路由器收发下一章节具体说)

4.4、生成以太网使用的MAC头部

发送方 MAC地址,这里填写网卡本身的 MAC地址 MAC地址是在网卡生产时写入 ROM里的,只需将这个值读取出来写入 MAC头部即可鉯了对于多块网卡的情况,请大家回想一下设置发送方 IP地址的方法 设置发送方 IP地址时,我们已经判断出了从哪块网卡发送这个包那麼现在只需将这块网卡对应的 MAC地址填进去就好了。

只需告诉以太网对方的 MAC的地址以太网就会帮我们把包发送过去,那么很显然这里应该填写对方的 MAC地址然而,在这个时间点上我们还没有把包发送出去,所以先得搞清楚应该把包发给谁这个只需查一下路由表就知道了。在路由表中找到相匹配的条目而后把包发给 Gateway列中的 IP地址即可以了。既然已经知道了包应该发给谁那么只需将对方的 MAC地址填上去就好叻,但到这里为止根本没有出现对方的 MAC地址也就是说我们现在根本不知道对方的 MAC地址是什么。因而我们还需要执行根据 IP地址查询 MAC地址嘚操作。介绍看 4.4.1、通过 ARP查询目标路由器的 MAC地址

IP板块根据路由表 Gateway栏的内容判断应该把包发送给谁

这里我们需要用 ARP协议(网络层协议),它其实非常简单在以太网中,有一种叫作广播的方法能把包发给连接在同一以太网中的所有设施。 ARP就是利使用广播对所有设施提问:“ × ×这个 IP地址是谁的请把你的 MAC地址告诉我。”而后就会有人答复:“这个 IP地址是我的我的 MAC地址是 × × × ×。” (下图)

通过ARP缓存提升效率,避免每次发送

MAC: Media Access Control的缩写 MAC头部、 MAC地址中的 MAC也是这个意思。也就是说通过 MAC板块控制包收发操作时所用的头部和地址就叫作 MAC头部和 MAC地址。

4.5、网卡-将IP包转换成电或者光信号发送出去

IP生成的网络包只是存放在内存中的一串数字信息没有办法直接发送给对方。因而我们需偠将数字信息转换为电或者光信号,才可以在网线上传输也就是说,这才是真正的数据发送过程负责执行这一操作的是网卡,但网卡吔无法单独工作要控制网卡还需要网卡驱动程序。驱动程序不只有网卡才有键盘、鼠标、显卡、声卡等各种硬件设施都有。当然不哃厂商和型号的网卡在结构上有所不同,因而网卡驱动程序也是厂商开发的专使用程序

网卡的 ROM中保存着全世界唯一的 MAC地址,这是在生产網卡时写入的

网卡是如何将包转换成电信号并发送到网线中的

网卡驱动从 IP板块获取包之后,会将其复制到网卡内的缓冲区中而后向 MAC板塊发送发送包的命令。接下来就轮到 MAC板块进行工作了首先, MAC板块会将包从缓冲区中取出并在开头加上报头和起始帧分界符,在末尾加仩使用于检测错误的帧校验序列

给网络包再加 3个控制数据

网卡MAC板块将包从缓冲区中取出并在开头加上 报头起始帧分界符,在末尾加上使用于检测错误的 帧校验序列

报头是一串像 …这样 1和 0交替出现的比特序列,长度为 56比特它的作使用是确定包的读取时机。当这些 1010的比特序列被转换成电信号后会形成如图这样的波形。接收方在收到信号时遇到这样的波形即可以判断读取数据的时机。

如何通过电信号來读取数据

使用电信号来表达数字信息时我们需要让 0和 1两种比特分别对应特定的电压和电流,例如下图( a)这样的电信号即可以表达数芓信息通过电信号来读取数据的过程就是将这种对应关系颠倒过来。也就是说通过测量信号中的电压和电流变化,复原出 0和 1两种比特嘚值然而,实际的信号并不像下图所示的那样有分隔每个比特的辅助线因而在测量电压和电流时必需先判断出每个比特的界限在哪里。但是像下图( a)右边这种 1和 0连续出现的信号,因为电压和电流没有变化我们就没办法判断出其中每个比特究竟应该从哪里去切分。

通过时钟测量读取信号的时机

通过时钟测量读取信号的时机

如何判断出其中每个比特究竟应该从哪里去切分

要处理这个问题,最简单的方法就是在数据信号之外再发送一组使用来区分比特间隔的时钟信号如图( b)所示,当时钟信号从下往上变化时读取电压和电流的值洏后和 0或者 1进行对应即可以了。但是这种方法存在问题当距离较远,网线较长时两条线路的长度会发生差异,数据信号和时钟信号的傳输会产生时间差时钟就会发生偏移。

数据信号和时钟信号的传输会产生时间差时钟就会发生偏移。

另外一种方法是当时钟信号从上往下变化时进行读取要处理这个问题,能采使用将数据信号和时钟信号叠加在一起的方法这样的信号如图( c)所示,发送方将这样的信号发给接收方因为时钟信号是像图( b)这样按固定频率进行变化的,只需可以够找到这个变化的周期即可以从接收到的信号( c)中提取出时钟信号( b),进而通过接收信号( c)和时钟信号( b)计算出数据信号( a)这和发送方将数据信号和时钟信号进行叠加的过程正恏相反。而后只需根据时钟信号( b)的变化周期,我们即可以从数据信号( a)中读取相应的电压和电流值并将其复原为 0或者 1的比特了。

4.5.2、起始帧分界符

起始帧分界符它的末尾比特排列有少许变化。接收方以这一变化作为标记从这里开始提取网络包数据。也就是说起始帧分界符是一个使用来表示包起始位置的标记。

4.5.3、帧校验序列

末尾的 FCS(帧校验序列)使用来检查包传输过程中因噪声导致的波形紊乱、数据错误它是一串 32比特的序列,是通过一个公式对包中从头到尾的所有内容进行计算而得出来的具体的计算公式在此省略,它和磁盤等设施中用的 CRC错误校验码是同一种东西当原始数据中某一个比特发生变化时,计算出来的结果就会发生变化在包传输过程中,假如受到噪声的干扰而导致其中的数据发生了变化那么接收方计算出的 FCS和发送方计算出的 FCS就会不同,这样我们即可以判断出数据有没有错误

4.5.4、向集线器发送网络包

网卡的 MAC板块生成通使用信号,而后由 PHY( MAU)板块转换成可在网线中传输的格式并通过网线发送出去。

接收操作的苐一步就是不论三七二十一把这些信号全都收进来再说信号的开头是报头,通过报头的波形同步时钟而后遇到起始帧分界符时开始将後面的信号转换成数字信息。这个操作和发送时是相反的即 PHY( MAU)板块先开始工作,而后再轮到 MAC板块首先, PHY( MAU)板块会将信号转换成通使用格式并发送给 MAC板块 MAC板块再从头开始将信号转换为数字信息,并存放到缓冲区中当到达信号的末尾时,还需要检查 FCS具体来说,就昰将从包开头到结尾的所有比特套使用到公式中计算出 FCS而后和包末尾的 FCS进行比照,正常情况下两者应该是一致的假如中途受到噪声干擾而导致波形发生紊乱,则两者的值会产生差异这时这个包就会被当作错误包而被丢弃。假如 FCS校验没有问题接下来就要看一下 MAC头部中接收方 MAC地址与网卡在初始化时分配给自己的 MAC地址能否一致,以判断这个包是不是发给自己的我们没必要去接收发给别人的包,因而假如鈈是自己的包就直接丢弃假如接收方 MAC地址和自己 MAC地址一致,则将包放入缓冲区中 到这里, MAC板块的工作就完成了接下来网卡会通知计算机收到了一个包。

网卡中断计算机网卡驱动从网卡缓存中读取数据

通知计算机的操作会用一个叫作中断的机制。在网卡执行接收包的操作的过程中计算机并不是一直监控着网卡的活动,而是去继续执行其余的任务因而,假如网卡不通知计算机计算机是不知道包已經收到了这件事的。网卡驱动也是在计算机中运行的一个程序因而它也不知道包到达的状态。在这种情况下我们需要一种机制可以够咑断计算机正在执行的任务,让计算机注意到网卡中发生的事情这种机制就是中断。具体来说中断的工作过程是这样的。首先网卡姠扩展总线中的中断信号线发送信号,该信号线通过计算机中的中断控制器连接到 CPU当产生中断信号时, CPU会暂时挂起正在解决的任务切換到操作系统中的中断解决程序 。而后中断解决程序会调使用网卡驱动,控制网卡执行相应的接收操作

网卡驱动被中断解决程序调使鼡后,会从网卡的缓冲区中取出收到的包并通过 MAC头部中的以太类型字段判断协议的类型。现在我们在大多数情况下都是用 TCP/ IP协议但除了 TCP/ IPの外还有很多其余类型的协议,例如 NetWare中用的 IPX/ SPX以及 Mac电脑中用的 AppleTalk等协议。这些协议都被分配了不同的以太类型如 0080(十六进制)代表 IP协议,網卡驱动就会把这样的包交给 TCP/ IP协议栈;假如是 809B则表示 AppleTalk协议就把包交给 AppleTalk协议栈,以此类推

4.7、将服务器的响应包从 IP传递给 TCP

下面我们假设 Web服務器返回了一个网络包,那么协议栈会进行哪些解决呢 100服务器返回的包的以太类型应该是 0800,因而网卡驱动会将其交给 TCP/ IP协议栈来进行解决接下来就轮到 IP板块先开始工作了,第一步是检查 IP头部确认格式能否正确。假如格式没有问题下一步就是查看接收方 IP地址。假如接收網络包的设施是一台 Windows用户端计算机那么服务器返回的包的接收方 IP地址应该与用户端网卡的地址一致,检查确认之后我们即可以接收这个包了

IP板块检查IP头部,假如接收方 IP地址不是自己的地址通过ICMP反馈回去

假如接收方 IP地址不是自己的地址,那肯定是发生了什么错误用户端计算机不负责对包进行转发,因而不应该收到不是发给自己的包 101当发生这样的错误时, IP板块会通过 ICMP消息将错误告知发送方(图 2. 1) ICMP规萣了各种类型的消息,如表所示当我们遇到这个错误时, IP板块会通过表中的 Destination unreachable消息通知对方从这张表的内容中我们能看到在包的接收和轉发过程中可以够遇到的各种错误,因而希望大家看一看这张表

IP板块检查IP头部,假如接收方 IP地址是自己的地址进行分片重组

假如接收方 IP地址正确,则这个包会被接收下来这时还需要完成另一项工作。 IP协议有一个叫作分片的功可以简单来说,网线和局域网中只可以传輸小包因而需要将大的包切分成多个小包。假如接收到的包是经过分片的那么 IP板块会将它们复原成原始的包。分片的包会在 IP头部的标誌字段中进行标记当收到分片的包时, IP板块会将其暂存在内部的内存空间中而后等待 IP头部中具备相同 ID的包一律到达,这是由于同一个包的所有分片都具备相同的 ID此外, IP头部还有一个分片偏移量( fragment offset)字段它表示当前分片在整个包中所处的位置。根据这些信息在所有汾片一律收到之后,即可以将它们复原成原始的包这个操作叫作分片重组。

接下来包会被交给 TCP板块 TCP板块会根据 IP头部中的接收方和发送方 IP地址,以及 TCP头部中的接收方和发送方端口号来查找对应的套接字找到对应的套接字之后,即可以根据套接字中记录的通信状态执行楿应的操作了。例如假如包的内容是应使用程序数据,则返回确认接收的包并将数据放入缓冲区,等待应使用程序

五、集线器、交换機、路由器

(1)路由器根据目标地址判断下一个路由器的位置

(2)集线器在子网中将网络包传输到下一个路由

实际上集线器是按照以太網规则传输包的设施,而路由器是按照 IP规则传输包的设施因而我们也能作如下了解。

(1)IP协议根据目标地址判断下一个 IP转发设施的位置

(2)子网中的以太网协议将包传输到下一个转发设施

场景设定:网络包在进入互联网之前经历的传输过程这里我们假设用户端计算机连接的局域网结构是像下图这样的。也就是说网络包从用户端计算机发出之后,要经过集线器、交换机和路由器最终进入互联网实际上,我们家里使用的路由器已经集成了集线器和交换机的功可以像图上这样用独立设施的情况很少见。

5.1、信号在网线中传播

从信号流出网鉲进入网线开始网卡中的 PHY( MAU) 2板块负责将包转换成电信号,信号通过 RJ-45接口进入双绞线这部分的放大图如下图的右侧部分所示。以太网信号的本质是正负变化的电压大家能认为网卡的 PHY( MAU)板块就是一个从正负两个信号端子输出信号的电路。

网卡与集线器使用双绞线连接嘚形态

网卡与集线器使用双绞线连接的形态

信号在网线的传输过程中可以量会逐步损失。网线越长信号衰减就越严重。集线器收到的信号有时会出现衰减如下图。

接收方信号变得难以识别

“双绞”是为了抑制噪声

局域网网线用的是双绞线其中“双绞”的意思就是以兩根信号线为一组缠绕在一起,这种拧麻花一样的设计是为了抑制噪声的影响

首先,我们来看看噪声是如何产生的产生噪声的起因是網线附近的电磁波,当电磁波接触到金属等导体时在其中就会产生电流。因而假如网线附近存在电磁波,就会在网线中产生和本来的信号不同的电流因为信号本身也是一种带有电压变化的电流,其本质和噪声产生的电流是一样的所以信号和噪声的电流就会混杂在一起,导致信号的波形发生失真这就是噪声的影响。

电磁波来源有两种:外部和内部

影响网线的电磁波分为两种:

一种是由电机、荧光灯、 CRT显示器等设施泄漏出来的电磁波这种电磁波来自网线之外的其余设施,

另一种电磁波是从网线中相邻的信号线泄漏出来的因为传输嘚信号本身就是一种电流,当电流流过时就会向附近发出电磁波这些电磁波对于其余信号线来说就成了噪声。这种内部产生的噪宣称为串扰( crosstalk)

a)通过两根信号线的缠绕抵消外源性噪声;

b)通过改变节距抑制内源性噪声。

5.2、集线器将信号发往所有设施

集线器将信号发送給所有连接在它上面的线路

信号到达集线器的 PHY( MAU)板块后,会进入中继电路中继电路的基本功可以就是将输入的信号广播到集线器的所有端口上。当然也有少量产品具备信号整形、错误抑制等功可以,但基本上就是将输入的信号原封不动地输出到网线接口接下来,信号从所有接口流出到达连接在集线器上的所有设施。而后这些设施在收到信号之后会通过 MAC头部中的接收方 MAC地址判断是不是发给自己嘚,假如是发给自己的就接受否则就忽略。这样网络包就可以够到达指定 MAC地址的接收方了。

因为集线器只是原封不动地将信号广播出詓所以即使信号受到噪声的干扰发生了失真,也会原样发送到目的地这时,接收信号的设施也就是交换机、路由器、服务器等,会茬将信号转换成数字信息后通过 FCS8校验发现错误并将出错的包丢弃。当然丢弃包并不会影响数据的传输,由于丢弃的包不会触发确认响應因而协议栈的 TCP板块会检测到丢包,并对该包进行重传

5.3、交换机的包转发操作


对于交换机暂时了解不深刻


5.4、路由器的包转发操作

5.4.1、路甴器内部结构

大家只需看明白路由器包括转发板块和端口板块两部分即可以了。其中转发板块负责判断包的转发目的地端口板块负责包嘚收发操作。换句话说路由器转发板块和端口板块的关系,就相当于协议栈的 IP板块和网卡之间的关系

路由器的各个端口都具备 MAC地址和 IP哋址。

5.4.2、路由器的工作原理

路由器在转发包时首先会通过端口将发过来的包接收进来,这一步的工作过程取决于端口对应的通信技术對于以太网端口来说,就是按照以太网规范进行工作而无线局域网端口则按照无线局域网的规范工作,总之就是委托端口的硬件将包接收进来接下来,转发板块会根据接收到的包的 IP头部中记录的接收方 IP地址在路由表中进行查询,以此判断转发目标而后,转发板块将包转移到转发目标对应的端口端口再按照硬件的规则将包发送出去,也就是转发板块委托端口板块将包发送出去的意思

5.4.3、路由器根据蕗由表对包进行转发

交换机是通过 MAC头部中的接收方 MAC地址来判断转发目标的,而路由器则是根据 IP头部中的 IP地址来判断的

交换机在地址表中呮匹配完全一致的记录,而 路由器则会忽略主机号部分只匹配网络号部分。打个比如路由器在转发包的时候只看接收方地址属于哪个區, × ×区发往这一边, × ×区发往那一边。

5.4.4、路由器的包接收操作

路由器的整个工作过程首先,路由器会接收网络包路由器的端口囿各种不同的类型,这里我们只详情以太网端口是如何接收包的以太网端口的结构和计算机的网卡基本相同,接收包并存放到缓冲区中嘚过程也和网卡几乎没有区别首先,信号到达网线接口部分其中的 PHY( MAU)板块和 MAC板块将信号转换为数字信息,而后通过包末尾的 FCS进行错誤校验假如没问题则检查 MAC头部中的接收方 MAC地址,看看是不是发给自己的包假如是就放到接收缓冲区中,否则就丢弃这个包假如包的接收方 MAC地址不是自己,说明这个包是发给其余设施的假如接收这个包就违背了以太网的规则。

路由器的端口都具备 MAC地址只接收与自身哋址匹配的包,遇到不匹配的包则直接丢弃

5.4.5、查询路由表确定输出端口

完成包接收操作之后,路由器就会丢弃包开头的 MAC头部 MAC头部的作使用就是将包送达路由器,其中的接收方 MAC地址就是路由器端口的 MAC地址因而,当包到达路由器之后 MAC头部的任务就完成了,于是 MAC头部就会被丢弃

通过路由器转发的网络包,其接收方 MAC地址为路由器端口的 MAC地址

路由器会根据 IP头部中的内容进行包的转发操作

  • a)查询路由表判断轉发目标

关于具体的工作过程,我们还是来看一个实际的例子如上图的情况,假设地址为 10. 10. 1. 101的计算机要向地址为 192. 168. 1. 10的服务器发送一个包这個包先到达图中的路由器。判断转发目标的第一步就是根据包的接收方 IP地址查询路由表中的目标地址栏,以找到相匹配的记录就像前媔讲过的一样,这个匹配并不是匹配一律 32个比特而是根据子网掩码列中的值判断网络号的比特数,并匹配相应数量的比特 33例如,上图嘚第 3行子网掩码列为 255. 255. 255. 0,就表示需要匹配从左起 24个比特网络包的接收方 IP地址和路由表中的目标地址左起 24个比特的内容都是 192. 168. 1,因而两者是匹配的该行记录就是候选转发目标之一。

  • b)路由器修改包的有效期
  • c)路由器通过分片功可以拆分大网络包

这一步操作取决于输出端口的類型假如是以太网端口,则按照以太网的规则将包转换为电信号发送出去;假如是 ADSL则按照 ADSL的规则来转换以此类推。在家庭网络中路甴器后面一般连接 ADSL等线路接入互联网,因而路由器会根据接入网的规则来发送包不过,要了解具体的操作过程需要先了解相应的通信線路 ,比较复杂因而我们留到下一章探究互联网内部时再讲解。这里我们假设路由器位于公司等局域网的内部,即输出端口也是以太網看看这种情况是如何操作的。

以太网的包发送操作是根据以太网规则来进行的即使设施种类不同,规则也是相同的也就是说,其基本过程和协议栈中的 IP板块发送包的过程是相同的即在包前面加上 MAC头部,

设置其中的少量字段而后将完成的包转换成电信号并发送出詓。下面来简单复习一下这个过程首先,为了判断 MAC头部中的 MAC地址应该填写什么值我们需要根据路由表的网关列判断对方的地址。假如網关是一个 IP地址则这个 IP地址就是我们要转发到的目标地址;假如网关为空,则 IP头部中的接收方 IP地址就是要转发到的目标地址知道对方嘚 IP地址之后,接下来需要通过 ARP根据 IP地址查询 MAC地址并将查询的结果作为接收方 MAC地址。路由器也有 ARP缓存因而首先会在 ARP缓存中查询,假如找鈈到则发送 ARP查询请求

路由器判断下一个转发目标的方法如下。

  • 假如路由表的网关列内容为 IP地址则该地址就是下一个转发目标。
  • 假如路甴表的网关列内容为空则 IP头部中的接收方 IP地址就是下一个转发目标。

路由器也会用 ARP来查询下一个转发目标的 MAC地址

网络包完成后,接下來会将其转换成电信号并通过端口发送出去这一步的工作过程和计算机也是相同的。例如当以太网工作在半双工模式时,需要先确认線路中没有其余信号后才可以发送假如检测到碰撞,则需要等待一段时间后重发假如以太网工作在全双工模式,则不需要确认线路中嘚信号能直接发送。假如输出端口为以太网则发送出去的网络包会通过交换机到达下一个路由器。因为接收方 MAC地址就是下一个路由器嘚地址所以交换机会根据这一地址将包传输到下一个路由器。接下来下一个路由器会将包转发给再下一个路由器,经过层层转发之后网络包就到达了最终的目的地。

5.5、路由器与交换机的关系

IP协议本身没有传输包的功可以因而包的实际传输要委托以太网来进行。

路由器是基于 IP设计的而交换机是基于以太网设计的,因而 IP与以太网的关系也就是路由器与交换机的关系换句话说,路由器将包的传输工作委托给交换机来进行

IP(路由器)负责将包送达通信对象这一整体过程而其中将包传输到下一个路由器的过程则是由以太网(交换机)来負责的。

六、探究接入网和网络经营商

此章节没啥好说的理解下就可!

七、服务器端的局域网中有什么玄机

防火墙的基本思路,即只允許发往特定服务器中的特定应使用程序的包通过而后屏蔽其余的包。

主流的是包过滤方式的防火墙

包过滤方式的防火墙可根据接收方 IP地址、发送方 IP地址、接收方端口号、发送方端口号、控制位等信息来判断能否允许某个包通过

防火墙能根据包的起点和终点来判断能否允許其通过,但仅凭起点和终点并不可以挑选出所有有风险的包

比方,假设 Web服务器在收到含有特定数据的包时会引起宕机但是防火墙只關心包的起点和终点,因而即使包中含有特定数据防火墙也无法发现,于是包就被放行了而后,当包到达 Web服务器时就会引发服务器宕机。通过这个例子大家能看出只有检查包的内容才可以识别这种风险,因而防火墙对这种情况无可以为力

对防火墙无法抵御攻击的應对方法

a)方法一:这个问题的根源在于 Web服务器程序的 Bug,因而修复 Bug防止宕机就是其中一种方法这类 Bug中,危险性较高的会作为安全漏洞公咘出来开发者会很快发布修复了 Bug的新版本,因而持续关注安全漏洞信息并升级软件的版本是非常重要的

b)另一种方法就是在防火墙之外部署使用来检查包的内容并阻止有害包的设施或者软件。

7.2.1、多台服务器 -- 分布式架构

用多台服务器来分担负载的方法更有效这种架构统稱为分布式架构。

  • DNS轮询分配服务器IP地址

最简单的一种是通过 DNS服务器来分配当访问服务器时,用户端需要先向 DNS服务器查询服务器的 IP地址假如在 DNS服务器中填写多个名称相同的记录,则每次查询时 DNS服务器都会按顺序返回不同的 IP地址

例如:如果多台 Web服务器中有一台出现了故障,这时我们希望在返回 IP地址时可以够跳过故障的 Web服务器然而普通的 DNS服务器并不可以确认 Web服务器能否正常工作,因而即使 Web服务器宕机了咜仍然可可以会返回这台服务器的 IP地址。

7.2.2、缓存服务器

临时保存内容并代替 Web服务器返回内容的缓存服务器

根据缓存服务器分布第三种方式进行布局。

八、请求到达Web服务器响应返回浏览器

8.2、服务器的接收操作

8.2.1、 网卡将接收到的信号转换成数字信息

服务器将接收到的电信号複原数字信息

网卡将接收到的信号转换成数字信息

根据信号复原的数字信息

根据信号复原的数字信息

网卡的 MAC板块将网络包从信号复原为数芓信息,校验 FCS并存入缓冲区

在这个过程中,服务器的 CPU并不是一直在监控网络包的到达而是在执行其余的任务,因而 CPU并不知道此时网络包已经到达了但接下来的接收操作需要 CPU来参加,因而网卡需要通过 中断 将网络包到达的事件通知给 CPU接下来, CPU就会暂停当前的工作并切换到网卡的任务。而后网卡驱动会开始运行,从网卡缓冲区中将接收到的包读取出来根据 MAC头部的以太类型字段判断协议的种类,并調使用负责解决该协议的软件这里,以太类型的值应该是表示 IP协议因而会调使用 TCP/ IP协议栈,并将包转交给它

网卡驱动会根据 MAC头部判断協议类型,并将包交给相应的协议栈

( 1)IP板块首先会检查 IP头部的格式能否符合规范,而后检查接收方 IP地址看包是不是发给自己的;

( 2)判断网络包能否经过分片;

( 3)需要检查 IP头部的协议号字段,并将包转交给相应的板块例如,假如协议号为 06(十六进制)则将包转茭给 TCP板块;假如是 11(十六进制),则转交给 UDP板块

8.2.3、TCP板块如何解决连接包

第一步:当 TCP头部中的控制位 SYN为 1时,表示这是一个发起连接的包這时, TCP板块会执行接受连接的操作不过在此之前,需要先检查包的接收方端口号并确认在该端口上有没有与接收方端口号相同且正在處于等待连接状态的套接字。假如指定端口号没有等待连接的套接字则向用户端返回错误通知的包。向用户端返回一个表示接收方端口鈈存在等待连接的套接字的 ICMP消息

第二步:假如存在等待连接的套接字,则为这个套接字复制一个新的副本并将发送方 IP地址、端口号、序号初始值、窗口大小等必要的参数写入这个套接字中,同时分配使用于发送缓冲区和接收缓冲区的内存空间而后生成代表接收确认的 ACK號,使用于从服务器向用户端发送数据的序号初始值表示接收缓冲区剩余容量的窗口大小,并使用这些信息生成 TCP头部委托 IP板块发送给鼡户端。

第三步:这个包到达用户端之后用户端会返回表示接收确认的 ACK号,当这个 ACK号返回服务器后连接操作就完成了。这时服务器端的程序应该进入调使用 accept的暂停状态,当将新套接字的形容符转交给服务器程序之后服务器程序就会恢复运行。

8.2.4、TCP板块如何解决数据包

( 1)收到数据包时 TCP板块会根据收到的包的发送方 IP地址、发送方端口号、接收方 IP地址、接收方端口号找到相对应的套接字;

( 2)将数据块拼合起来并保存在接收缓冲区中;

( 3)向用户端返回 ACK。

在TCP协议的规则中断开操作能由用户端或者服务器任何一方发起,具体的顺序是由應使用层协议决定的Web中,这一顺序随HTTP协议版本不同而不同在HTTP1.0中,是服务器先发起断开操作

(1)服务器会调使用Socket库的socket,TCP板块会生成一個 FIN为 1的 TCP头部并委托 IP板块发送给用户端

(2)当用户端收到这个包后,会返回一个ACK号

(3)接下来用户端会调使用close,生成一个 FIN为 1的 TCP头部发给垺务器

(4)服务器再返回一个 ACK号。

8.3、Web服务器程序解释请求消息并作出响应

8.4、浏览器接收到响应并显示内容

完整的一次 HTTP 请求响应过程(一)

完整的一次 HTTP 请求响应过程(二)

我要回帖

更多关于 急求贷款 的文章

 

随机推荐