Windows网络编程

OSI七层参考模型(注意数据发送和接收的顺序不同,发送由7到1,接收由1到7)

  1. 物理层:高低电平如何传输;
  2. 数据链路层:提供介质,建立传输线路;
  3. 网络层:提供IP地址和路由,选择最佳路径
    • 网路协议IP
  4. 传输层:提供可靠的数据传输,提供进程通信
    • TCP:面向连接的可靠传输协议

    • UDP:无连接、不可靠传输协议
  5. 会话层:应用进程建立、组织、协调其通信
  6. 表示层:处理数据表示问题,数据格式转换,加密、压缩、解压等
  7. 应用层:为用户网络应用程序提供网络通信服务。
    • 文件传输协议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
    • 关闭服务器
  • 客户端
    • 打开通信信道,连接到服务器所在主机特定端口
    • 发送请求,等待并接收应答
    • 继续请求
    • 关闭通道并终止

数据封装:上层到下层,数据前面加上特定的协议头部

数据解封:下层到上层,数据解封传递给上层

协议数据单元:对等层协议之间的交换信息单元。

基本过程

  1. 应用程序发送数据给Socket。
  2. Socket把数据传递给驱动程序。
  3. 驱动程序把数据发送到网络上。
  4. 计算机从网络上收到与该socket绑定的IP地址和端口号数据。
  5. 驱动程序交给socket。
  6. 应用程序从socket中提取数据。

Windows套接字类型

  • SOCK_STREAM :提供面向连接的可靠数据传输
  • SOCK_DGRAM :无连接服务,不保证可靠
  • SOCK_RAW

服务器端

  1. 创建套接字(socket)
  2. 套接字绑定(bind)
  3. 套接字为监听模式,准备接收客户请求(listen)
  4. 等待客户请求,接收连接请求,返回一个新的对应于此连接的套接字(accept)
  5. 用返回的套接字和客户端通信(send/recv)
  6. 返回,等待另一个客户请求
  7. 关闭

客户端(发送请求时包含IP地址和端口号)

  1. 创建套接字(socket)
  2. 发送连接请求(connect)
  3. 与服务器通信(send/recv)
  4. 关闭

参考文献

1 孙鑫 《VC++深入详解》

原文地址:https://www.cnblogs.com/qixianyu/p/6572115.html