java网络知识概要

来源:互联网 发布:谈恋爱软件 编辑:程序博客网 时间:2024/05/17 03:19
---------------基础网络概念-----------------
大多数应用程序 内置网络功能
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

0 0
原创粉丝点击