Windows网络编程
OSI七层参考模型:(注意数据发送和接收的顺序不同,发送由7到1,接收由1到7)
- 物理层:高低电平如何传输;
- 数据链路层:提供介质,建立传输线路;
- 网络层:提供IP地址和路由,选择最佳路径
- 网路协议IP
- 传输层:提供可靠的数据传输,提供进程通信
-
TCP:面向连接的可靠传输协议
- UDP:无连接、不可靠传输协议
-
- 会话层:应用进程建立、组织、协调其通信
- 表示层:处理数据表示问题,数据格式转换,加密、压缩、解压等
- 应用层:为用户网络应用程序提供网络通信服务。
-
- 文件传输协议FTP:下载文件
- 超文本传输协议HTTP:浏览网页
- 域名服务DNS:把域名(网址)转换为IP地址
- 远程登录协议Telnet
- 简单邮件传输协议SMTP
- 邮局协议POP3
TCP/IP模型
- 应用层(OSI中的会话层、表示层和应用层)
- 传输层(OSI中的传输层)
- 网络层(OSI中的网络层)
- 网络接口层(OSI中的数据链路层和物理层)
基本概念:
IP地址:A与B在网络上通信,则A需要知道B的主机名称(IP地址),B也需要知道A的IP地址;
协议:规则,约定,无规矩不成方圆;
端口:由于计算机上可以同时运行多个网络应用程序,为区分哪个程序通信,端口是抽象的软件结构,应用程序通过系统调用与端口相联系。
端口号:整数型标示符,16位,0~65535,1024以下的端口号留给预定义服务,写网络应用程序要用到1024以上的端口号。
套接字:方便网络应用程序开发,提出的应用程序访问通信协议的操作系统调用。
通信区域:地址簇,是抽象概念,用于将通过套接字通信的进程的共有特性综合在一起。
网络字节顺序:低位先存(1110先存0)和高位先存(1000先存1),TCP/IP使用16位和32位整数的高位先存格式
套接字Socket:连接应用程序与网络驱动程序的桥梁,在应用程序中创建,通过绑定与驱动程序建立联系。
客户机/服务器模式:请求回复模式
- 服务器端
- 打开通信通道,愿意在某一地址和端口接收客户请求
- 等待请求
- 接收请求,处理请求并发送应答。接收到并发服务请求,激活一个新进程,处理这个请求。处理完,关闭新进程与客户的通信链路。
- 重复2 3
- 关闭服务器
- 客户端
- 打开通信信道,连接到服务器所在主机特定端口
- 发送请求,等待并接收应答
- 继续请求
- 关闭通道并终止
数据封装:上层到下层,数据前面加上特定的协议头部
数据解封:下层到上层,数据解封传递给上层
协议数据单元:对等层协议之间的交换信息单元。
基本过程
- 应用程序发送数据给Socket。
- Socket把数据传递给驱动程序。
- 驱动程序把数据发送到网络上。
- 计算机从网络上收到与该socket绑定的IP地址和端口号数据。
- 驱动程序交给socket。
- 应用程序从socket中提取数据。
Windows套接字类型
- SOCK_STREAM :提供面向连接的可靠数据传输
- SOCK_DGRAM :无连接服务,不保证可靠
- SOCK_RAW
服务器端
- 创建套接字(socket)
- 套接字绑定(bind)
- 套接字为监听模式,准备接收客户请求(listen)
- 等待客户请求,接收连接请求,返回一个新的对应于此连接的套接字(accept)
- 用返回的套接字和客户端通信(send/recv)
- 返回,等待另一个客户请求
- 关闭
客户端(发送请求时包含IP地址和端口号)
- 创建套接字(socket)
- 发送连接请求(connect)
- 与服务器通信(send/recv)
- 关闭
参考文献
1 孙鑫 《VC++深入详解》