在计算机通讯领域,socket 被翻译为“套接字”,它是计算机之间进行通讯的一种约定或一种方式。经过 socket 这种约定,一台计算机能够接收其余计算机的数据,也能够向其余计算机发 送数据。html
在 UNIX/Linux 系统中,为了统一对各类硬件的操做,简化接口,不一样的硬件设备也都被当作一个文件。对这些文件的操做,等同于对磁盘上普通文件的操做。
UNIX/Linux 中的一切都是文件!
为了表示和区分已经打开的文件,UNIX/Linux 会给每一个文件分配一个 ID,这个 ID 就是一个整数,被称为文件描述符(File Descriptor)。例如:linux
UNIX/Linux 程序在执行任何形式的 I/O 操做时,都是在读取或者写入一个文件描述符。一个文件描述符只是一个和打开的文件相关联的整数,它的背后多是一个硬盘上的普通文件、FIFO、管道、终端、键盘、显示器,甚至是一个网络链接。
请注意,网络链接也是一个文件,它也有文件描述符!你必须理解这句话。
咱们能够经过 socket() 函数来建立一个网络链接,或者说打开一个网络文件,socket() 的返回值就是文件描述符。有了文件描述符,咱们就能够使用普通的文件操做函数来传输数据了,例如:编程
你看,只要用 socket() 建立了链接,剩下的就是文件操做了,网络编程原来就是如此简单!缓存
<1>流格式套接字(基于TCP)网络
SOCK_STREAM 是一种面向链接的、可靠的、双向的通讯数据流,数据能够准确无误地到达另外一台计算机,若是损坏或丢失,能够从新发送。socket
SOCK_STREAM 有如下几个特征:函数
<2>数据报格式套接字(基于UDP)spa
SOCK_DGRAM 是无链接的不可靠的,不会进行数据的检查 .net
它有如下特征:翻译
《1》无链接的套接字
《2》面向链接的套接字
应用层 | 应用层 |
表示层 | |
会话层 | |
传输层 | 传输层 |
网络层 | 网络层 |
数据链路层 | 网络接口 |
物理层 |
两台计算机进行通讯时,必须遵照如下原则:
咱们所说的 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 协议的,它们的层级关系以下图所示:
<1>IP地址:通常一个局域网用一个IP地址(公网地址:买的),由于IPV4地址若是一台计算机一个确定不够用
<2>MAC地址:固定的写在网卡上
<3>端口号:应用层程序的接口
本文参考:C语言中文网 http://c.biancheng.net/view/2128.html