什么是网络套接字(Socket)?一时还真不好回答,而且网络上也有各种解释,莫衷一是。下文将以本人所查阅到的资料来说明一下什么是Socket。

Socket定义

  Socket在维基百科的定义:

A network socket is an endpoint of an inter-process communication across a computer network. Today, most communication between computers is based on the Internet Protocol; therefore most network sockets are Internet sockets.

  而在Oracle官网上的定义是:

A socket is one endpoint of a two-way communication link between two programs running on the network. 

  其实他们想表达的都是这个意思:Socket是网络上两个程序双向通讯连接的端点。

  那我们又该如何理解‘端点(endpoint)’一词呢?

  在Unix/Linux中,一切皆文件。那对于这两个操作系统而言,“端点”就是一个特殊的文件,也就是说Socket实际上就是文件。既然Socket是文件,那就可以用“打开open –> 读写write/read –> 关闭close”模式来操作它,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。更加详细的介绍特摘录自tutorialspoint:

Sockets allow communication between two different processes on the same or different machines. To be more precise, it's a way to talk to other computers using standard Unix file descriptors. In Unix, every I/O action is done by writing or reading a file descriptor. A file descriptor is just an integer associated with an open file and it can be a network connection, a text file, a terminal,or something else.
To a programmer, a socket looks and behaves much like a low-level file descriptor. This is because commands such as read() and write() work with sockets in the same way they do with files and pipes.

  对于一个Socket而言,它至少需要3个参数来指定:

  1)通信的目的地址;

  2)使用的传输层协议(如TCP、UDP);

  3)使用的端口号。

Socket类型

  套接字类型是指创建套接字的应用程序要使用的通信服务类型。linux系统支持多种套接字类型,最常用的有以下三种:

  1)SOCK_STREAM:流式套接字,提供面向连接、可靠的数据传输服务,数据按字节流、按顺序收发,保证在传输过程中无丢失、无冗余。TCP协议支持该套接字。

  2)SOCK_DGRAM:数据报套接字,提供面向无连接的服务,数据收发无序,不能保证数据的准确到达。UDP协议支持该套接字。

  3)SOCK_RAW:原始套接字。允许对低于传输层的协议或物理网络直接访问,例如可以接收和发送ICMP报文。常用于检测新的协议。

  详细可参考tutorialspoint。

Socket网络层次

  这部分主要参考自《深入浅出Linux工具与编程》(余国平著)。

  下图画出了套接字位于网络中的层次,它位于传输层以上、应用层以下。Socket编程正是通过一系列系统调用(Socket API)来完成应用层协议(如ftp、http)。

  

  图:套接字层次图

  套接字是对网络中应用层进程之间的通信进行了抽象,提供了应用层进程利用网络协议栈交换数据的机制。

Socket API

这里列出几个参考文献,篇幅太长,也不好复制

http://www.zmonster.me/notes/tcp-ip-socket-in-c.html

https://blog.csdn.net/G_BrightBoy/article/details/12854117

这两个对socks做了比较详细的描述。作网络编程的可以参考这两篇博文。

《TCP/IP Socket in C》阅读笔记相关推荐

  1. trainer setup_Detectron2源码阅读笔记-(一)Configamp;Trainer

    一.代码结构概览 1.核心部分 configs:储存各种网络的yaml配置文件 datasets:存放数据集的地方 detectron2:运行代码的核心组件 tools:提供了运行代码的入口以及一切可 ...

  2. VoxelNet阅读笔记

    作者:Tom Hardy Date:2020-02-11 来源:VoxelNet阅读笔记

  3. Transformers包tokenizer.encode()方法源码阅读笔记

    Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode

  4. 源码阅读笔记 BiLSTM+CRF做NER任务 流程图

    源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...

  5. Mina源码阅读笔记(一)-整体解读

    2019独角兽企业重金招聘Python工程师标准>>> 今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者 ...

  6. “CoreCLR is now Open Source”阅读笔记

    英文原文:CoreCLR is now Open Source 阅读笔记如下: CoreCLR是.NET Core的执行引擎,功能包括GC(Garbage Collection), JIT(将CIL代 ...

  7. QCon 2015 阅读笔记 - 团队建设

    QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 中西对话:团队管理的五项理论和实战 - 谢欣.董飞(今日头条,LinkedI ...

  8. 05《软件需求模式》阅读笔记

    剩下的两个阅读笔记写第二部分.各类需求模式,共八个领域和它的需求模式,这一次写前四个. 基础需求模式,它是所有种类的系统都可能需要的一些东西.系统间接口需求模式使用系统间接口需求模式定义被定义的系统和 ...

  9. [置顶] Linux协议栈代码阅读笔记(一)

    Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...

  10. 大型网站技术架构:核心原理与案例分析阅读笔记二

    大型网站技术架构:核心原理与案例分析阅读笔记二 网站架构设计时可能会存在误区,其实不必一味追随大公司的解决方案,也不必为了技术而技术,要根据本公司的实际情况,制定适合本公司发展的网站架构设计,否则会变 ...

最新文章

  1. 企业云存储云办公方案
  2. 图灵奖公布:高性能计算先驱、为超算铺平道路的Jack Dongarra获奖
  3. jvm优化_使用Java流和In-JVM-Memory的超低延迟查询
  4. Apache中的一个测试小工具
  5. 工具使用 - Quartus II 管脚分配方法
  6. Linux 终端訪问 FTP 及 上传下载 文件
  7. Java文件上传如何实现呢?
  8. Object Pools 喷泉效果实现
  9. 时间序列预测 预测时间段_应用时间序列预测:美国住宅
  10. python视频人脸检测_Python基于OpenCV实现视频的人脸检测
  11. Java锁的升降级及synchoronized优化
  12. python全栈马哥_马哥2018python全栈视频
  13. c语言实现维吉尼亚密码和希尔密码的加解密
  14. dumpDex脱壳教程
  15. 2021年安全生产模拟考试(特种作业低压电工模拟考试题库二)
  16. 谈谈成功,你离成功有多远?施瓦辛格励志演讲分享(配中文翻译)
  17. ARM 汇编语言程序设计
  18. 手机计算机里面的符号代表什么意思,计算器上的符号各代表什么意思?
  19. 【3153万】巴菲特午餐再创天价!细数曾与股神共进午餐的中国大佬丨湾区人工智能...
  20. ESP32基于arduino开发的心跳体温检测系统(四)本地端系统整合

热门文章

  1. Mckinsey insights 2
  2. 安卓上为什么不能用system.io.file读取streammingAssets目录下的文件
  3. C# == equals 本质理解
  4. 毕业生的商业软件开发之路 --- C#基本语法-C#代码模块逻辑框架
  5. tp剩余未验证内容-7
  6. 2017-10-9(Volley使用范例源码分析)
  7. 数论初步——同余与模算术
  8. 校讯通近期爆发短信诈骗:取消不可能 那如何规范
  9. 自定义控件-条状、块状菜单
  10. 性能调优某大型银行的一个系统过程跟踪和记录