地址

自学网络协议(四):OSI第三层——网络层的作用(上)

你离开我真会死。 提交于 2019-12-10 16:22:56
前文回顾: 自学网络协议(一):HTTP请求与响应——GET和POST真的不一样吗? 自学网络协议(二):OSI第一层——物理层Physical layer 自学网络协议(三):OSI第二层——机器通信那点事 正文 让我们再次“瞻仰”一下这张意义重大的图: 经过前面的学习,我们已经知道了如何使连接到同一网络(即,局域网)的机器互相通信。 那么,这些局域网中的机器如何与外部机器进行通信呢? 我们从一开始到现在一直在使用“网络”一词,那么网络到底有何含义呢? OSI第3层及其作用·初窥 由上图,OSI第3层,即大名鼎鼎的“网络层”。相较于其他几层,这个名字有些“言简意赅”了,倒是我们少见的名字和作用一致的了。 网络层的作用就是互连网络 —— 这使我们能从一个网络向另一个网络发送消息。 但是,如何做才能将消息发送到我们没有直接连接到的网络中(的电脑中)呢? 由前几节的学习,我们不难得出:网络之间也是互连的,就像一条链 这样的结论。 其实,所谓Internet就像一个由很多网络组成的更庞大的网络。 我们可以认为:互联网好像一间大房子,而互连的网络就像这个大房子里的房间一样。从厨房到卧室,我们要经过几个房间。 对网络来说也是一样。为了从“我的卧室”到达互联网上的一个网站(例如:GitHub)的主机所在的网络,我们要经过许多个中间网络。 而网络层将允许我通过其他网络加入互联网上的任何网络 ——

OS内存管理相关实现(原题: Linux中的内存管理)

风格不统一 提交于 2019-12-10 15:13:39
前一段时间看了《深入理解Linux内核》对其中的内存管理部分花了不少时间,但是还是有很多问题不是很清楚,最近又花了一些时间复习了一下,在这里记录下自己的理解和对Linux中内存管理的一些看法和认识。 我比较喜欢搞清楚一个技术本身的发展历程,简而言之就是这个技术是怎么发展而来的,在这个技术之前存在哪些技术,这些技术有哪些特点,为什么会被目前的技术所取代,而目前的技术又解决了之前的技术所存在的哪些问题。弄清楚了这些,我们才能比较清晰的把握某一项技术。有些资料在介绍某个概念的时候直接就介绍这个概念的意义,原理,而对其发展过程和背后的原理丝毫不提,仿佛这个技术从天上掉下来的一样。介于此,还是以内存管理的发展历程来讲述今天的主题。 首先,我必须要阐述一下这篇文章的主题是Linux内存管理中的分段和分页技术。 让我们来回顾一下历史,在早期的计算机中,程序是直接运行在物理内存上的。换句话说,就是程序在运行的过程中访问的都是物理地址。如果这个系统只运行一个程序,那么只要这个程序所需的内存不要超过该机器的物理内存就不会出现问题,我们也就不需要考虑内存管理这个麻烦事了,反正就你一个程序,就这么点内存,吃不吃得饱那是你的事情了。然而现在的系统都是支持多任务,多进程的,这样CPU以及其他硬件的利用率会更高,这个时候我们就要考虑到将系统内有限的物理内存如何及时有效的分配给多个程序了

s3c2440裸机编程-内存控制器(二、不同位宽设备的连接)

妖精的绣舞 提交于 2019-12-10 11:44:57
不同位宽设备的连接 我们先看一下2440芯片手册上外设rom是如何与CPU地址总线连接的。 8bit rom与CPU地址线的连接 8bit*2 rom与CPU地址线的连接 8bit*4 rom与CPU地址线的连接 16bit rom与CPU地址线的连接 16bit*2 rom与CPU地址线的连接 从上面的图中,我们知道可以对2片位宽为8bit的外设扩展级联成1个16bit的外设,同理可用4片位宽为8bit的外设进行级联成1个32bit的外设... 从上面的图中,我们还看见一个规律: 当外设总线位宽为8bit时, 外设A0接CPU的地址总线ADDR[0], A[1]->ADDR[1] ...A[15]->ADDR[15] 当外设总线位宽为16bit时,外设A0接CPU的地址总线ADDR[1], A[1]->ADDR[2] ...A[15]->ADDR[16] 当外设总线位宽为32bit时,外设A0接CPU的地址总线ADDR[2], A[1]->ADDR[3] ...A[15]->ADDR[17] 那么为什么要这样设计呢? 我们先看一个例子: 假设CPU执行: MOV R0, #3 LDRB R1, [R0] @ 从内存地址为3的地方,读出一个字节 如图有8bitROM、16bitROM、32bitROM (1)对于8bitROM ,8bit是一次读写的最小单位

通过wireshark分析ARP协议

拟墨画扇 提交于 2019-12-10 08:41:57
什么是地址解析协议:   地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。 实现过程: 同网段:   在同一局域网内,如果主机A要想通过B的IP地址确定其MAC地址并和B进行数据交互,需要按照ARP协议的”广播请求和单播应答”来确定主机B的MAC地址。   假如A表示我本机地址192.168.1.8,B表示192.168.1.2,实现过程为:   1) A先查看自己的ARP高速缓存表中是否有B主机的MAC地址记录。     用arp -a查看发现确实有:    为了便于测试,我先删除:arp -ad 192.168.1.2 (要管理员权限)   2) 如果A的ARP高速缓存表中有B的MAC地址记录,则直接通过这个MAC地址进行数据的传输。   3) 如果A主机的ARP高速缓存中没有B主机的记录,则会向局域网的所有主机广播一个ARP请求报文,寻找B主机的MAC地址。     现在A的arp缓存没有B的记录,ping 一下B:ping 192.168.1.2;    

什么是ARP攻击及ARP欺骗的种类

ε祈祈猫儿з 提交于 2019-12-10 06:02:49
什么是ARP ARP(Address Resolution Protocol)是地址解析协议,是一种将IP地址转化成物理地址的协议。从IP地址到物理地址的映射有两种方式:表格方式和非表格方式。ARP具体说来就是将网络层(也就是相当于OSI的网络层)地址解析为数据链路层(也就是相当于OSI的数据链路层)的物理地址(注:此处物理地址并不一定指MAC地址)。 ARP原理:某机器A要向主机B发送报文,会查询本地的ARP缓存表,找到B的IP地址对应的MAC地址后,就会进行数据传输。如果未找到,则广播A一个ARP请求报文(携带主机A的IP地址Ia——物理地址Pa),请求IP地址为Ib的主机B回答物理地址Pb。网上所有主机包括B都收到ARP请求,但只有主机B识别自己的IP地址,于是向A主机发回一个ARP响应报文。其中就包含有B的MAC地址,A接收到B的应答后,就会更新本地的ARP缓存。接着使用这个MAC地址发送数据(由网卡附加MAC地址)。因此,本地高速缓存的这个ARP表是本地网络流通的基础,而且这个缓存是动态的。 什么是ARP欺骗 ARP协议并不只在发送了ARP请求才接收ARP应答。当计算机接收到ARP应答数据包的时候,就会对本地的ARP缓存进行更新,将应答中的IP和MAC地址存储在ARP缓存中。因此,当局域网中的某台机器B向A发送一个自己伪造的ARP应答,而如果这个应答是B冒充C伪造来的

区分大小端

折月煮酒 提交于 2019-12-10 00:27:11
作者:小 琛 欢迎转载,请标明出处 大端、小端 在该大标题下我们还需要了解一个内容:大端和小端 什么是大端和小端: 大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中; 小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。 方便记忆: 大端:低地址存放高数据 小端:低地址存放低数据 一道面试问题:如何判断大小端 代码: # include <stdio.h> int check_sys ( ) { int i = 1 ; return ( * ( char * ) & i ) ; } int check_sys1 ( ) { union { int i ; char c ; } un ; un . i = 1 ; return un . c ; } int main ( ) { int ret = check_sys ( ) ; if ( ret == 1 ) { printf ( "小端\n" ) ; } else { printf ( "大端\n" ) ; } return 0 ; } 来源: CSDN 作者: 小 琛 链接: https://blog.csdn.net/qq_44745063/article/details/103463935

某互联网公司20分钟笔试题

余生颓废 提交于 2019-12-09 18:18:18
某互联网公司C++ 面试 1 分析C++程序运行内存分布 2 写一个函数,输入n,求斐波那契数列的第N项 0 1 1 2 3 5 ...... 3 杨辉三角实现 code部分没有在纸上写出来,知道思路,但是就是不知道如何code,不知道是不是脑子抽筋了! 第一题: 我们先说一下程序的组成,典型的可执行文件分为两部分: 代码段(code),由机器指令组成,该部分是不可改的,编译之后就不在改变,放置在文本段(.text) 数据段(data),它由一下几部分组: 常量(constant),通常放置在只读 read-only的文本段(.text) 静态数据(static data),初始化的放置在数据段(.data);未初始化的放置在(.bss, BSS段的变量只有名称和大小缺没有值) 动态数据(dynamic data),这些数据存储在堆(heap)或栈(stack) 源程序编译后链接到一个以0地址为始地址的线性或者多维虚拟地址空间。而且每一个进程都拥有这样一个空间,每个指令和数据都在这个虚拟地址空间拥有确定的地址,把这个地址称为虚拟地址。将进程中的目标代码、数据等的虚拟地址组成的虚拟空间称为虚拟存储器。典型的虚拟存储器中有类似布局: Text Segment(.text) 代码段 Initialized Data Segment(.data) 初始化数据段 Uninitialized

网络设备

倾然丶 夕夏残阳落幕 提交于 2019-12-09 16:52:31
一、交换机 1、工作原理 交换机位于OSI参考模型中的数据链路层(即第二层),是一种基于MAC地址识别的,用于完成数据的封装和转发的网络设备。交换机可以学习MAC地址,并把其存放在内部地址表中,通过在数据帧的始发者和目标接受者之间建立临时的交互路径,使数据帧直接由源地址到达目的地址。 2、工作过程 (1)当交换机从某个端口收到一个数据包时,先读取包中的源MAC地址,从而建立源端口与源MAC地址的对应关系,并将其添加至地址表。 (2)读取包头中的目的MAC地址,并在地址表中查找相应的端口。 (3)如果地址表中有与该目的MAC地址对应的端口,则把数据包直接复制到这端口上。 (4)如果在MAC地址表中没有找到该MAC地址,也就是说,该目的MAC地址是首次出现,则将该帧发送到所有其他端口(源端自除外),相当于该帧是一个广播帧。拥有该MAC地址的网卡在接收到该广播帧后,将立即作出应答,从而使交换机将“端口号-MAC地址”对照表添加到地址表。 3、在网络中的应用 (1)提供网络接口:连接交换机、路由器、防火墙、无线接入点等网络设备;连接计算机、服务器等计算机设备。 (2)扩充网络接口:尽管交换机大都拥有较多数量的端口(通常为8~52个),但当网络规模较大、接入的设备数量较多时,一台交换机所能提供的网络接口往往不够。此时,就必须将两台或更多的交换机连接在一起,从而成倍地扩充网络接口。 (3

给jdk自带的jvisualvm安装Visual GC插件

断了今生、忘了曾经 提交于 2019-12-09 14:22:32
给jdk自带的jvisualvm安装Visual GC插件,遇到 We're sorry the java.net site has closed(我们很抱歉java.net网站已经关闭) 1、找到新的更新地址 visualvm新访问地址:https://visualvm.github.io/index.html 进入“Plugins”,找到对应自己JDK版本的更新地址 2、进入jvisualvm的插件管理 "工具" - "插件" 在"设置"中修改url地址为刚才我们在github上找到的对应我们JDK版本的地址 修改成功后,可用插件即可刷新出来 3、安装 VisualGC插件 4、重启即可看到VisualGC 4、重启即可看到VisualGC 来源: CSDN 作者: que420527 链接: https://blog.csdn.net/que420527/article/details/103456686

s3c2440裸机编程-内存控制器(一、内存接口概念)

痴心易碎 提交于 2019-12-09 13:26:56
1.内存接口概念 S3C2440是个片上系统,有GPIO控制器(接有GPIO管脚(GPA-GPH)),有串口控制器 (接有TXD RXD引脚),有memory controller内存控制器,有Nand控制器等... 1.不同类型的控制器: (1)GPIO控制器属于门电路,不涉及到时序,相对简单。 (2)串口控制器属于协议类接口,类似的协议类接口还有iic、iis、spi等。 (3)前面的GPIO/门电路接口、协议类接口,都不会把地址输出到外部设备,仅仅只是将地址写入到相应的控制器。 接下来的内存类接口,会把地址输出到外部,cpu将地址写入内存控制器,内存控制器还需访问外部设备,比如NorFlash、网卡、SDRAM。 2.CPU是如何访问各个不同的寄存器的呢? GPIO/门电路接口、协议类接口、内存类接口都属于CPU的统一编址。但对于Nand Flash,它没有独立的地址线和cpu的地址总线相连接,因此它不参与CPU的统一编址。 (1)对于门电路接口、协议类接口,直接访问寄存器即可。 (2)对于内存类接口,交给内存控制器去处理。下面详细分析: CPU只管发出一个地址,内存控制器根据该地址范围选择不同的模块,然后从模块中得到数据或者发送数据到模块中。 如下图,SDRAM、DM9000网卡、Nor Flash都接在JZ2440的数据总线和地址总线上,CPU把数据和地址发送出去