java网络编程 个人笔记 第一章 概述
第一章 概述
第一节 课程介绍
网络环境编程
每个层次都有其对应的编程方法与细节
基于WWW应用的网络编程
基于WWW应用的网络编程技术,包括所见即所得的网页制作工具和动态服务器页面的制作技术。涉及到网页涉及、动态脚本涉及、页面布局、美工等等
基于TCP/IP协议栈的网络编程
基于TCP/IP协议栈的网络编程是最基本的网络编程方式。最主要的也最常见的是,编程语言利用操作系统提供的套接字(Socket)网络编程接口和各种网络编程类,直接开发各种网络应用程序。本课程主要讲解这种网络编程的相关技术
第二节 网络协议与网络应用进程
分层网络协议
网络通信中,要考虑的因素有很多,比如说组成和分解数据包、数据包寻址、流量控制、信道编码、码字向电信号的转换等等
在分层网络协议中,每一个层次只需要按照设计要求完成自己的功能,向上层提供服务接口即可
OSI七层模型
TCP/IP
第三章 网间通信相关问题
网间进程通信是指网络中不同主机中的应用进程之间的相互通信问题,网间应用进程通信必须解决一下问题
- 网间进程的标识问题
- 与网络协议栈连接的问题
- 多重协议的识别问题
- 网间进程交互模式
- 不同通信服务要求
- 网间进程通信方式
网间进程的标识问题
同一主机中,会用不同的进程好来标识不同的进程
网络环境中,这种方法行不通。在网络环境中,进程号会有重复
因此需要找到一种方法来区分网络环境中的每一个进程
与网络协议栈连接的问题
多重协议的识别问题
一个操作系统可能支持多种协议,如TCP/IP、IPX/SPX等等
同一进程可能也会支持多种协议,如安全扫描工具可同时进行ICMP扫描、TCP扫描、UDP扫描等等
必须提供多重协议的识别方式,以便系统将不同的数据传递给不同的进程处理
不同通信服务要求
- 网络应用程序多种多样,对服务的要求各不相同
- 有的要求书传递过程可靠、无差错、无乱序、无丢失,有的只要求快速、对丢包不敏感
- TCP/IP协议中的传输层考虑了不同的服务问题,提供了TCP、UDP两种
第四节 网间进程的标识
进程与线程
进程
- 概念
进程是处于运行过程中的程序实例,是操作系统调度和分配资源的基本单位 - 组成
一个进程实体由程序代码、数据和进程控制快三部分组成
线程
-
概念
线程是运行中程序的调度单位,是进程中某个单一顺序的控制流 -
区别
- 进程是分配资源的单位,线程是执行和调度的单位
- 线程要处理些什么、怎么处理,都是定义好了的
- 每一个进程至少有一个线程,供CPU调度从而执行进程的代码。没有线程,进程就失去了存在的意义
- 一个进程可能会有多个线程,这些线程表面是“同时”执行进程的代码
多线程
当创建一个进程时,系统会自动创建它的第一个线程,称为主线程。然后该线程可以创建其他的线程,而这些线程又能创建更多的线程
传输层在网络通信中的地位
传输层在网络层的基础上提供网络间进程通信的能力
- 网络层提供主机之间的逻辑通信机制
- 传输层提供应用进程之间逻辑通信机制
端口的概念
端口是TCP/IP协议中,应用层进程和传输层协议实体之间的通信接口。当一个引用层进程要通信时,必须申请一个传输层的端口。确定端口之后,端口与应用层进程是一一对应的
类似于文件描述符,每一个端口都拥有一个叫做端口号(Port Number)的整形标识符
其余的端口号:1024~65535,称为自由端口号,采用本地分配,又称为动态分配的方法
网络应用进程标识
在Internet网络中,用一个三元组可以在全局中唯一地标识一个应用层进程:
- 应用层进程地址=(主机IP地址,传输层协议,传输层的端口号)
- 这样一个三元组,叫做一个半相关,它标识了因特网中,进程间通信的一个端点,也把它称为进程的网络地址
网间进程通信标识
一个完整的网间通信需要一个五元组在全局中唯一地来标识:
- (传输层协议,本地IP地址,本地传输层端口,远端IP地址,远端传输层端口)
- 这个五元组称为一个全相关。即两个协议相同的半相关才能组合成一个合适的全相关,或完全指定一对网间通信的进程
第五节 客户/服务器交互模式
网络应用进程在通信时,普遍采用C/S交互模式
服务器工作模式
C/S模式中服务器处于被动服务的地位。服务器的工作过程是:
- 打开一通信通道,在某一公开的地址和端口上接收客户请求
- 等待客户的请求到达该端口
- 服务器接收到服务请求,处理该请求并发送应答信号。为了能并发地接收多个客户的服务请求,一般会激活一个新进程或新线程来处理这个客户请求。该次服务完成后,关闭此新进程与客户的通信链路,并终止
- 返回第二步,等待并处理新的请求
- 在特定的情况下,关闭服务器
客户机工作模式
客户方采取的是主动请求方式,其工作过程是:
- 打开一通信通道,连接到服务器所在主机的特定监听端口
- 向服务器发送请求报文,等待并接受应答;继续提出请求,与服务器的会话按照应用协议进行
- 请求结束后,关闭通信通道并终止
容易混淆的术语
服务器程序与服务器类计算机
- 服务器这个术语来指那些运行这的服务程序
- 服务器类计算机这一术语来称呼那些运行服务器软件的强大的计算机
客户与用户
- 客户和服务器指的都是应用进程,即计算机软件;客户机指的是客户端软件
- 用户指的是使用计算机的人
客户机与服务器的通信过程
客户机与服务器的通信过程一般是这样的:
- 通信之前,服务器应先行启动,并通知他的下层协议栈做好接受客户机请求的准备,然后被动地等待客户机的通信请求,此时服务器处于监听状态
- 一般是先由客户机西乡服务器发送请求,服务器向客户机返回应答
- 客户机与服务器的通信关系一旦建立,客户机和放服务器都可发送和接收信息。信息在客户机与服务器之间可以沿任一方向或两个方向传递
网络协议与C/S模式的关系
客户机和服务器作为两个软件实体,他们之间的通信是虚拟的,是概念上的,实际的通信要借助下层的网络协议栈来进行
服务器如何同时为多个客户服务
并发性,并发允许多个客户机获得同一种服务,而不必等待服务器完成对上一个请求的处理。这样才能很好地同时为多个客户机提供服务
客户机/服务器交互
在C/S模式中,存在着三种一个与多个的关系
- 一个服务器同时为多个客户机服务
- 一个用户的计算机上同时运行多个连接不同服务器的客户端软件
- 一个服务器类的计算机同时运行多个服务器软件
第六节 TCP/UDP
面向连接的服务和无连接的服务
一个协议可以提供面向连接的服务,或者提供无连接的服务
- 面向连接服务是电话系统服务模式的抽象,即每一次完整的数据传输都要经过建立连接,使用连接,终止连接的过程
- 无连接服务是邮政系统服务的抽象,每个分组都携带完整的目的地址,各分组在系统中独立传送
可靠性和次序性
- 可靠性保证了发送端发出的每个字节都能到达既定的接收端,不出错,不丢失,不重复,保证数据的完整性,称为保证投递
- 次序性是指对数据到达接收端的顺序进行控制。保护次序性的协议保证接收端收到数据的顺序就是数据的发送顺序,称为按序递交
高效的用户数据报协议(UDP)
传输层的用户数据报协议(UDP):
- 是一种尽力传送的无连接的不保证可靠性的传输服务
- 是一种保护消息边界的数据的传输
- 只是在网络层基础上,增加了65535个端口,以支持应用层进程通信
- 适合交易性的应用程序(只有一来一往两次数据的通信,而且数据量小)
可靠的传输控制协议(TCP)
可靠性是很多应用的基础
TCP为应用层进程提供一个面向连接的、端到端的、完全可靠的(无差错、无丢失、无重复或失序)全双工的流传输服务
TCP提供给应用层看起来很可靠的全双工的流传输服务,实际上是TCP软件基于不可靠的IP数据报,通过使用数据报检验、收包应答、错误重传等等控制措施来实现的
第七节 通信方式
阻塞通信与非阻塞通信
通常的,对一个文件描述符指定的文件或设备,有两种工作方式:阻塞与非阻塞
- 阻塞方式(同步通信)是指,当试图对该文件描述符进行读写时,如果当时没有东西可读,或者暂时不可写,程序就进入等待状态,知道有东西可读或者可写为止
- 非阻塞状态(发送异步通信,接收同步),如果没有东西可读,或者不可写,读写函数马上返回,而不会等待
java编程注意事项
- 在任何情况下,JAVA的网络类只工作在TCP/IP网络中,而且始终运行在应用层或传输层上
- IP协议是JAVA唯一理解的网络层协议
- JAVA不支持ICMP,也不允许发送IP数据报
- 在编程时,每次启动要进行新的IP地址查询
- 网络地址转换,对于JAVA程序员来说是透明的
- JAVA可以很容易创建为你应用而优化的协议
- JAVA在核心网络API中没有显式的对等通信