网络编程的基本概念
- 网络编程是指利用网络编程接口编写网络应用程序,实现网络应用程序间的信息交互功能
- 网络编程接口是一种应用程序编程接口(API), 它包含一组通信例程或系统调用. 应用程序可以调用这些例程以便与位于相同或不同计算机上的其他应用程序通信
- 网络应用程序间的通信必须通过网络编程接口访问网络协议提供的服务来实现
网络编程的层次和种类
网络编程的层次
- Web应用的网络编程
Web应用程序设计与开发
- 编程开发体系: ASP.NET, JSP, PHP等
- 程序设计架构: 层次化架构
- 基于NetBIOS的网络编程
- NetBIOS是一种网络协议, 具有标准的API
- NetBIOS与TCP/IP和IPX/SPX相比, 具有极高的通信效率, 尤其在一个小的局域网环境下的实时网络通信
- NetBIOS提供
名称服务, 包括名称登录和名称解析
“面向连接” 的会话服务
“无连接” 的数据报服务 - NetBIOS编程接口对应于OSI模型的会话层和传输层
- 基于socket的网络编程
- socket(套接字)是基于TCP/IP协议的网络编程接口
- 利用socket库函数可以调用TCP/IP协议簇的服务,实现各类网络通信(无连接和面向连接的通信)
- socket库函数有
- Berkeley socket库函数
- Windows socket库函数(又称 Winsock 库函数)
- 底层网络编程
- 常规网络编程接口无法访问底层的网络协议
- 网络诊断和安全工具不能采用常规的网络编程方法, 通常需要在较低的层次(网络层或链路层)操作网络
- 底层网络编程会涉及底层网络协议及其协议数据单元
- 底层地网络编程技术有
- 原始套接字编程
- WinPcap编程 windows packet capture
- Libnet编程 a generic networking API that provides access to several protocols
- NDIS编程 Network Driver Interface Specification
- 物理设备的网络编程
- 主要针对链路层和物理层的网络编程
- 编程接口主要用于特殊目的的网络程序设计
例如网络数据包截获, 网络协议分析, 流量统计分析, 或设计自己的安全协议 - 需要对网卡的网络接口控制器(NIC)进行程序编程控制. 由于没有现成的编程接口, 程序所有功能的实现都必须自行设计
网络通信的服务方式
- 无连接和面向连接的通信
- 网络通信协议能提供面向连接(会话)和无连接(数据报)两种通信服务, 如TCP协议和UDP协议
- 面向连接的通信通过建立稳定的数据传输通道可保证数据的可靠性, 但通信的开销较大
- 无连接的通信能随时发送数据, 实现点对点的及时数据传输, 但数据可靠性不能保证
网络I/O操作模式
- 通信模式对应用程序的设计方法有直接的影响
- 同步与异步
- 同步I/O操作导致进程阻塞, 直到I/O操作完成
- 异步I/O操作不导致进程阻塞
- 阻塞模式与非阻塞模式
- 在阻塞模式下, 使用多线程机制解决I/O操作时的阻塞问题, 保持网络连接和数据的收发
- 在非阻塞模式下, 应用程序不断地轮询是否有数据到达或有连接请求到达
网络应用程序的软件体系结构
- 客户/服务器结构
(Client/Server, 简称C/S) - 浏览器/服务器结构
(Browser/Server, 简称B/S) - 对等结构
- 取消了服务器的中心地位, 各个网络系统内应用程序可以通过交换直接共享计算机资源和服务
- 在这种体系结构中, 计算机可对其他计算机的要求进行响应, 请求响应范围和方式都根据具体应用程序不同而有不同的选择
- C/S结构和B/S结构的区别
- B/S属于C/S, 浏览器是特殊的客户端
- C/S可以使用任何通信协议, 而B/S规定必须使用HTTP协议
- 浏览器是一种通用客户端, 本质上还是一个C/S结构的网络应用系统