- 基于Packet Driver编程,独立于/屏蔽网卡实现细节,针对网卡的网络开发环境
- 基于NDIS网络编程,针对Windows操作系统提供的一种网络驱动程序或协议驱动程序
- 经典函数库,基于LibPcap/WinPcap(抓包)、Libnet(网络分组和数据的构造和发送)、Libnids(网络入侵检测)、Libicmp(icmp报文的构造和发送、处理)
NetBIOS编程,针对Windows操作系统,是相当于
OSI模型的会话层
开发环境
传输层和应用层之间:
Socket编程
RPC远程过程调用Remote Procedure Call、
中间件编程
应用编程接口API——应用层和传输层之间
作为应用程序,需要实现两个主机上运行的application的通信,
应用程序的通信——>应用层内部进程之间的通信——>遵循应用层协议,定义了如何交互
,因为网络层次结构分为五层结构,则两个主机端系统从功能上都可以看作五个层次,很明显,
作为应用进程之间的通信,需要用到底层,比如传输层
。
传输层一般是操作系统控制,应用程序一般是应用进程控制,所以
分为操作系统之内的网络协议(传输层),操作系统之上的应用进程(应用层)
。
应用进程要传输,需要遵循应用层协议,但真正传输的时候,需要
把应用进程的数据,比如报文处理以后交给相邻层次传输层,传输层进一步处理交给下一层
。
Q:那么,应用层和传输层如何交互呢
A:接口/
网络应用编程接口
/API/Application Programming Interface
API,事实上就是网络应用进程控制权和操作系统内部控制权的一个转换的一个系统调用接口
典型的网络应用编程接口:
1. 伯克利 UNIX操作系统定义的一种API,套接字接口,socket interface,简称套接字
2. 微软Windows操作系统采用了套接接口API,形成一个稍微不同的API,
Windows Socket Interface,WINSOCK
3. AT&T为其UNIX系统V定义了一种API,简写为TLI,Transport Layer Interface
套接字Socket API,是 Internet网络应用最典型的API接口
套接字,通信模型为C/S
- 应用进程间通信的抽象机制:对于单个客户端应用进程和服务器应用进程之间,两者需要创建套接字,才能进行应用进程通信
- 对于多个服务器,但是只有一个客户端,此时客户端就需要创建多个套接字,每一个套接字对应一个服务器套接字,并使用
端口号绑定套接字
》》》所以当客户端和服务器中的应用进程进行通信时,有了IP地址,可以知道套接字是对应哪一个主机上运行的应用进程的套接字,进一步,有了端口号,可以知道具体是哪一个套接字
标识通信端点(对外):
IP地址+端口号
一个操作系统/网络进程如何管理套接字(对内):
套接字描述符(socket description),小整数
在使用
套接字描述符
管理套接字的时候,其实时一种抽象:
Socket抽象
- 类似于文件抽象,像unix对套接字看作是一个特殊的文件管理
- 当应用进程创建套接字时,操作系统会分配一个数据结构存储该套接字相关信息
- 会返回套接字描述符,可进行访问和引用
Q:怎么设置套接字的
端点地址
(IP+端口号)呢?
A:使用一个地址结构(地址结构里面包含ip、端口、地址族)
什么是地址族
:虽然套接字API主要是面向TCP/IP协议栈,但其实
套接字可以面向不同的协议栈
,所以不同的协议栈的端点地址是不同的。对于TCP/IP协议栈,使用的地址族是AF_INET
TCP/IP协议,或称为TCP/IP协议栈,或互联网协议系列。
TCP/IP协议栈(按 TCP/IP参考模型划分为5层),,不同于OSI(7层),他将OSI中的会话层、表示层规划到应用层。
TCP/IP协议栈,包含了一系列构成互联网基础的网络协议。