『壹』 网络层的网络层协议
TCP/IP网络层的核心是IP协议,它是TCP/IP协议族中最主要的协议之一。IP协议非常简单,仅仅提供不可靠、无连接的传送服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。 TCP/IP网络使用32位长度的地址以标识一台计算机和同它相连的网络,它的格式为:IP地址=网
络地址+主机地址。IP地址是通过它的格式分类的,它有四种格式:A类、B类、C类、D类。如下所示
格式位数主机地址:A类0网络(7位)主机地址(24位)、
B类10网络(14位)主机地址(16位)、C类110网络(21位)主机地址(8位)、D类1110多路通信地址(28位)、未来的格式11110将来使用。这样,A类地址空间为0-127,最大网络数为126,最大主机数为16,777,124;B类地址空间为128-191,最大网络数为16384,最大主机数为65,534;C类地址空间为192-223,最大网络数为2,097,152,最大主机数为254;D类地址空间为224-254。 C类地址空间分配概况。分配区域地址空间:多区域192.0.0.0~193.255.255.255、欧洲:194.0.0.0~195.255.255.255、其他:196.0.0.0~197.255.255.255、北美:197.0.0.0~199.255.255.255、中南美:200.0.0.0~201.255.255.255、太平洋地区:202.0.0.0~203.255.255.255、其他:204.0.0.0~205.255.255.255、其他:206.0.0.0~207.255.255.255。注:其中“多区域”表示执行该计划前已经分配的地址空间;“其他”表示已指定名称的地区之外的地理区划。
特殊格式的IP地址:广播地址:当网络或主机标志符字段的每位均设置为1时,这个地址编码标识着该数据报是一个广播式的通信,该数据报可以被发送到网络中所有的子网和主机。例如,地址128.2.255.255意味着网络128.2上所有的主机。本网络地址:IP地址的主机标识符字段也可全部设置为0,表示该地址作为“本主机”地址。网络标识符字段也可全部设置为0,表示“本网络”。如,128.2.0.0表示网络地址为128.2的网络。使用网络标识符字段全部设置为0的IP地址在一台主机不知道网络的IP地址时时是很有用的。私有的IP地址:在有些情况下,一个机构并不需要连接到Internet或另一个专有的网络上,因此,无须遵守对IP地址进行申请和登记的规定。该机构可以使用任何的地址。在RFC1597中,有些IP地址是用作私用地址的:A类地址:10.0.0.0到10.255.255.255。B类地址:172.16.0.0到172.31.255.255.255。C类地址:192.168.0.0到192.168.255.255。 ARP协议是“AddressResolutionProtocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。协议属于链路层的协议在以太网中的数据帧从一个主机到达网内的另一台主机是根据48位的以太网地址(硬件地址)来确定接口的,而不是根据32位的IP地址。内核(如驱动)必须知道目的端的硬件地址才能发送数据。当然,点对点的连接是不需要ARP协议的。 ARP协议的数据结构:
以下是引用片段:
typedefstructarphdr
{
unsignedshortarp_hrd;/*硬件类型*/
unsignedshortarp_pro;/*协议类型*/
unsignedchararp_hln;/*硬件地址长度*/
unsignedchararp_pln;/*协议地址长度*/
unsignedshortarp_op;/*ARP操作类型*/
unsignedchararp_sha[6];/*发送者的硬件地址*/
unsignedlongarp_spa;/*发送者的协议地址*/
unsignedchararp_tha[6];/*目标的硬件地址*/
unsignedlongarp_tpa;/*目标的协议地址*/
}ARPHDR,*PARPHDR; 为了解释ARP协议的作用,就必须理解数据在网络上的传输过程。这里举一个简单的PING例子。
假设我们的计算机IP地址是192.168.1.1,要执行这个命令:ping192.168.1.2.该命令会通过ICMP协议发送ICMP数据包。该过程需要经过下面的步骤:1、应用程序构造数据包,该示例是产生ICMP包,被提交给内核(网络驱动程序);2、内核检查是否能够转化该IP地址为MAC地址,也就是在本地的ARP缓存中查看IP-MAC对应表;3、如果存在该IP-MAC对应关系,那么跳到步骤9;如果不存在该IP-MAC对应关系,那么接续下面的步骤;4、内核进行ARP广播,目的地的MAC地址是FF-FF-FF-FF-FF-FF,ARP命令类型为REQUEST(1),其中包含有自己的MAC地址;5、当192.168.1.2主机接收到该ARP请求后,就发送一个ARP的REPLY(2)命令,其中包含自己的MAC地址;6、本地获得192.168.1.2主机的IP-MAC地址对应关系,并保存到ARP缓存中;7、内核将把IP转化为MAC地址,然后封装在以太网头结构中,再把数据发送出去;使用arp-a命令就可以查看本地的ARP缓存内容,所以,执行一个本地的PING命令后,ARP缓存就会存在一个目的IP的记录了。当然,如果你的数据包是发送到不同网段的目的地,那么就一定存在一条网关的IP-MAC地址对应的记录。知道了ARP协议的作用,就能够很清楚地知道,数据包的向外传输很依靠ARP协议,当然,也就是依赖ARP缓存。要知道,ARP协议的所有操作都是内核自动完成的,同其他的应用程序没有任何关系。同时需要注意的是,ARP协议只使用于本网络。 具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址。但是无盘机,如X终端或无盘工作站,则需要采用其他方法来获得IP地址。网络上的每个系统都具有唯一的硬件地址,它是由网络接口生产厂家配置的。无盘系统的RARP实现过程是从接口卡上读取唯一的硬件地址,然后发送一份RARP请求(一帧在网络上广播的数据),请求某个主机响应该无盘系统的IP地址(在RARP应答中)。在概念上这个过程是很简单的,但是实现起来常常比ARP要困难。RARP的正式规范是RFC903[Finlaysonetal.1984]。 RARP的分组格:RARP分组的格式与ARP分组基本一致。它们之间主要的差别是RARP请求或应答的帧类型代码为0x8035,而且RARP请求的操作代码为3,应答操作代码为4。对应于ARP,RARP请求以广播方式传送,而RARP应答一般是单播(unicast)传送的。RARP服务器的设计:虽然RARP在概念上很简单,但是一个RARP服务器的设计与系统相关而且比较复杂。相反,提供一个ARP服务器很简单,通常是TCP/IP在内核中实现的一部分。由于内核知道IP地址和硬件地址,因此当它收到一个询问IP地址的ARP请求时,只需用相应的硬件地址来提供应答就可以了。
作为用户进程的RARP服务器:RARP服务器的复杂性在于,服务器一般要为多个主机(网络上所有的无盘系统)提供硬件地址到IP地址的映射。该映射包含在一个磁盘文件中。由于内核一般不读取和分析磁盘文件,因此RARP服务器的功能就由用户进程来提供,而不是作为内核的实现的一部分。更为复杂的是,RARP请求是作为一个特殊类型的以太网数据帧来传送的。这说明RARP服务器必须能够发送和接收这种类型的以太网数据帧。在附录A中,我们描述了SBD分组过滤器、SUN的网络接口栓以及SVR4数据链路提供者接口都可用来接收这些数据帧。由于发送和接收这些数据帧与系统有关,因此RARP服务器的实现是与系统捆绑在一起的。
每个网络有多个RARP服务器:RARP服务器实现的一个复杂因素是RARP请求是在硬件层上进行广播的,这意味着它们不经过路由器进行转发。为了让无盘系统在RARP服务器关机的状态下也能引导,通常在一个网络上(例如一根电缆)要提供多个RARP服务器。当服务器的数目增加时(以提供冗余备份),网络流量也随之增加,因为每个服务器对每个RARP请求都要发送RARP应答。发送RARP请求的无盘系统一般采用最先收到的RARP应答(对于ARP,我们从来没有遇到这种情况,因为只有一台主机发送ARP应答)。另外,还有一种可能发生的情况是每个RARP服务器同时应答,这样会增加以太网发生冲突的概率。 ICMP的作用:由于IP协议的两个缺陷:没有差错控制和查询机制,因此产生了ICMP。ICMP主要是为了提高IP数据报成功交付的机会,在IP数据报传输的过程中进行差错报告和查询,比如目的主机或网络不可到达,报文被丢弃,路由阻塞,查询目的网络是否可以到达等等。
ICMP有两种报文类型:差错报告报文和询问报文。差错报告报文:终点不可到达(由于路由表,硬件故障,协议不可到达,端口不可达到等原因导致,这时路由器或目的主机向源站发送终点不可到达报文);源站抑制(发生拥塞,平衡IP协议没有流量控制的缺陷);超时(环路或生存时间为0);参数问题(IP数据报首部参数有二义性);改变路由(路由错误或不是最佳)。询问报文:回送请求或回答(用来测试连通性,如:PING命令);时间戳请求或回答(用来计算往返时间或同步两者时间);地址掩码请求或回答(得到掩码信息);路由询问或通告(得知网络上的路由器信息)。ICMP是网际(IP)层的协议,它作为IP层数据报的数据,加上数据报的首部,组成数据报发送出去。 应用层的PING(PacketInterNetGroper)命令用来测试两个主机之间的连通性,PING使用了ICMP回送请求与回送回答报文,属于ICMP询问报文,它是应用层直接使用网络层ICMP的一个特例,它没有通过运输层的TCP或UDP。IP数据报首部的协议字段:IP报文首部的协议字段指出了此数据报是使用的何种协议,以便使目的主机的网络层能够知道如何管理协议
因特网组管理协议(IGMP)被IP主机用于向所有的直接相邻的多播路由器报告它们的多播组成员关系。本文档只描述在主机和路由器之间的确定组成员关系的IGMP应用。作为多播组成员的路由器应当还能表现为一台主机,甚至能对自己的查询作出响应。IGMP还可以应用在路由器之间,但这种应用不在这里描述。就像ICMP一样,IGMP作为整合在IP里面的一部分。所有希望接收IP组播的主机都应当实现IGMP。IGMP消息被封装在IP数据报中,IP协议号为2。本文档所描述的所有IGMP消息在发送时TTL都为1,并在它们的IP首部中含有一个路由器警告选项。主机所关心的所有IGMP消息都具有以下格式:8位类型+8位最大响应时间+16位校验和+32位组地址。 组播协议包括组成员管理协议和组播路由协议。组成员管理协议用于管理组播组成员的加入和离开,组播路由协议负责在路由器之间交互信息来建立组播树。IGMP属于前者,是组播路由器用来维护组播组成员信息的协议,运行于主机和和组播路由器之间。IGMP 信息封装在IP报文中,其IP的协议号为2。
若一个主机想要接收发送到一个特定组的组播数据包,它需要监听发往那个特定组的所有数据包。为解决Internet上组播数据包的路径选择,主机需通过通知其子网上的组播路由器来加入或离开一个组,组播中采用IGMP来完成这一任务。这样,组播路由器就可以知道网络上组播组的成员,并由此决定是否向它们的网络转发组播数据包。当一个组播路由器收到一个组播分组时,它检查数据包的组播目的地址,仅当接口上有那个组的成员时才向其转发。
IGMP提供了在转发组播数据包到目的地的最后阶段所需的信息,实现如下双向的功能: 主机通过IGMP通知路由器希望接收或离开某个特定组播组的信息。 路由器通过IGMP周期性地查询局域网内的组播组成员是否处于活动状态,实现所连网段组成员关系的收集与维护。 IGMP共有三个版本,即IGMP v1、v2 和 v3。
『贰』 初识电脑对电脑中的英文不了解.可以告诉一些常用的常见的电脑术语么
一群性质相近同的「东西」,如果译名一贯,阅读的感觉就很好。
一贯性的术语,扩充性高,延伸性高,系统化高。
● 我喜欢「式」:
constructor 建构式
declaration 宣告式
definition 定义式
destructor 解构式
expression 算式(运算式)
function 函式
pattern 范式、模式、样式
program 程式
signature 标记式
● 我喜欢「件」:(这是个弹性非常大的可组合字)
assembly (装)配件
component 组件
construct 构件
control 控件
event 事件
hardware 硬件
object 物件
part 零件、部件
singleton 单件
software 软件
work 工件、机件
● 我喜欢「器」:
adapter 配接器
allocator 配置器
compiler 编译器
container 容器
iterator 迭代器
linker 联(连)结器
listener 监听器
● 我喜欢「别」:
class 类别
type 型别
● 我喜欢「化」:
generalized 泛化
specialized 特化
overloaded 多载化(重载)
● 我喜欢「型」:
polymorphism 多型
genericity 泛型
● 我喜欢「程」:
process 行程(or 进程,大陆用语)
thread 线程(大陆用语)
programming 编程
●英中繁简编程术语对照
英文 繁体译词
(有些是侯捷个人喜好,普及与否难说) 大陆惯用术语
---------------------------------------------------------------------------------------
#define 定义 预定义
abstract 抽象的 抽象的
abstraction 抽象体、抽象物、抽象性 抽象体、抽象物、抽象性
access 存取、取用 存取、访问
access function 存取函式 存取函数
activate
active
adapter 配接器 适配器
address 位址 地址
address space 位址空间,定址空间
address-of operator 取址运算子 取地址运算符
aggregation 聚合
algorithm 演算法 算法
allocate 配置 分配
allocator (空间)配置器 分配器
application 应用程式 应用、应用程序
application framework 应用程式框架、应用框架 应用程序框架
argument 引数(传给函式的值)。叁见 parameter 叁数、实质叁数、实叁、自变量
array 阵列 数组
arrow operator arrow(箭头)运算子 箭头运算符
assembly 配件
assembly language 组合语言 汇编语言
assign 指派、指定、设值、赋值 赋值
assignment 指派、指定 赋值、分配
assignment operator 指派(赋值)运算子 = 赋值运算符
associated 相应的、相关的 相关的、关联、相应的
associative container 关联式容器(对应 sequential container) 关联式容器
atomic 不可分割的 原子的
attribute 属性 特性
background 背景 背景(用於图形着色)
后台(用於行程)
base class 基础类别 基类
base type 基础型别 (等同於 base class)
batch 批次(意思是整批作业) 批处理
best viable function 最佳可行函式 最佳可行函式
(从 viable functions 中挑出的最佳吻合者)
binary search 二分搜寻法 二分查找
binary tree 二元树 二叉树
binary operator 二元运算子 二元运算符
binding 系结 绑定
bit 位元 位
bit field 位元栏 ? 位域
bitmap 位元图 ? 位图
bitwise 以 bit 为单元逐一┅ ?
bitwise 以 bit 为单元进行复制;位元逐一复制 位拷贝
block 区块 块、区块、语句块
boolean 布林值(真假值,true 或 false) 布尔值
border 边框、框线 边框
brace(curly brace) 大括弧、大括号 花括弧、花括号
bracket(square brakcet) 中括弧、中括号 方括弧、方括号
breakpoint 中断点 断点
build-in 内建 内置
bus 汇流排
byte 位元组(由 8 bits 组成) 字节
cache 快取 高速缓存
call 呼叫、叫用 调用
callback 回呼 回调
call operator call(函式呼叫)运算子 () 调用运算符
(同 function call operator)
candidate function 候选函式 候选函数
(在函式多载决议程序中出现的候选函式)
chain 串链(例 chain of function calls) 链
character 字元 字符
check box 核取方块 (i.e. check button) 复选框
check button 方钮 (i.e. check box) 复选按钮
child class 子类别(或称为derived class, subtype) 子类
class 类别 类
class body 类别本体 类体 ?
class declaration 类别宣告、类别宣告式 类声明
class definition 类别定义、类别定义式 类定义
class derivation list 类别衍化列 类继承列表
class head 类别表头 类头 ?
class hierarchy 类别继承体系, 类别阶层 类层次体系
class library 类别程式库、类别库 类库
class template 类别模板、类别范本 类模板
class template partial specializations
类别模板偏特化 类模板部分特化
class template specializations
类别模板特化 类模板特化
cleanup 清理、善后 清理、清除
client 客端、客户端、用户端 客户端
client-server 主从架构 客户/服务器
clipboard 剪贴簿 剪贴板
clone 复制 克隆
(易与 混淆)
collection 群集 集合 ?
combo box 复合方块、复合框 组合框
command line 命令列 命令行
(系统文字模式下的整行执行命令)
communication 通讯 通讯
compile time 编译期 编译期、编译时
compiler 编译器 编译器
component 组件 组件
composition 复合、合成、组合 组合
computer 电脑、计算机 计算机、电脑
concrete 具象的 实在的
concurrent 并行 并发
configuration 组态 配置
container 容器 容器
(存放资料的某种结构如 list, vector...)
context 背景关系、周遭环境、上下脉络 环境、上下文
control 控制元件、控件 控件
const 常数(constant 的缩写,C++ 关键字)
constant 常数(相对於 variable) 常量、常数
constructor(ctor) 建构式 构造函数、构造器
(与class 同名的一种 member functions)
复制、拷贝 拷贝
cover 涵盖 覆盖
create 产生、生成 创建、生成
creation 产生、生成 创建、生成
data 资料 数据
data member 资料成员、成员变数 数据成员、成员变量
data structure 资料结构 数据结构
datagram 资料元 数据报文
dead lock 死结 死锁
debug 除错 调试
declaration 宣告、宣告式 声明
dection 推导(例:template argument dection) 推导、推断
default 预设 缺省、默认
definition 定义、定义区、定义式 定义
delegate 委派、委托、委任
delegation (同上)
dereference 提领(取出指标所指物体的内容) 解叁考
dereference operator dereference(提领)运算子 * 解叁考算符
derived class 衍生类别 派生类
design by contract 契约式设计
design pattern 设计样式 设计模式
※ 最近我比较喜欢「设计范式」一词
destructor(dtor) 解构式 析构函数、析构器
device 装置、设备 设备
dialog 对话窗、对话盒 对话框
directive 指令(例:using directive) (编译)指示符
directory 目录 目录
distributed computing 分布式计算 (分布式电算) 分布式计算
分散式计算 (分散式电算)
document 文件 文档
dot operator dot(句点)运算子 . (圆)点运算符
driver 驱动程式 驱动(程序)
dynamic binding 动态系结 动态绑定
efficiency 高效、效率、效能
entity 物体 实体、物体
encapsulation 封装 封装
enclosing class 外围类别(与巢状类别 nested class 有关)外围类
enum (enumeration) 列举(一种 C++ 资料型别) 枚举
enumerators 列举元(enum 型别中的成员) 枚举成员、枚举器
equality operator equality(等号)运算子 == 等号运算符
evaluate 评估、求值、核定 评估
event 事件 事件
event driven 事件驱动的 事件驱动的
exception 异常情况 异常
exception declaration 异常宣告(ref. C++ Primer 3/e, 11.3) 异常声明
exception handling 异常处理、异常处理机制 异常处理、异常处理机制
exception specification 异常规格(ref. C++ Primer 3/e, 11.4) 异常规范
exit 退离(指离开函式时的那一个执行点) 退出
explicit 明白的、明显的、显式 显式
export 汇出 引出、导出
expression 运算式、算式 表达式
facility 设施、设备 设施、设备
feature 特性
field 栏位 字段
file 档案 文件
firmware 韧体 固件
flush 清理、扫清 刷新
form 表单(programming 用语)
formal parameter 形式叁数 形式叁数
forward declaration 前置宣告 前置声明
fractal 碎形 分形
framework 框架 框架
full specialization 全特化(ref. partial specialization) ?
function 函式、函数 函数
function call operator 同 call operator
function object 函式物件(ref. C++ Primer 3/e, 12.3) 函数对象
function overloaded resolution
函式多载决议程序 函数重载解决(方案)
function template 函式模板、函式范本 函数模板
functor 仿函式 仿函式、函子
generic 泛型、一般化的 一般化的、通用的、泛化
generic algorithm 泛型演算法 通用算法
global 全域性的(对应於 local) 全局的
global scope resolution operator
全域生存空间(范围决议)运算子 :: 全局范围解析运算符
group 群组 ?
group box 群组方块 分组框
hand shaking 握手协商
handle 识别码、识别号、号码牌、权柄 句柄
handler 处理常式 处理函数
hardware 硬体 硬件
hash table 杂凑表 哈希表、散列表
header file 表头档、标头档 头文件
heap 堆积 堆
hierarchy 阶层体系 层次结构(体系)
hook 挂钩 钩子
hyperlink 超链结 超链接
IDE 整合开发环境 集成开发环境
identifier 识别字、识别符号 标识符
immediate base 直接的(紧临的)上层 base class。 直接上层基类
immediate derived 直接的(紧临的)下层 derived class。 直接下层派生类
implement 实作 实现
implementation 实作品、实作物、实作体、实作码 实现
implicit 隐喻的、暗自的、隐式 隐式
import 汇入 导入
increment operator 累加运算子 ++ 增加运算符
information 资讯 信息
infrastructure 公共基础建设
inheritance 继承、继承机制 继承、继承机制
inline 行内 内联
inline expansion 行内展开 内联展开
initialization 初始化(动作) 初始化
initialization list 初值列 初始值列表
initialize 初始化 初始化
instance 实体 实例
(根据某种表述而实际产生的「东西」)
instantiated 具现化、实体化(常应用於 template) 实例化
instantiation 具现体、具现化实体(常应用於 template) 实例
integrate 整合 集成
interface 介面 接口
invoke 唤起 调用
iterate 迭代(回圈一个轮回一个轮回地进行) 迭代
iterative 反覆的,迭代的
iterator 迭代器(一种泛型指标) 迭代器
iteration 迭代(回圈每次轮回称为一个 iteration) 迭代
item 项目、条款 项、条款、项目
laser 雷射 激光
level 阶 层
例 high level 高阶 高层
library 程式库、函式库 库、函数库
lifetime 生命期、寿命 生命期、寿命
link 联结、连结 连接
linker 联结器、连结器 连接器
literal constant 字面常数(例 3.14 或 "hi" 这等常数值) 字面常数
list 串列(linked-list) 列表、表、链表
list box 列表方块、列表框 列表框
load 载入 装载、加载
loader 载入器 装载器、载入器
local 区域性的(对应於 global) 局部的
lock 机锁
loop 回圈 循环
lvalue 左值 左值
macro 巨集 宏
maintain 维护 维护
manipulator 操纵器(iostream 预先定义的一种东西) 操纵器
mechanism 机制 机制
member 成员 成员
member access operator 成员取用运算子(有 dot 和 arrow 两种) 成员存取运算符
member function 成员函式 成员函数
member initialization list
成员初值列 成员初始值列表
memberwise 以 member 为单元┅、members 逐一┅ 以成员为单位
memberwise 以 members 为单元逐一复制
memory 记忆体 内存
menu 表单、选单 菜单
message 讯息 消息
message based 以讯息为基础的 基於消息的
message loop 讯息回圈 消息环
method (java) 方法、行为
micro 微 微
modeling 模塑
modeling language 塑模语言,建模语言
mole 模组 模块
most derived class 最末层衍生类别 最底层的派生类
mouse 滑鼠 鼠标
mutable 可变的 可变的
multi-tasking 多工 多任务
namespace 命名空间 名字空间、命名空间
nested class 巢状类别 嵌套类
object 物件 对象
object based 以物件为基础的 基於对象的
object model 物件模型 对象模型
object oriented 物件导向的 面向对象的
online 线上 在线
operand 运算元 操作数
operating system (OS)
『叁』 零基础能学JAVA开发吗
基础学Java,只要方法得当,就有机会学好Java开发。学Java就像交朋友一样,从陌生到熟悉再到死党,随着学习的深入,你会发现Java并不是想象的那么枯燥和困难,甚至有种妙不可言的乐趣。
6、阅读开源框架源码
一个合格的开发者必先能灵活的使用各种框架,而要想成为一个出色的开发者,就应该不断的去学习流行框架的源码,这样在深入了解框架内部机制的同时还能得到大量的练习,逐步丰富自己的代码设计思想,做一个代码的创造者而不是代码的复制者。