Java网络知识概要
作者:网络转载 发布时间:[ 2016/10/11 9:54:26 ] 推荐标签:测试开发技术 Java
---------------基础网络概念-----------------
大多数应用程序 内置网络功能 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
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11