1. 基础概念

1.1 什么是 socket

socket 准确地说是一组应用程序接口,通过这组接口,进程间可以通过类似 unix 标准文件输入(read)输出(write)的方式进行通信。

socket 描述的就是进程间这种通信。

1.2 TCP/IP 协议族

TCP/IP 协议族是一组规定数据如何在网络中进行传输的规约,简单来说它包含传输层、网络层、链路层等不同的通信协议,其中传输层的 TCP/UDP 协议和网络层的 IP 协议是网络编程中最基础、最常见的协议。

一般意义上的网络编程只需要关心 TCP、UDP、IP、HTTP 等协议即可。

1.3 什么是 TCP

TCP 全称是 Transmission Control Protocol,是建立在 IP 地址、端口、unix stand file 之上的一种全双工传输层协议,TCP 的主要特点是:

  • 面向连接
  • 提供稳定有序可靠的数据传输(通过诸如超时重发、ack 确认、拥塞控制等策略)

TCP 在 socket 编程中是 stream socket,unix socket 中用 SOCK_STREAM 表示。

详见 http://tools.ietf.org/html/rfc793。

1.4 什么是 UDP

UDP 全称是 User Datagram Protocol,是一种简单的面向数据报的传输层协议,UDP 不提供类似 TCP 的数据可靠性保证,因而是一种简单的不可靠传输协议,正是由于 UDP 的简单,它的最大特点就是快。

UDP 在 socket 编程中是 Datagram Sockets,unix socket 中用 SOCK_DGRAM 表示。

详见 http://tools.ietf.org/html/rfc768。

1.5 什么是 IP

IP 是一种唯一的用来辨识计算机在网络中的位置,同时 IP 也是一种协议,是计算机网络协议中的重要组成部分。

IP 分为 4 字节的 IPV4 和 16 字节的 IPV6,前者能够表达的计算机地址是:2^32=4,294,967,296,后者是前者的 2^96 倍。

IPV4 一般用点分法的 10 进制表示,如 192.168.0.1,IPV6 一般用冒号分割的 16 进制表示 2001:0db8:c9d2:0012:0000:0000:0000:0051。

详见 https://tools.ietf.org/html/rfc791。

1.6 七层网络模型

数据是怎么从 socket 通过协议传送的?答案就是封装 Data Encapsulate。

我们称一个需要传输的数据为一个 packet,一个 packet 需要传递到网络中的另一个进程, 首先这个 packet 需要用应用层协议进行封装,这里是七层模型中的应用层:Application layer (为了叙述方便这里把传输层上面的协议统称为应用层,七层简化为四层),接着封装之后的 packet 继续被下层协议封装,比如下层是 TCP 协议,七层模型中的传输层:Transport layer,然后再被下层协议封装,比如 IP 协议,七层模型中的:Network layer,最后数据通到达网卡等硬件设备,七层中的物理层:Physical layer。

  • Application (HTTP)
  • Presentation
  • Session
  • Transport (TCP、UDP)
  • Network (IP)
  • Data Link
  • Physical

当 packet 到达网络的另一端,此时又需要对封装之后的 packet 实行相反的过程进行称之为拆包,从而最终获得原始的 packet。

详见:

1.7 字节

为了表述方便,计算机通信数据大小统一以字节为单位,1 byte=8 bit。

1.8 字节序

数据在网络中是 big-endian (network byte order)的方式存储,即高位在前的存储方式,机器的内存中是以 little-endian (host byte order)的方式存储,即低位在前的方式存储,为了让网络中的字节序和机器本地的字节序一致,必须进行相互转换,为什么?查看详见。

unix 提供转换的函数是:

  • htons() host to network short
  • htonl() host to network long
  • ntohs() network to host short
  • ntohl() network to host long

详见:

1.9 文件描述符

文件描述符是一个简单的非负整数,用来表示一个打开的文件,Unix 中一切都是文件,socket 本质上也可以理解为一个文件。

1.10 计算机是如何交流的

人因为需要交流和沟通,才有了语言,计算机需要交流和沟通,才有了协议。人的交流促成了社交网络,计算机的交流促成了计算机网络,而计算机交流的本质其实是进程的交流,不同计算机上的进程通过 socket 相互通信,socket 提供了进程交流的通道,借助于协议,不同进程说的话才能被另一个进程理解。

计算机就是利用 socket,通过一组组的协议,以太网协议、IP 协议、TCP/UDP 协议进行相互交流的。

© 三月沙 all right reserved,powered by GitbookUpdated at 2019-05-23 11:02:59

results matching ""

    No results matching ""