Loading

socket基本概念

 1.socket 是什么?

  在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发  送数据。

  2.Linux 中的 socket 是什么?

  在 UNIX/Linux 系统中,为了统一对各种硬件的操作,简化接口,不同的硬件设备也都被看成一个文件。对这些文件的操作,等同于对磁盘上普通文件的操作。
  UNIX/Linux 中的一切都是文件!
为了表示和区分已经打开的文件,UNIX/Linux 会给每个文件分配一个 ID,这个 ID 就是一个整数,被称为文件描述符(File Descriptor)。例如:

  • 通常用 0 来表示标准输入文件(stdin),它对应的硬件设备就是键盘;
  • 通常用 1 来表示标准输出文件(stdout),它对应的硬件设备就是显示器。


  UNIX/Linux 程序在执行任何形式的 I/O 操作时,都是在读取或者写入一个文件描述符。一个文件描述符只是一个和打开的文件相关联的整数,它的背后可能是一个硬盘上的普通文件、FIFO、管道、终端、键盘、显示器,甚至是一个网络连接。
  请注意,网络连接也是一个文件,它也有文件描述符!你必须理解这句话。
我们可以通过 socket() 函数来创建一个网络连接,或者说打开一个网络文件,socket() 的返回值就是文件描述符。有了文件描述符,我们就可以使用普通的文件操作函数来传输数据了,例如:

  • 用 read() 读取从远程计算机传来的数据;
  • 用 write() 向远程计算机写入数据。

  你看,只要用 socket() 创建了连接,剩下的就是文件操作了,网络编程原来就是如此简单!

 

  3.套接字的类型

  <1>流格式套接字(基于TCP)

   SOCK_STREAM 是一种面向连接的、可靠的、双向的通信数据流,数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送。

   SOCK_STREAM 有以下几个特征:

    •   数据在传输过程中不会消失;
    •   数据是按照顺序传输的;
    •   数据的发送和接收不是同步的(有的教程也称“不存在数据边界”)--有缓存区

    <2>数据报格式套接字(基于UDP)

     SOCK_DGRAM 是无连接的不可靠的,不会进行数据的检查  

    它有以下特征:

    •   强调快速传输而非传输顺序;
    •   传输的数据可能丢失也可能损毁;
    •   限制每次传输的数据大小;
    •   数据的发送和接收是同步的(有的教程也称“存在数据边界”)。

   4.面向连接套接字与无连接套接字的区别

  《1》无连接的套接字

    • 数据包的路径随意
    • 受到:路径长短开销、路径拥堵、路由排队时延(可能丢包)的影响
    • 尽力而为
    • 传输效率高,但是不可靠,有丢失数据包、捣乱数据的风险

    《2》面向连接的套接字

    • 在发送方和接收方之间建立链路(虚电路)
    • 数据按顺序的可靠传输
    • 非常可靠,万无一失,传输效率低,耗费资源多

 

  5.OSI七层网络模型和TCP/IP的四层模型

应用层  应用层
表示层
会话层
传输层 传输层
网络层 网络层
数据链路层 网络接口
物理层

  两台计算机进行通信时,必须遵守以下原则:

  • 必须是同一层次进行通信,比如,A 计算机的应用层和 B 计算机的传输层就不能通信,因为它们不在一个层次,数据的拆包会遇到问题。
  • 每一层的功能都必须相同,也就是拥有完全相同的网络模型。如果网络模型都不同,那不就乱套了,谁都不认识谁。
  • 数据只能逐层传输,不能跃层。
  • 每一层可以使用下层提供的服务,并向上层提供服务。

  我们所说的 socket 编程,是站在传输层的基础上,所以可以使用 TCP/UDP 协议,但是不能干「访问网页」这样的事情,因为访问网页所需要的 http 协议位于应用层。

 

  6.TCP/IP 协议簇

  TCP/IP 模型包含了 TCP、IP、UDP、Telnet、FTP、SMTP 等上百个互为关联的协议,其中 TCP 和 IP 是最常用的两种底层协议,所以把它们统称为“TCP/IP 协议族”。

  也就是说,“TCP/IP模型”中所涉及到的协议称为“TCP/IP协议族”,你可以区分这两个概念,也可以认为它们是等价的

  socket 编程是基于 TCP 和 UDP 协议的,它们的层级关系如下图所示:

      TCP/IP协议的层次图

 

  7.IP、MAC和端口号——网络通信中确认身份信息的三要素

  <1>IP地址:一般一个局域网用一个IP地址(公网地址:买的),因为IPV4地址如果一台计算机一个肯定不够用 

  <2>MAC地址:固定的写在网卡上

  <3>端口号:应用层程序的接口

 

 

 

  本文参考:C语言中文网   http://c.biancheng.net/view/2128.html

posted @ 2019-05-05 19:42  ZHGQCN  阅读(698)  评论(0编辑  收藏  举报