一
网络编程概述
这里只作网络编程涉及到的基本网络知识介绍,更详细的内容,参考其它网络书籍.
1.OSI参考模型
具体内容,从上至下排列:
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
通信实体的对等层之间不允许直接通信
各层之间是严格单向依赖
上层使用下层的服务--Service user
下层向上层提供服务--Service provider
对等层通信的实质:
对等层实体之间虚拟通信;
下层向上层提供服务,实际通信在最底层完成.
2.OSI各层使用的协议:
应用层:
Telnet,FTP,HTTP,DNS,SMTD,POP3等;
传输层:
TCP:面向连接的可靠传输协议.对数据完整性要求高的,如网上下载程序等.
UDP:无连接的,不可靠的传输协议.但它不需要建立连接,没有数据确认与重传的机制,时效性较高,对视频会议,视频点播,即时语音通讯,即时聊天等就可以用UDP来实现.
网络层:
IP:网际协议.
ICMP:Internet控制报文协议.
IGMP:Internet组管理协议.
3.数据封装
数据要进行传输,必须打包,在数据前加上特定的协议头部进行打包的过程称为封装.
1)OSI参考模型中,对等层协议之间交换的信息单元统称为协议数据单元(PDU,Protocal Data Unit).
2)OSI参考模型中,上层必须依赖下层提供的服务.
3)OSI参考模型中,下层把上层的PDU作为本层的封装对象,加入本层的头部(尾部,如果有),头部(尾部)中有数据传输所需的控制信息.
4)数据在OSI参考模型自上而下递交的过程实际上就是不断封装的过程.到达目的地后自下而上递交的过程就是不断拆封的过程.所以数据一定是在物理层进行传递,在其它层进行加上包头(包尾)封装.
5)在拆封过程中,OSI参考模型的某一层只能识别对等层封装的包头(包尾),对拆封了包头(包尾)后的数据只提交给上一层进行处理,本层不对数据作任何处理.
4.TCP/IP模型
层次:
应用层
传输层
网络层
网络接口
与OSI模型的对应关系
应用层 ------------------> 应用层
表示层 ------------------> 应用层
会话层 ------------------> 应用层
传输层 ------------------> 传输层
网络层 ------------------> 网络层
数据链路层 ------------> 网络接口
物理层 ------------------> 网络接口
5.端口
端口是一种抽象软件结构,包括一些数据结构和I/O缓冲区.端口用一个16位的数字(整数型标识符)来表示,即端口号,它的范围是0~65535,其中1024以下的端口号保留给预定义的服务.(HTTP 80,FTP 21/20)
1)在OSI参考模型中,传输层提供进程(应用程序)通信的能力.TCP/IP协议采用协议端口(protocol port)来标识通信实体中进行通信的进程(应用程序).
2)端口号跟协议相关,而传输层的两个协议TCP和UDP是完全独立的两个软件模块,因些TCP和UDP的两个端口也相互独立.
3)应用程序通过系统调用与某个端口建立联系(binding)后,传输层传给该端口的数据都被相应进程所接收,而相应进程发给传输层的数据都通过该端口输出.
6.Socket(套接字)
1)Socket是一种应用程序访问通信协议的操作系统调用.通过它,能使应用程序方便的访问TCP/IP,从而开发各种网络应用程序.
2)Socket最初由美国伯克利大学在Unix上推出的.后来引进到Windows等操作系统中,成为网络应用程序开发的一个重要工具.
3)通信区域主要把利用套接字通信的进程的共有特性综合在一起.它是一个抽象的概念,也叫地址族.套接字通常存在于通信区域中.套接字通常只与同一个区域的套按字交换数据(对跨区域通信的情况,只在执行了某种转换进程后才能实现).
4)Windows Socket只支持一个通信区域------网际域(AF_INET),这个区域被使用网际协议族通信的进程使用.
7.网络字节顺序
1)为了保证数据的正确性,在网络协议中需要指定网络字节顺序.基于Intel的CPU采用的是低位先存.
2)TCP/IP协议使用16位整数和32位整数的高位先存格式.
8)客户机/服务器模式
服务器方先启动,并根据请求提供相应的服务:
A.打开一个通信通道并告知本地主机,它愿意在某一地址和端口上接收客户请求.
B.等待客户请求到达该端口.
C.接收到重复服务请求,处理该请求并发送应答信号.接收到并发服务请求,要激活一个新的进程(或线程)来处理这个客户请求.新进程(或线程)处理此客户请求,并不需要对其它请求作出应答.服务完成后,关闭此新进程与客户的通信链路,并终止.
D.返回第二步,等待另一个客户请求.
E.关闭服务器.
客户方:
A.打开一个通信通道,并连接到服务器所在主机特定端口.
B.向服务器发送服务请求报文,等待并接收应答;继续重复提出其它请求.
C.请求结束后关闭通信通道并终止.
9)套接字的类型
A.流式套接字(SOCK_STREAM)
提供面向连接,可靠的数据传输服务,数据无差错,无重复地发送,且按发送顺序接收.
B.数据报式套接字(SOCK_DGRAM)
提供无连接服务.数据包以独立形式发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱.
C.原始套按字(SOCK_RAM)