zoukankan      html  css  js  c++  java
  • 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++深入详解》

  • 相关阅读:
    C# 使用Lazy 懒加载
    软件测试用例报告整理
    什么是事务,为什么要引入事务?
    WPF+DataGrid+MySQL实现增删改查、Excel文件导出
    git 设置远程库别名
    Access Like内存溢出问题排查,并找出相应的包含26个日文片假名数据的sql语句
    java 离线中文语音文字识别
    fbx的法线设置方式引起的显示不正确
    C#定时job
    CSS3+js实现循环滚动文字播放与暂停demo
  • 原文地址:https://www.cnblogs.com/qixianyu/p/6572115.html
Copyright © 2011-2022 走看看