本文为我在学习孙鑫先生VC视频教程时所摘录的重点部分,TCP/IP架构这种永不失为经典的东东确实给我们的启发很多 ,在纷繁复杂的种种事务面前,我们何尝能不思考更好的解决方法,其间也饱含"大事化小,小事化了"的生活智慧......
网络状况:
多种通信媒介---------有线,无线
不同种类的设备:通用,专用
不同的OS:UNIX,WINDOWS
不同的应用环境:固定,移动
不同业务种类:分时,交互,实时
宝贵的投资和积累:有形,无形
用户业务的延续性:不允许出现大的跌宕起伏
以上各点相互交织,形成了非常复杂的系统应用环境
ISO/OSI七层参考模型:
应用层-------------处理网络应用
表示层-----------数据表示
会话层--------------主机间通信
传输层-------------端到端的连接
网络层----------------寻址和最短路径
数据链路层--------------介质访问(接入)
物理层----------二进制传输
TCP/IP模型
应用层
传输层
网络层
网络接口层
OSI各层所使用的协议:
应用层:远程登录telnet,文件传输ftp,超文本传输http,域名服务DNS,简单邮件传输SMTP,邮局协议pop3
传输层:传输控制TCP,用户数据报udp
TCP-----面向连接的可靠的传输
UDP-----无连接的不可靠的传输
网络层:网际IP,Internet互联网控制报文协议ICMP,Internet组管理协议IGMP
协议端口:
抽象的软件结构(包括一些数据结构和IO缓冲区),应用程序通过系统调用与某端口建立连接后,相应进程发给传输层的数据都通过该端口输出,传输层传给该端口的数据都被相应的进程所接收
16位数字表示:1024以下保留给预定义服务
网络编程中注意主机字节序与网络字节序转换
C/S模式存在的必要性:
一, 建立网络的起因是网络中软硬件资源,运算能力和信息不均等,需要共享,从而资源多的主机提供服务,资源少的客户请求服务这一非对等作用
二, 网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步
Windows sockets是MS的网络程序设计接口,由berkeley sockets扩展而来,以DLL形式提供:提供了一些异步函数,并增加了符合WINDOWS消息驱动特性的网络事件异步选择机制
套接字类型:
流式套接字SOCK_STREAM
提供面向连接,可靠的数据传输服务,数据无差错的,无重复的发送,且按发送顺序接收
数据报式套接字SOCK_DGRAM
提供无连接服务,数据包以独立包形式发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱
原始套接字SOCK_RAW
基于TCP(面向连接)的socket编程
服务器端程序:
1,创建套接字socket
2,将套接字绑定到一个本地地址和端口上bind
3,将套接字设为监听模式,准备接收客户请求listen
4,等待客户请求到来:当请求到来后,接受连接请求,返回一个新的对应此次连接的套接字accept
5,用返回的套接字和客户端进行通信send/recv
6,返回,等待另一客户请求
7,关闭套接字closesocket
客户端程序:
创建套接字socket
向服务器发出连接请求connect
和服务器端进行通信send/recv
关闭套接字closesocket
基于UDP(面向无连接)的socket编程
服务器端程序:
1,创建套接字socket
2,将套接字绑定到一个本地地址和端口上bind
3,等待接收数据recvfrom
4, 关闭套接字closesocket
客户端程序:
1,创建套接字socket
2向服务器发送数据sendto
3, 关闭套接字closesocket