zoukankan      html  css  js  c++  java
  • 简单理解socket(AF_INET&SOCK_STREAM,SOCK_DGRAM)

    套接字

    在任何类型的通信开始之前,网络应用程序都必须创建套接字。

    套接字最初是为同一主机上的应用程序所创建,使得主机上运行的一个程序(又名一个进程)与另一个运行的程序进行通信。这就是所谓的进程间通信(Inter Process Communication,IPC)

    有两种类型的套接字:基于文件的和面向网络的。

    基于文件的

    家族名:AF_UNIX
    (又名AF_LOCAL,在POSIX1.g标准中指定),它代表地址家族(addressfamily):UNIX。其他比较旧的系统可能会将地址家族表示成域(domain)或协议家族(protocolfamily),并使用其缩写PF而非AF。类似地,AF_LOCAL(在2000~2001年标准化)将代替AF_UNIX

    面向网络的

    家族名:AF_INET
    或者地址家族:因特网。另一个地址家族AF_INET6用于第6版因特网协议(IPv6)寻址。此外,还有其他的地址家族,这些要么是专业的、过时的、很少使用的,要么是仍未实现的。在所有的地址家族之中,目前AF_INET是使用得最广泛的

    总的来说,Python只支持AF_INET、AF_UNIX、AF_NETLINK和AF_TIPC家族

    套接字地址:主机-端口对

    做个比喻,套接字就像一个电话插孔,主机名和端口号就像区号和号码。
    当程序之间需要通信时,需要知道对端的主机名(IP)和端口号。
    有效的端口号范围为0~65535(小于1024的端口号预留给了系统)

    面向连接的套接字与无连接的套接字

    面向连接的套接字

    • TCP套接字的名字SOCK_STREAM。
    • 特点:可靠,开销大。
      在进行通信之前必须先建立一个连接,该连接的通信提供序列化的、可靠的和不重复的数据交付,而没有记录边界。这种类型的通信也称为虚拟电路或流套接字。
      实现这种连接类型的主要协议是传输控制协议(缩写 TCP)
      为了创建 TCP套接字,必须使用 SOCK_STREAM 作为套接字类型。

    无连接的套接字

    • UDP套接字的名字SOCK_DGRAM
    • 特点:不可靠(局网内还是比较可靠的),开销小。
      与虚拟电路形成鲜明对比的是数据报类型的套接字,它是一种无连接的套接字。
      在通信开始之前并不需要建立连接。此时,在数据传输过程中并无法保证它的顺序性、可靠性或重复性。数据报确实保存了记录边界,这就意味着消息是以整体发送的,而并非首先分成多个片段。
      实现这种连接类型的主要协议是用户数据报协议(缩写 UDP)。为
      了创建UDP套接字,必须使用SOCK_DGRAM作为套接字类型。
      UDP套接字的SOCK_DGRAM名字来自于单词“datagram”(数据报)。
  • 相关阅读:
    结构与算法(04):排序规则与查找算法
    虚拟机系列 | JVM特点,基础结构与执行周期
    Springboot 轻量替代框架 Solon 1.3.10 发布
    Java RPC 框架 Solon 1.3.9 发布,更便利的支持
    Java RPC 框架 Solon 1.3.7 发布,增强Cloud接口能力范围
    分享个本地maven配置
    Java RPC 框架 Solon 1.3.1 发布,推出Cloud接口与配置规范
    使用 quartz-solon-plugin 开发定时任务(新)
    使用 cron4j-solon-plugin 开发定时任务(新)
    国际开源社区OW2成立快应用兴趣小组,助推快应用生态发展
  • 原文地址:https://www.cnblogs.com/yblackd/p/14533395.html
Copyright © 2011-2022 走看看