---------------基础网络概念-----------------
  大多数应用程序 内置网络功能 java简化网络程序编写
  网络:实时发送数据、接受数据的计算机和其它设备集合
  有线网络、无线网络
  网络节点 主机(完备功能a的节点)
  网络地址 字节序列
  所有计算机网络都是包交换(分组交换)网络
  协议:网络通信规则
  网络分层:每一层只与紧挨其上和其下的层对话
  90%的情况下,java在应用层工作,10%的情况下,java在传输层工作,主机网络层的复杂性是隐藏的
  java从来看不到物理层
  ip 开放的、与平台无关 寻址
  DNS域名系统 ip地址可能随时间而改变
  端口 Internet:大的基于ip网络
  防火墙:在Internet与本地网络之间检查数据的合法性
  代理服务器
  客户端/服务器模型 浏览器/服务器模型
  网络开销
  ---------------流------------------
  流是同步的。也支持通道和缓冲区的非阻塞I/O
  大多数TCP/IP实现都会在某种程度上缓存数据
  过滤器以链的形式组织(通过构造函数与流连接)
  BufferedInputStream 先从缓冲区请求数据,若没有,从底层的源读取
  BufferedOutputStream 把数据写到缓冲区,直到缓存区满或刷新输出流,然后一次将数据写入底层输出流
  输入流、输出流、过滤流、缓冲流、数据流、阅读器(Reader中的流),书写器(Writer中的流)
  -------------线程----------------
  进程是重量级的,线程是轻量级的
  线程池和Executor
  同步 同步块 死锁 线程调度 优先级
  抢占 阻塞 放弃 休眠
  连接线程 join() 等待一个对象 线程结束
  --------------IntAddress------------------------
  InetAddress类会缓存查找的结果
  InetAddress中的getName()可以根据主机名或者ip查找
  主机名比IP地址稳定,IP地址可能会更换多次
  任意DNS查找会泄露信息,所以要禁止任意的DNS查找
  本地回路地址 通配地址 本地链接地址 本地网站地址 组播地址
  isReachable 测试可达性
  SpamCheck 很多服务器会监视垃圾邮件发送者(spammer)
  --------------URL和URI------------------------
  URI标识一个资源的字符串
  URI语法组成 模式:模式特定部分
  模式特定部分没有特定的语法,但很多都采用一种层次结构形式
  //authority/path?query (模式特定部分) 授权机构/路径?查询
  路径可以分层,用斜线分隔
  模式部分由ASCII字母数字符号组成,其它字符需要用%转义
  URI:只标识资源 URL:即标识资源,又能获取资源
  URL语法:protocol://userInfo@host:port/path?query#fragment
  路径可能会映射到服务器的文件系统 unix可能位于/var/public/html
  相对URL优点:允许多种协议来提供一个文档书
  URL类使用了策略模式 协议处理器可以支持自定义的协议
  授权机构进一步划分:用户信息、主机、端口
  URL相等性 equals() hash() 使用equals()会尝试DNS解析主机,可能会I/O阻塞
  URLEncoder Url编码 URLDecoder Url解码
  代理服务器 系统属性 Proxy类 ProxySelector类cookie认证
  Authenticator类 PasswordAuthentication类 JPasswordField类
  为使用HTTP认证的网站提供用户名和口令
  ------------------HTTP-------------------
  超文本传输协议:定义了Web客户端如何与服务端对话,以及数据如何从服务器端传回客户端
  HTTP实际上是一种数据格式,HTTP连接使用TCP/IP来传输数据。
  HTTP请求形式:一个首部行、一个包含元数据的HTTP首部、一个空行、一个消息体
  元数据信息格式: (keyword : value)
  MIME类型:类型(type)和子类型(subtype)
  HTTP 1.1响应码 :1XX 信息 2XX Successful 3XX 重定位及重定向 4XX客户端错误 5XX服务端错误
  HTTP 1.1 Keep-Alive 保持连接 HTTP 1.0 会为每个请求打开一个连接,比较耗时
  HTTP方法 :GET POST PUT DELETE
  form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data
  设置Cookie 如 Set-Cookie:name=value 返回Cookie 如:Cookie:name=value
  cookie只能是非空白的ASCII文本,不能包含逗号和分号
  CookieManager定义存储和获取cookie的API
  CookieStore在本地存放和获取cookie
  -----------------URLConnection---------------------
  URLConnection类是java的协议处理器机制的一部分,比URL类提供更多的控制
  打开URLConnection 、读取服务器的数据、读取首部、读取首部字段
  缓存、Java的Web缓存
  配置连接 超时 配置客户端请求HTTP首部 向服务端写入数据
  重定向 代理 流模式
  ----------------客户端Socket--------------
  在Internet上,数据按有限大小的包传输,这些包成为数据报。
  每个数据报包含一个首部和一个有效载荷。
  可以把网络连接看作是一个可以读/写字节的流
  Socket的连接是全双工的,两台主机可以同时发送和接受数据。
  用Telnet研究协议 如 $ telnet localhost 25 ( 请求与本地机器的端口25建立连接 )
  构造连接Socket 构造不连接Socket
  Socket地址 SocketAddress类 InetSocketAddress类(实际使用)
  设置Socket选项:如 TCP_NODELAY SO_TIMEOUT等
  Socket异常 BindException ConnectException
  网络客户库 whois
  --------------服务端Socket--------------
  ServerSocket在服务器上运行,监听入站TCP连接。类似接线员接客户电话
  服务端程序生命周期
  accept()调用会阻塞
  多线程服务器
  关闭服务器Socket
  日志 :记录主要内容 请求,服务器错误
  错误日志中不要包含太多假报警,不要在生产阶段保存调式日志(升高调试级别)
  日志工具 java.util.logging 日志级别 java.util.logging.Level
  HTTP服务器 单文件服务器
  JHTTP 功能完善的HTTP服务器
  -------------安全Socket------------
  官方可以发起监听行为
  Socket加密,可以保持事务的机密性、真实性、准确性
  密匙 一般化的口令,不限于文本
  可使用SSL Socket与现有的安全服务器通信
  选择密码组 事务处理器 会话管理
  配置SSLServerSocket
  -------------非阻塞I/O-------------
  通道、缓冲区
  SocketChannel SocketChannel .open(..)
  ByteBuffer.allocate(..); Channels.newChannel(..);
  服务器通道、Socket通道
  在NIO中,所有的I/O都要缓冲
  流和通道的区别:流是基于字节的,而通道是基于块的。
  通道和缓冲区支持同一对象的读/写
  缓冲区:位置、容量、限度、标记
  创建缓冲区:
  分配:ByteBuffer.allocate(100);
  直接分配:ByteBuffer.allocateDirect(100);
  包装:CharBuffer.wrap(array);
  填充和排空
  数据转换
  视图缓冲区、压缩缓冲区、复制缓冲区、分片缓冲区
  通道:SocketChannel ServerSocketChannel
  连接、读取、写入、关闭
  Selector类、SelectionKey类
  ----------------UDP--------------
  TCP不用担心接收到乱序和不正确的数据。
  UDP也可实现可靠的传输协议,由应用程序负责可靠性,UDP传输负责速度
  UDP客服端与UDP服务器都是用DatagramSocket
  DatagramPacket类:UDP数据报
  UDP数据报结构包括版本、首部长度、目标地址等
  DatagramPacket会使用不同的构造函数用于发送数据或接受数据
  ---------------IP组播--------------
  Socket是单播的,提供点对点的通信。单播Socket在两个明确的端点之间创建
  一个连接,有一个发送方和一个接收方。
  组播比单播的点对点通信宽,但比广播通信窄而且目标更明确。
  组播地址和组 组播组 路由器和路由
  组播Socket MuticaseSocket