异常

Java基础学习框架思维导图

异常

什么是异常?

  • 概念:程序在运行过程中出现的特殊情况。
  • 异常处理的必要性:任何程序都可能存在大量的未知问题、错误;如果不对这些问题进行正确处理,则可能导致程序的中断,造成不必要的损失。

异常的分类

  • Throwable:可抛出的,一切错误或异常的父类,位于java.lang包中。

    Error:JVM、硬件、执行逻辑错误,不能手动处理。

public class TestError {
	public static void main(String[] args) {
		m1();//无穷递归
	}
	//Exception in thread "main" java.lang.StackOverflowError
	//程序当中--->error---->致命的。不能通过手动另外一段代码解决错误
	public static void m1() {
		int a = 20;
		int b = 30;
		m1();
	}
}
 Exception:程序在运行和配置中产生的问题,可处理。
 		RuntimeException:运行时异常,可处理,可不处理(不管可由java虚拟机处理,打印堆栈跟踪信息)。
import java.util.Scanner;

public class TestException {

	public static void main(String[] args) {
		//不处理--由java虚拟机处理,打印堆栈跟踪信息
		//m1();
		//m2();
		//m3();
		//m4();
		//m5();
		//m6();
	}
	//java.lang.ClassCastException类型转换异常
	public static void m1() {
		Object o = new Integer(2);
		Scanner sc = (Scanner)o;
	}
	//java.lang.ArithmeticException算术异常
	public static void m2() {
		System.out.println(10/0);
	}
	//java.lang.ArrayIndexOutOfBoundsException数组下标越界
	public static void m3() {
		int[] nums = new int[1] ;
		System.out.println(nums[1]);
	}
	//java.lang.StringIndexOutOfBoundsException
	public static void m4() {
		String str = "ABC" ; 
		System.out.println(str.charAt(5));
	}
	//java.util.InputMismatchException输入匹配异常
	public static void m5() {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个数字:");//当输入的不是数值是字符
		int num = sc.nextInt();
	}
	//java.lang.NullPointerException空指针异常
	public static void m6() {
		Object o = null;
		o.hashCode();
	}
}
		CheckedException:受查异常,必须处理。
public class TestException2 {

	public static void main(String[] args)throws  Exception {//采用默认的处理方案,JVM处理打印堆栈跟踪信息
		Class.forName("xx.xx");//权限命名
	}
	//运行报错 java.lang.ClassNotFoundException
}

异常的产生

  • 自动抛出异常:当程序在运行时遇到不符合规范的代码或结果时,会产生异常。
  • 手动抛出异常:语法:throw new 异常类型(“实际参数”);
public class TestThrowException {

	public static void main(String[] args) {
		Student stu = new Student();
		stu.setAge(180);//在调用者角度来说,不清楚违规的问题
		System.out.println(stu.getAge());
	}
}
class Student{
	private int age;
	public int getAge() {
		return this.age;
	}
	public void setAge(int age) {
		if(age >0 && age<125) {
			this.age=age;
		}else {
			RuntimeException re = new RuntimeException();//1.创建异常对象,单独存在仅仅是个对象
			throw re;//2.结合throw关键字,抛出异常
			//throw new RuntimeException();
			//this.age = 18;//;
		}
	}
}
  • 产生异常结果:相当于遇到return语句,导致程序因异常而终止。
public class TestMethosBack {

	public static void main(String[] args) {
		//printSign(10);
		System.out.println("因为异常的产生所以此句不执行");
	}
	public static void printSign(int rows) {
		if(rows % 2 == 0) {
			throw new RuntimeException();//相当于遇到了return语句,无条件结束当前方法
		}
		System.out.println("小白正在加载菱形");
	}
}

异常的传递

  • 异常的传递:按照方法的调用链反向传递,如始终没有异常处理,最后会由JVM进行默认异常处理(打印堆栈跟踪信息)
public class TestTransferException {

	public static void main(String[] args) {
		System.out.println("main--start");
		m1(10);
		System.out.println("main--end");
	}
	public static void m1(int n) {
		System.out.println("m1--start");
		m2(n);
		System.out.println("m1--end");
	}
	public static void m2(int n) {
		System.out.println("m2--start");
		m3(n);
		System.out.println("m2--end");
	}
	public static void m3(int n) {
		System.out.println("m3--start");
		if(n%2 == 0) {
			throw new RuntimeException();
		}
		System.out.println("m3--end");
	}
}

main--start m1--start m2--start m3--start

  • 受查异常:throws声明异常,修饰在方法参数列表后端。throws称为消极的处理方式
public class TestTransferException {

	public static void main(String[] args)throws Exception {//JVM打印跟踪信息,抛到了JVM
		System.out.println("main--start");
		m1(10);
		System.out.println("main--end");
		//method(2);
	}
	public static void m1(int n) throws Exception{
		System.out.println("m1--start");
		m2(n);
		System.out.println("m1--end");
	}
	public static void m2(int n)throws Exception{
		System.out.println("m2--start");
		m3(n);
		System.out.println("m2--end");
	}
	public static void m3(int n) throws Exception{//向上声明:声明该方法可能存在受查异常
		System.out.println("m3--start");
		if(n%2 == 0) {
			throw new Exception();
		//	throw new RuntimeException();
		}
		System.out.println("m3--end");
	}
	public static void method(int n)throws RuntimeException{//运行时异常可以不声明
		if(n%2==0) {
			throw new RuntimeException();
		}
	}
}
  • 运行时异常:因可处理,可不处理,无需声明异常。

异常的处理

  • try{
    可能出现异常的代码
    }catch(Exception e){
    异常处理的相关代码,如:getMessage()、printStackTrance()
    }finally{
    无论是否出现异常,都需要执行的代码结构,常用于释放资源。
    }
import java.util.Scanner;

public class TestTryCatch {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.println("请输入一个被除数");
		int num1 = sc.nextInt();
		
		System.out.println("请输入一个除数");//当除数为0时,出现异常
		int num2 = sc.nextInt();
		
		try {
			int result = num1/num2;
			System.out.println("运行结果为"+result);
		}catch(Exception e){//e=new ArithmeticException
			//System.out.println("除数不能为0");//处理方案,自定义处理
			//e.printStackTrace();
			System.out.println(e.getMessage());
		}
		System.out.println("程序结束");
		
	}
}

import java.util.Scanner;

public class TestMoreTryCatch {
		public static void main(String[] args) {
			Scanner sc = new Scanner(System.in);
			int num1=0;
			int num2 =0;
			try {
				System.out.println("请输入一个被除数");
				num1 = sc.nextInt();
			
				System.out.println("请输入一个除数");//当除数为0时,出现异常
				num2 = sc.nextInt();//输入的不能为字母
			}(Exception e){
				System.out.println("请输入正确的整数");
			}
			
			
			try {
				int result = num1/num2;
				System.out.println("运行结果为"+result);
			}catch(Exception e){//e=new ArithmeticException
				System.out.println("除数不能为0");
			}
			
		}
}
请输入一个被除数
10
请输入一个除数
o
请输入正确的整数
除数不能为0

没有办法对异常进行精准掌控则使用给一个try-catch即可

常见异常处理结构

  • try{} catch{}
  • try{} catch{}catch{}
  • try{} catch{}finally{}
  • try{} catch{}catch{}finally{}
  • try{} finally{}
  • 注:多重catch,遵循从子(小)到父(大)的顺序,父类异常在最后
import java.util.InputMismatchException;
import java.util.Scanner;

public class TestMoreTryCatch {
		public static void main(String[] args) {
			Scanner sc = new Scanner(System.in);
			int num1=0;
			int num2 =0;
			try {
				System.out.println("请输入一个被除数");
				num1 = sc.nextInt();
			
				System.out.println("请输入一个除数");//当除数为0时,出现异常
				num2 = sc.nextInt();//输入的不能为字母
	
				int result = num1/num2;
				System.out.println("运行结果为"+result);
			
				
				//上述程序报的异常一个是ArithmeticException InputMismatchException
			}/*catch(Exception e) {
				System.out.println("出现未知问题");  //放到最后
			}*/catch(ArithmeticException e){
				System.out.println("除数不能为0");
			}catch(InputMismatchException e) {
				System.out.println("请输入正确的整数");
			}	
		}
}

finally优先于return前

public class TestFinally {

	public static void main(String[] args) {
		
		
		System.out.println(method(2));

	}
	public static int method(int n) {
		try{
			if(n%2 == 0) {
				throw new RuntimeException();
			}
			return 20;
		}catch(Exception e) {
			System.out.println("解决异常");
			return 30;
		}finally {
			System.out.println("程序结束");
		}
	}
}

自定义异常

  • 需继承自Exception或Exception的子类,常用于RuntimeException(运行时异常)。
  • 必须提供的构造方法:
    无参数构造方法
    String message参数的构造方法。(调用父类有参构造方法,Throwable)
public class TestDefinedException {

	public static void main(String[] args) {
		Student stu = new Student();
		try{
			stu.setAge(250);//是可能出现异常的代码
		}catch(Exception e) {
			//System.out.println(e.getMessage());//只获得报错的原因即可
			System.err.println(e.getMessage());//红色提醒信息
		}
		
		try{
			stu.setSex("未知");//用以测试异常
		}catch(SexMismatchException se) {
			//System.out.println(se.getMessage());
			System.err.println(se.getMessage());
		}catch(Exception e) {
			e.printStackTrace();
		}
		//Class.forName("xxx.xxx");//参数(包名.类名)可能写错! 很具体
	}
}
//受查异常
class SexMismatchException extends Exception{
	public SexMismatchException() {}
	public SexMismatchException(String message) {
		super(message);
	}
}

//运行时异常
class AgeInputException extends RuntimeException{
	public AgeInputException() {}//支持创建无异常原因信息的异常对象
	public AgeInputException(String message) {//提供有参构造方法,支持编写异常原因信息
		super(message);//调用父类的有参构造方法,为message属性赋值
	}
}
//在应用场景下,可以根据自身的需要,自定义异常
class Student{
	private int age;
	private String sex;
	
	public void setSex(String sex)throws Exception{//告知调用者使用该方法会存在异常必须处理
		if(sex.equals("男")||sex.equals("女")) {
			this.sex=sex;
		}else {
			//在用户输入一个性别后;就做好提醒;性别的输入可能不准确;受查异常。
			throw new SexMismatchException("性别输入男或者女");
		}
	}
	public int getAge() {
		return this.age;
	}
	public void setAge(int age) {
		if(age > 0 && age< 123) {
			this.age=age;
		}else {
			throw new AgeInputException("年龄的赋值应该在0岁——123岁之间");//抛出时异常的父类,不合理。现存的定义好的异常,没有符合现在程序的场景
		}
	}
}

方法覆盖

  • 带有异常声明的方法覆盖:
    方法名、参数列表、返回值类型必须和父类相同。
    子类的访问修饰符和父类相同或是比父类更宽。
    子类中的方法,不能抛出比父类更宽的异常,但可以比父类抛出更多的异常(前提是抛出的异常小于或等于父类异常级别)。
public class TestOverrideException {

	public static void main(String[] args) {
		Super sup = new Sub();//父类引用指向子类对象 多态
		try {
			sup.method(); //编译看左边,运行看右边,编译期间调用的是父类的method,运行期间用的子类重写的method
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}
//带有异常的方法覆盖
//1.父类中方法声明了异常,子类重写后可声明也可不声明
//2.父类中方法没有声明异常,则子类也不可以声明异常。
//3.父类中方法声明异常,子类可以声明异常的异常与其相等或是其子类
//4.子类可以声明比父类更多的异常,必须小于其父类声明的异常
class Super{
	public void method() throws Exception{
		System.out.print("method in Super");
	}
}
class Sub extends Super {
	public void method()throws Exception /*3.ClassNotFoundException*//*4.ClassNotFoundException,RuntimeException,IOException*/{
		System.out.print("method in Sub");
	}
}
interface Printable{
	void print()throws Exception;
}
class MyClass implements Printable{

	@Override
	public void print() throws ClassNotFoundException,RuntimeException{
		System.out.print("print in MyClass");
	}
}

finally的补充扩展知识
扩充方法执行中字节码操作指令
cmd>javap -verbose TestResultValue > TestResultValue.bytecode

public class TestResultValue {

	public static void main(String[] args) {
		int result = m1();
		System.out.println(result);
		//当前案例,不能用应用层来理解。//值输出为30
	}
	public static int m1() {
		int a =10;
		try {
			a=20;
			throw new RuntimeException();
		}catch(Exception e) {
			a=30;
			return a;
		}finally {
			a=40;
		}
	}
}

扩充方法执行中字节码操作指令

  1. try可以简单理解为尝试运行代码,任何一行代码出现异常,则不会继续执行try里面后面的代码,而是跳到catch中

  2. finally表示必定会执行的代码,无论代码时候出现异常,会在return前执行

  3. 如果在finally里面写return,将使得前面的代码没有意义,(不要如此)

  4. 在return之前会将a的值放到内存中的某个位置缓存起来,等会在return的时候将会使用此缓存的值进行返回

    基本数据类型,缓存的是变量的值
    引用数据类型,缓存的是当前对象的值
    当引用数据类型时,finally里面不是改变原引用的地址,而是去改变对象的属性值
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目 录 译者序 前言 第一部分 TCP/IP基础 第1章 开放式通信模型简介 1 1.1 开放式网络的发展 1 1.1.1 通信处理层次化 2 1.1.2 OSI参考模型 3 1.1.3 模型的使用 5 1.2 TCP/IP参考模型 7 1.3 小结 7 第2章 TCP/IP和Internet 8 2.1 一段历史 8 2.1.1 ARPANET 8 2.1.2 TCP/IP 9 2.1.3 国家科学基金会(NSF) 9 2.1.4 当今的Internet 12 2.2 RFC和标准化过程 12 2.2.1 获得RFC 13 2.2.2 RFC索引 13 2.2.3 有关RFC的幽默 13 2.3 Internet服务简介 13 2.3.1 Whois和Finger 14 2.3.2 文件传输协议 14 2.3.3 Telnet 14 2.3.4 Email 14 2.3.5 WWW 14 2.3.6 USENET News 15 2.4 Intranet和Extranet概览 15 2.4.1 Intranet 15 2.4.2 将Intranet对外开放 16 2.5 Internet的明天 16 2.5.1 下一代Internet(NGI) 16 2.5.2 超速骨干网服务 16 2.5.3 Internet2(I2) 17 2.6 Internet管理组织 17 2.6.1 Internet协会 17 2.6.2 Internet体系结构组 17 2.6.3 Internet工程任务组 17 2.6.4 Internet工程指导组 17 2.6.5 Internet编号管理局 18 2.6.6 Internet名字和编号分配组织 (ICANN) 18 2.6.7 Internet网络信息中心和其他注 册组织 18 2.6.8 RFC编辑 18 2.6.9 Internet服务提供商 18 2.7 小结 19 第3章 TCP/IP概述 20 3.1 TCP/IP的优点 20 3.2 TCP/IP的层和协议 21 3.2.1 体系结构 21 3.2.2 传输控制协议 21 3.2.3 IP协议 23 3.2.4 应用层 25 3.2.5 传输层 25 3.2.6 网络层 25 3.2.7 链路层 25 3.3 远程登录(Telnet) 25 3.4 文件传输协议(FTP) 25 3.5 普通文件传输协议(TFTP) 26 3.6 简单邮件传输协议(SMTP) 26 3.7 网络文件系统(NFS) 26 3.8 简单网络管理协议(SNMP) 27 3.9 TCP/IP和系统结合 27 3.10 内部网概述 28 3.11 小结 28 第二部分 命名和寻址 第4章 IP网络中的名字和地址 29 4.1 IP寻址 29 4.1.1 二进制和十进制数 30 4.1.2 IPv4地址格式 30 4.2 子网的出现 34 4.2.1 分子网 35 4.2.2 可变长子网掩码(VLSM) 37 4.3 无类域前路由(CIDR) 38 4.3.1 无类地址 38 4.3.2 强化路由汇聚 39 4.3.3 超网化 39 4.3.4 CIDR怎样工作 39 4.3.5 公共地址空间 40 4.3.6 RFC 1597和1918 40 4.4 小结 40 第5章 ARP和RARP 41 5.1 使用地址 41 5.1.1 子网寻址 41 5.1.2 IP地址 43 5.2 使用地址解析协议 44 5.2.1 ARP cache 45 5.2.2 代理ARP 47 5.2.3 反向地址解析协议 47 5.3 使用ARP命令 47 5.4 小结 47 第6章 DNS:名字服务器 48 6.1 域名系统概述 48 6.2 授权局 50 6.3 DNS分布数据库 50 6.4 域和区 50 6.5 Internet顶级域 51 6.6 选择一个域名服务器 52 6.7 名字服务解析过程 52 6.7.1 递归查询 52 6.7.2 叠代查询 52 6.8 高速缓存 52 6.9 反向解析(Pointer)查询 52 6.10 DNS安全 52 6.11 资源记录 53 6.12 小结 54 第7章 WINS 55 7.1 NetBIOS 55 7.2 NetBIOS名字解析 57 7.3 动态NetBIOS名字解析 58 7.3.1 使用WINS的优点 58 7.3.2 WINS如何工作 59 7.3.3 配置WINS客户机 60 7.3.4 为代理配置WINS 60 7.3.5 配置NT 4.0系统 61 7.3.6 配置Windows 95或Windows 98 系统 61 7.4 安装WINS服务器 61 7.5 WINS管理和维护 62 7.5.1 加入静态表项 62 7.5.2 维护WINS数据库 63 7.5.3 备份WINS数据库 65 7.5.4 备份WINS注册项 65 7.5.5 恢复WINS数据库 65 7.5.6 压缩WINS数据库 66 7.5.7 WINS复制参与者 66 7.5.8 WINS实现建议 67 7.6 集成WINS和DNS名字解析服务 67 7.7 DHCP服务WINS选项 67 7.8 通过LMHOSTS进行NetBIOS名字 解析 68 7.9 小结 69 第8章 地址发现协议(BOOTP和DHCP) 71 8.1 “引导”协议(BOOTP) 71 8.2 动态主机配置协议(DHCP) 72 8.2.1 DHCP如何工作 72 8.2.2 理解租用地址 73 8.3 管理地址池 74 8.4 DHCP能处理的其他分配 75 8.4.1 注意重载 75 8.4.2 其他分配 75 8.5 小结 76 第三部分 IP和相关协议 第9章 IP协议家族 77 9.1 TCP/IP模型 77 9.1.1 解剖TCP/IP模型 78 9.1.2 协议组件 78 9.2 理解网际协议(IP) 79 9.2.1 IPv4结构 79 9.2.2 IP做什么 80 9.3 理解传输控制协议(TCP) 81 9.3.1 TCP头结构 81 9.3.2 TCP做什么 83 9.4 理解用户数据报协议(UDP) 85 9.4.1 UDP头结构 85 9.4.2 UDP能做什么 85 9.4.3 TCP和UDP 86 9.5 小结 86 第10章 IPv6 87 10.1 IPv6数据报 87 10.1.1 优先级分类 88 10.1.2 流标识 89 10.1.3 128位IP地址 89 10.1.4 IP扩展头 90 10.2 多IP地址主机 91 10.3 单播、组播和任一播头 91 10.4 从IPv4到IPv6的过渡 93 10.5 小结 94 第四部分 IP互联 第11章 IP网络中的路由 95 11.1 路由基本知识 95 11.1.1 静态路由 96 11.1.2 距离-向量路由 99 11.1.3 链路-状态路由 100 11.2 IP网络中的收敛 102 11.2.1 适应拓扑变化 102 11.2.2 收敛时间 106 11.3 计算IP网络中的路由 106 11.3.1 存储多条路由 107 11.3.2 初始化更新 107 11.3.3 路由度量标准 107 11.4 小结 108 第12章 路由信息协议(RIP) 109 12.1 理解RFC1058 109 12.1.1 RIP报文格式 109 12.1.2 RIP路由表 111 12.2 操作机制 112 12.2.1 计算距离向量 113 12.2.2 更新路由表 116 12.2.3 寻址问题 118 12.3 拓扑变化 120 12.3.1 收敛 120 12.3.2 计值到无穷 122 12.4 RIP的限制 127 12.4.1 跳数限制 128 12.4.2 固定度量 128 12.4.3 对路由表更新反应强烈 128 12.4.4 收敛慢 128 12.4.5 缺乏负载均衡 128 12.5 小结 129 第13章 开放式最短路径优先 130 13.1 OSPF起源 130 13.2 理解RFC 2328 OSPF,版本2 130 13.2.1 OSPF区 131 13.2.2 路由更新 134 13.3 研究OSPF数据结构 136 13.3.1 HELLO报文 137 13.3.2 数据库描述报文 137 13.3.3 链路-状态请求报文 138 13.3.4 链路-状态更新报文 138 13.3.5 链路-状态应答报文 140 13.4 计算路由 140 13.4.1 使用自动计算 140 13.4.2 使用缺省路由耗费 141 13.4.3 最短路径树 142 13.5 小结 144 第14章 网关协议 145 14.1 网关、桥和路由器 145 14.1.1 网关 145 14.1.2 网桥 146 14.1.3 路由器 146 14.1.4 自治系统 146 14.2 网关协议:基础知识 146 14.3 内部网关协议和外部网关协议 147 14.3.1 网关-网关协议(GGP) 147 14.3.2 外部网关协议(EGP) 147 14.3.3 内部网关协议(IGP) 148 14.4 小结 148 第五部分 网络服务 第15章 互联网打印协议 149 15.1 IPP历史 149 15.2 IPP和端用户 150 15.3 使用HP的IPP实现 151 15.4 小结 152 第16章 LDAP:目录服务 153 16.1 为什么使用目录服务 153 16.2 目录服务的功能 153 16.3 IP上的目录服务 154 16.4 OSI X.500目录模型 156 16.4.1 早期的X.500 157 16.4.2 今天的X.500 157 16.5 LDAP结构 157 16.5.1 LDAP层次结构 157 16.5.2 名字结构 158 16.6 目录系统代理和访问协议 158 16.7 轻型目录访问协议 158 16.7.1 查询信息 159 16.7.2 存储信息 160 16.7.3 访问权限和安全 160 16.8 LDAP服务器-服务器通信 161 16.8.1 LDAP数据互换格式(LDIF) 161 16.8.2 LDAP复制 162 16.9 设计LDAP服务 162 16.9.1 定义需求 162 16.9.2 设计策略 163 16.9.3 性能 164 16.9.4 网络功能 165 16.9.5 安全 166 16.10 LDAP配置 169 16.11 产品环境 169 16.11.1 创建计划 170 16.11.2 有价值的建议 171 16.12 选择LDAP软件 171 16.13 小结 174 第17章 远程访问协议 175 17.1 远程互联 175 17.1.1 ISDN 176 17.1.2 电缆调制解调器 176 17.1.3 数字用户环(DSL) 176 17.1.4 无线网络 177 17.2 远程认证拨入用户服务(RADIUS) 177 17.2.1 RADIUS认证 178 17.2.2 记账信息 179 17.3 用SLIP、CSLIP和PPP传输IP数 据报文 179 17.3.1 串行线路接口协议(SLIP) 179 17.3.2 压缩的SLIP(CSLIP) 180 17.3.3 点到点协议(PPP) 180 17.4 隧道远程访问 184 17.4.1 点到点隧道协议(PPTP) 185 17.4.2 两层隧道协议(L2TP) 188 17.4.3 IPSec 192 17.5 小结 194 第18章 防火墙 195 18.1 使网络安全 195 18.2 使用防火墙 196 18.2.1 代理服务器 197 18.2.2 报文过滤器 198 18.3 使服务安全 198 18.3.1 电子邮件(SMTP) 198 18.3.2 HTTP:万维网 199 18.3.3 FTP 199 18.3.4 Telnet 199 18.3.5 Usenet:NNTP 199 18.3.6 DNS 200 18.4 建造用户自己的防火墙 200 18.5 使用商业防火墙软件 200 18.6 小结 202 第19章 IP安全 203 19.1 使用加密 203 19.1.1 公共-私钥加密 204 19.1.2 对称私钥加密 205 19.1.3 DES、IDEA及其他 205 19.2 数字签名认证 206 19.3 破译加密的数据 207 19.4 保护网络 207 19.4.1 登录名和口令 208 19.4.2 文件的目录允许权限 208 19.4.3 信任关系 209 19.4.4 UNIX和Linux系统上的UUCP 209 19.5 应付最坏情况 210 19.6 小结 210 第六部分 实现TCP/IP 第20章 一般配置问题 211 20.1 安装网卡 211 20.1.1 网卡 211 20.1.2 资源配置 212 20.1.3 安装适配器软件 213 20.1.4 重定向器和API 214 20.1.5 服务 214 20.1.6 NIC接口 215 20.2 网络和传输层协议 215 20.2.1 IP配置要求 215 20.2.2 配置缺省网关地址 216 20.2.3 配置名字服务器地址 217 20.2.4 配置邮件服务器地址 217 20.2.5 注册域名 218 20.3 IP配置 218 20.4 配置路由表 218 20.5 异种协议的IP封装 219 20.6 小结 220 第21章 Windows 98 221 21.1 Windows 98网络体系结构 221 21.1.1 安装网卡 222 21.1.2 更改网卡配置 224 21.1.3 当Windows 98引导失败 224 21.2 配置Windows 98的TCP/IP 225 21.2.1 写在开始之前 225 21.2.2 安装TCP/IP 225 21.2.3 配置微软的TCP/IP 225 21.2.4 DNS配置 227 21.2.5 静态配置文件 228 21.2.6 注册表配置 229 21.2.7 测试TCP/IP 231 21.3 小结 232 第22章 Windows 98拨号网络 233 22.1 配置拨号网络适配器 233 22.2 安装拨号网络 234 22.3 服务器类型 235 22.4 编写脚本 238 22.5 多重链接 238 22.6 PPTP 239 22.6.1 安装及配置PPTP 240 22.6.2 建立PPTP连接 240 22.7 Windows 98拨号服务器 241 22.8 解决拨号网络连接中的问题 242 22.8.1 确认DUN配置 242 22.8.2 PPP日志 243 22.9 小结 243 第23章 Windows NT 4.0 244 23.1 Windows NT版本 244 23.2 体系结构 244 23.3 安装Windows NT 4.0 244 23.4 配置TCP/IP 246 23.4.1 IP地址 246 23.4.2 DNS 248 23.4.3 WINS地址 248 23.4.4 DHCP中继 249 23.4.5 路由 250 23.5 简单TCP/IP服务 250 23.6 远程访问服务(RAS) 250 23.7 DHCP服务器 252 23.7.1 安装DHCP服务器服务 252 23.7.2 控制DHCP服务器服务 253 23.7.3 压缩DHCP数据库 253 23.7.4 管理DHCP 254 23.8 使用Microsoft DNS 256 23.8.1 安装DNS 256 23.8.2 创建区 257 23.8.3 配置逆向域名解功能 258 23.8.4 配置DNS与WINS服务器的连 接 259 23.8.5 增加辅助名字服务器 259 23.9 FTP和HTTP服务 259 23.10 TCP/IP打印服务 259 23.10.1 安装TCP/IP打印服务 259 23.10.2 安装LPR服务 260 23.11 Windows 2000新特性 260 23.12 小结 261 第24章 在Novell NetWare中支持IP 262 24.1 Novell与TCP/IP 262 24.1.1 IP与NetWare 4 262 24.1.2 NetWare 5与Pure IP初始化 262 24.2 传统解决方案:NetWare 3.x到 NetWare 4.x的IP支持 263 24.2.1 IP隧道 264 24.2.2 IP中继 264 24.2.3 LAN WorkPlace 264 24.2.4 IPX-IP网关 265 24.2.5 NetWare/IP 265 24.3 NetWare 5—Novell对IP的 完全支持 266 24.3.1 纯IP 266 24.3.2 多协议 266 24.4 安装选项 266 24.4.1 NetWare 5的IP-Only安装 267 24.4.2 IPX-Only安装 267 24.4.3 混合TCP/IP安装 268 24.5 IP迁移辅助工具 268 24.5.1 NDS 268 24.5.2 DNS 269 24.5.3 DHCP 269 24.5.4 DDNS 269 24.5.5 SLP 269 24.5.6 兼容模式 269 24.5.7 迁移代理 270 24.6 迁移策略 270 24.6.1 使用测试平台 270 24.6.2 迁移建议 270 24.7 小结 271 第七部分 使用TCP/IP应用 第25章 Whois和Finger 273 25.1 理解Whois协议 273 25.1.1 互联网注册 273 25.1.2 Whois数据库 274 25.1.3 基于Web的Whois 275 25.1.4 命令行方式的Whois 276 25.1.5 示例 276 25.1.6 基于Telnet的Whois 278 25.2 扩充Whois 279 25.2.1 提示Whois(RWhois) 279 25.2.2 WHOIS++ 280 25.3 使用Finger 280 25.3.1 Finger命令 280 25.3.2 Finger 守护进程 282 25.3.3 非UNIX环境下的Finger 283 25.3.4 Finger的应用 283 25.4 相关RFC文档 285 25.5 小结 285 第26章 文件传输协议 286 26.1 FTP和TFTP在网络世界中的作用 286 26.2 使用FTP传输文件 286 26.2.1 FTP连接 287 26.2.2 使用FTP客户端建立连接 288 26.2.3 FTP安全 296 26.2.4 FTP服务器及守护进程 299 26.2.5 匿名FTP访问 299 26.3 使用TFTP 300 26.3.1 FTP与TFTP的区别 301 26.3.2 TFTP命令 301 26.4 小结 301 第27章 使用Telnet 302 27.1 理解Telnet协议 302 27.2 Telnet守护进程 303 27.3 使用Telnet 304 27.3.1 UNIX telnet命令 304 27.3.2 Telnet GUI应用 305 27.3.3 Telnet命令 305 27.3.4 示例 308 27.4 高级主题 309 27.4.1 安全 309 27.4.2 Telnet应用 309 27.4.3 使用Telnet访问其他TCP/IP 服务 310 27.5 相关RFC文档 312 27.6 小结 313 第28章 使用r系列实用工具 314 28.1 理解r系列命令 314 28.1.1 安全问题 314 28.1.2 禁止使用r系列命令 315 28.1.3 增强r系列命令的安全性 316 28.2 使用r系列命令的替代方法 317 28.3 r系列命令详解 317 28.3.2 相关文件 320 28.4 在非UNIX环境下实现r系 列命令的功能 321 28.5 小结 322 第29章 使用网络文件系统(NFS) 323 29.1 什么是NFS 323 29.1.1 NFS的历史 323 29.1.2 为何使用NFS 323 29.2 实现—NFS工作过程 324 29.2.1 远程过程调用(RPC) 和外部数据表示(XDR) 324 29.2.2 加载类型 324 29.3 NFS使用的文件及命令 325 29.3.1 NFS守护进程 325 29.3.2 与NFS相关的文件 327 29.3.3 NFS服务器命令 329 29.3.4 NFS客户命令 331 29.4 示例:共享及加载NFS文件系统 333 29.5 NFS常见问题及解决方案 334 29.5.1 不能加载 334 29.5.2 不能卸载 334 29.5.3 硬加载与软加载 334 29.6 相关协议及产品 334 29.6.1 WebNFS 335 29.6.2 基于PC的NFS及其他客户端 软件 335 29.6.3 SMB和CIFS 335 29.6.4 其他产品 336 29.7 小结 336 第八部分 使用基于IP的应用 第30章 在应用中集成TCP/IP 337 30.1 使用浏览器作为表示层 338 30.2 不断增加的Internet应用 338 30.3 在已有应用中集成TCP/IP 339 30.4 在其他网络中使用TCP/IP 339 30.4.1 NetBIOS与TCP/IP 339 30.4.2 IPX与UDP 340 30.4.3 ARCNET与TCP/IP 340 30.5 小结 340 第31章 Internet Email协议 341 31.1 电子邮件 341 31.1.1 电子邮件的历史 341 31.1.2 标准及制定标准的组织 341 31.2 X.400 341 31.3 简单邮件传输协议(SMTP) 343 31.3.1 MIME和SMTP 343 31.3.2 其他编码标准 344 31.3.3 SMTP命令 344 31.3.4 SMTP状态码 345 31.3.5 扩展SMTP 345 31.3.6 检查SMTP的头 346 31.3.7 SMTP的优势与不足 347 31.4 使用POP和IMAP取回客户邮件 347 31.4.1 邮局协议(POP) 347 31.4.2 互联网邮件访问协议(IMAP) 348 31.4.3 POP3与IMAP4的比较 348 31.5 高级主题 349 31.6 相关RFC文档及其他参考信息 351 31.7 小结 352 第32章 HTTP: World Wide Web 353 32.1 万维网(WWW) 353 32.1.1 Web简史 353 32.1.2 Web的发展 354 32.2 统一资源定位器 354 32.3 Web服务器与浏览器 355 32.4 理解HTTP 356 32.4.1 HTTP/1.1 356 32.4.2 MIME与Web 358 32.4.3 HTTP通信示例 358 32.5 高级主题 359 32.5.1 服务器方功能 359 32.5.2 SSL和S-HTTP 359 32.6 Web语言 359 32.6.1 HTML 360 32.6.2 XML 360 32.6.3 CGI 361 32.6.4 Java 361 32.6.5 JavaScript 362 32.6.6 动态服务器页面 362 32.7 Web的未来 363 32.7.1 HTTP-ng 363 32.7.2 IIOP 363 32.7.3 IPv6 363 32.7.4 IPP 363 32.8 小结 364 第33章 NNTP:互联网新闻组 365 33.1 互联网新闻组 365 33.2 新闻组和层次 366 33.3 网络新闻传输协议 367 33.3.1 获取新闻组 367 33.3.2 获取消息 369 33.3.3 发布消息 370 33.4 大量广告(Spamming)和新闻黑洞 (Blackholing) 371 33.5 小结 371 第34章 Web服务 373 34.1 Web服务工作概览 373 34.2 主流Web服务器 375 34.3 运行Apache HTTP Web服务 376 34.3.1 下载、安装和配置Apache 376 34.3.2 在Windows环境下使用Apache 381 34.4 浏览其他Web服务器 383 34.5 小结 383 第九部分 使用与管理TCP/IP网络 第35章 协议配置与调整 385 35.1 系统的初始化问题 385 35.2 配置文件 390 35.2.1 在/etc/protocols文件中定义网 络协议 390 35.2.2 在/etc/hosts文件中标识主机 391 35.2.3 TCP/IP与/etc/services文件 392 35.2.4 inetd守护进程与/etc/inetd.conf 文件 394 35.2.5 在/etc/networks文件中设置网络 397 35.2.6 DNS客户与/etc/resolv.conf 397 35.3 小结 398 第36章 配置DNS 399 36.1 域名服务器 399 36.2 资源记录 400 36.3 域名解析 401 36.4 配置UNIX或Linux域名服务器 (DNS) 401 36.4.1 添加资源记录 402 36.4.2 完成DNS文件 402 36.4.3 启动DNS守护进程 405 36.4.4 配置客户端 405 36.5 Windows和域名服务器 405 36.6 小结 406 第37章 网络管理 407 37.1 制定网络监控方案 407 37.2 网络问题及其解决方案 408 37.3 网络管理工具 408 37.3.1 使用协议分析器 409 37.3.2 专家系统 410 37.3.3 基于PC的分析器 410 37.3.4 网络管理协议支持 411 37.3.5 集成网络仿真/模型工具 411 37.4 配置SNMP 412 37.4.1 配置Windows SNMP 413 37.4.2 配置UNIX SNMP 414 37.4.3 SNMP安全属性 414 37.4.4 SNMP代理与管理 415 37.5 SNMP工具及命令 416 37.6 RMON及相关的MIB模型 417 37.7 建立网管需求 417 37.8 小结 419 第38章 SNMP:简单网络管理协议 420 38.1 什么是SNMP 420 38.2 管理信息基(MIB) 421 38.3 使用SNMP 421 38.4 UNIX与SNMP 422 38.4.1 在UNIX和Linux上安装SNMP 423 38.4.2 SNMP命令 424 38.5 Windows与SNMP 424 38.5.1 Windows NT 425 38.5.2 Windows 95、Windows 98和 Windows 3.x 425 38.6 小结 427 第39章 加强TCP/IP传输安全 428 39.1 定义所需的网络安全 428 39.1.1 什么是网络安全 428 39.1.2 为什么网络安全非常重要 429 39.1.3 安全级别 429 39.1.4 口令与口令文件 430 39.1.5 控制对口令的访问 430 39.2 加强网络安全 431 39.2.1 攻击种类 431 39.2.2 加强网络安全 432 39.3 应用配置 434 39.3.1 Internet守护进程与 /etc/inetd.conf 434 39.3.2 网络加密软件 436 39.3.3 TCP Wrapper 436 39.4 使用端口及可信端口 437 39.4.1 防火墙 437 39.4.2 包过滤 437 39.4.3 应用层网关 438 39.4.4 其他应用的过滤 438 39.5 一般安全事务 438 39.5.1 用户帐号维护 438 39.5.2 审计 438 39.5.3 正确的系统配置 438 39.6 小结 438 第40章 问题解决工具及要点 440 40.1 监视网络行为 440 40.2 标准应用程序 440 40.2.1 测试基本连接 441 40.2.2 ping命令 442 40.2.3 解决网络访问故障 443 40.3 解决网络接口层问题 449 40.4 解决网络层问题 449 40.4.1 TCP/IP配置参数 449 40.4.2 IP地址配置问题 450 40.5 解决TCP和UDP问题 453 40.6 解决应用层问题 455 40.7 小结 455 第十部分 附 录 附录A RFC及标准化 457 附录B Linux 469 附录C 简写与缩略语 480
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值