• 一、网络编程
    • 目的:不同主机,进程间通信
    • 问题
      • 主机与主机之间物理层面必须互联互通
      • 进程与进程在软件层面必须互联互通
    • IP地址:计算机的软件地址,用来表示计算机设备
    • MAC地址:计算机的硬件地址(固定)
    • 网络端口号:标记同一主机上的不同网络进程
  • 二、网络协议 网络通信标准
    • OSI七层模型:开放系统互联模型(open system interconnect) 理论模型
      • 不同体系结构设备间,网络通信的通信标准
      • 应用层:要传输的数据信息,如文件传输,电子邮件等
      • 表示层:数据加密,解密操作,压缩,解压缩
      • 会话层:建立数据传输通道(会话)
      • 传输层:传输的方式(UDP、TCP端口号)
      • 网络层:实现数据路由,路径规划 路由器 ip
      • 数据链路层:封装成帧,点对点通信(局域网内通信),差错检测 交换机 ARP
      • 物理层:定义物理设备标准、电气特性,比如网线,光纤等传输介质 比特流 bit 0 1
    • TCP/IP模型: 应用模型
      • 五层:
        • 应用层:
          • HTTP:超文本传输协议
          • HTTPS:超文本传输协议(SSL加密算法)
          • FTP:文件传输协议(TCP)
          • TFTP:简单文件传输协议(UDP)
          • MQTT:消息队列遥测传输(物联网协议)
          • DNS:域名解析服务(将www .com转化成IP地址)
        • 传输层:
          • TCP:传输控制协议
          • UDP:用户数据报协议
        • 网络层:
          • IP协议:
            • IPv4:
            • IPv6:
        • 数据链路层:
          • ARP:地址解析协议
        • 物理层:
      • 四层:
        • 应用层:
        • 传输层:
        • 网络层:
        • 网络接口层:
  • 三、IP协议
    • IPv6 128位
    • IPv4 32位
      • 保存32位(4字节)
      • IP地址 = 网络位+主机位
      • 网络位:该IP地址位于哪个网段(局域网)内
      • 主机位:这个网段(局域网)第几台主机

  • 子网掩码:
    • 如:255.255.255.0
    • 11111111.11111111.11111111.00000000
  • 用来区分IP地址的网络位和主机位,搭配IP地址使用。
  • 子网掩码是1的部分对应IP地址的网络位
  • 子网掩码是0的部分对应IP地址的主机位
  • 网段号:192.168.1.0
    • IP地址网络位不变,主机位全为0,则为该IP地址的网段号

  • 广播号:192.168.1.255
    • IP地址网络位不变,主机位全为1,则为该IP地址的广播号

  • 网关地址:192.168.1.1
    • IP地址的划分
      • A类地址

  • B类地址

  • C类地址

  • D类地址

  • E类地址

  • 公有IP:由电信公司直接分配,并需要付费的IP地址,可以直接访问 internet
  • 私有IP:不能直接访问 internet 的 ip地址
  • 区分公有私有IP是为了节省IP地址
  • 四、网络端口号
    • 端口号:16位整形数据(unsigned short) 0-65535
    • 端口号功能:标记同一主机上的不同网络进程
    • 分类
      • 任何TCP/IP实现所提供的服务都用1-1023之间的端口号

  • 端口号从1024-49151是被注册的端口号,被IANA指定为特殊服务使用
    • MQTT:1883/8883
  • 从49152-65535是动态或私有端口号

  • 数据包的封装和解封过程
  • 五、网络配置
    • ping ip地址/域名
  • 查看当前主机和IP/域名所对应的这台主机网络是否联通

  • ifconfig
    • 在linux查看当前主机的IP地址
    • ipconfig:在Windows下查看当前主机的IP地址

网络配置

  • 六、网络协议 UDP
    • UDP用户数据报协议:传输层
    • 网络编程模型
      • B/S模型:browser/server(浏览器/服务器)
        • 客户端是通用的客户端(浏览器)
        • 一般只做服务器开发
        • 客户端要加载的数据均来自服务器
      • C/S模型:client/server(客户端/服务端)
        • 客户端是一个专用的客户端
        • 服务器和客户端都需要开发
        • 客户端可保存资源,本地加载,无需所有数据都请求服务器
    • UDP编程流程
      • 套接字:文件描述符(网络通信时,应用层可操作的端口)
      • 发送端
        • socket:int socket(int domain, int type, int protocol
          • 功能:创建通信的套接字
          • 参数:
            • domain:网络层使用什么协议族
              • AF_INET: IPv4
              • AF_INET6:IPv6
            • type:规定传输层的协议
              • SOCK_DGRAM:UDP协议
              • SOCKSTREAM:TCP协议
              • SOCKRAW:原始套接字
            • protocol:0 按照默认协议方式创建
          • 返回值:成功:套接字;失败:-1
        • sendto:ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen)
          • 功能:向网络套接字发送数据
          • 参数:sockfd:套接字;buf:要发送的数据的首地址;len:要发送的字节数;flags:0:按照默认方式发送;dest_addr:接收方的地址信息(IP+端口号);addrlen:接收方地址的大小
          • man 7 ip

          • 返回值:成功:实际发送的字节数;失败:-1
        • 网络字节序:大段
        • 主机字节序:小段
        • uint3 2_t htonl(uint32_t hostlong);主机转网络
        • uint1 6_t htons(uint16_t hostshort);主机转网络
        • uint3 2_t ntohl(uint32_t hostlong);网络转主机
        • uint1 6_t ntohs(uint16_t hostshort);网络转主机
        • in_addr_t inet _addr(const char *cp);
          • 功能:将字符串IP地址转换成二进制IP地址形式
        • char *inet _ntoa(struct in_addr in);
          • 功能:将二进制ip转换成字符串
      • 接收端
        • bind:int bind(int sockfd, const struct sockaddr *addr.socklen_t addrlen);
          • 功能:绑定自己的IP地址和端口号
          • 参数:sockfd:套接字;addr:需要绑定的地址;adlrlen:地址大小
          • 返回值:成功:0;失败:-1
        • recvfrom:ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen)
          • 功能:从套接字上接收数据
          • 参数:sockfd:套接字;buf:存放接收数据的内存首地址;len:希望接收的字节数;flags:0:按照默认方式接收(阻塞);src_addr:发送方的地址信息;addrlen:发送发地址的指针
          • 返回值:成功:实际接收到的字节数;失败:-1
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐