IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【计算机网络】Socket原语和通信原理 -> 正文阅读

[网络协议]【计算机网络】Socket原语和通信原理

  • 最近面腾讯,问了Socket原语和通信原理的问题,没有答好,因此参考资料总结一下。

1. 什么是Socket

  • Socket是应用层TCP/IP协议族通信的中间软件抽象层,它是一组接口。它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
    0

2. Socket原语

  • 面试官:socket原语有哪些呢?说一下各自的作用?
  • 在socket中,一共有八个原语:
    SOCKET服务原语:用于建立发方通信端点,返回一个整数用作为socket标识。
    BIND服务原语:用于给新建立的通信端点赋予一个地址。
    CONNECT服务原语:在面向连接的TCP服务中用于在本地端点和远地端点间建立一条连接,在无连接的UDP服务中是把对方地址存储下来。
    LISTEN服务原语:服务器为请求连接的客户分配请求连接队列空间,并指定队列长度(一般为5)。
    ACCEPT服务原语:由服务器执行,等待连接请求的到来,请求到达后,服务器创建一个新连接端点,并将该端点的标识符返给请求端,接着产生一个进程为该连接服务,然后再去等待新的连接。
    SEND服务原语:进行发送数据。
    RECV服务原语:进行接收数据。
    CLOSE服务原语:用于释放连接,双方都使用CLOSE原语后,连接即释放。

3. Socket通信原理

  • 面试官:Socket通信原理说一下呢?就是客户端和服务器端一次交互的整个过程详细说一下?
    1
  • 服务器端先创建初始化Socket,然后与端口绑定bind,对端口进行监听listen,调用accept阻塞,等待客户端连接。
  • 客户端创建初始化一个Socket,然后连接服务器connect,如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接close,一次交互结束。

4. 消息接收

  • 面试官:客户端发送消息给服务器端,服务器端是立刻接收到还是说等一会儿才收到呢?
  • 啊?这是什么问题,当时就傻了,回答的立刻接收到,因为已经建立好连接。但是后来想一想这是考察的IO多路复用的问题,即epoll、select函数这些东西,然后要说到消息来了触发什么机制通知来了消息,然后进行对应的读写。
  • IO多路复用的select和epoll函数不就是把socket的fd加进去然后函数阻塞或者回调返回吗。即应该做如下回答。
    :以epoll为例,首先接收方应该创建一个epoll函数,然后将要监视的socket加入进去并挂载到epoll的监视红黑树上,并且节点设置回调函数,如果有数据到了socket缓冲区,那会将此节点的回调放到就绪链表中然后进行后续操作,这里有涉及到epoll的触发有两种模式,如下:
    epoll事件有两种模型,边沿触发:edge-triggered (ET), 水平触发:level-triggered (LT)
    水平触发(level-triggered)
    socket接收缓冲区不为空,有数据可读,读事件一直触发;
    socket发送缓冲区不满,可以继续写入数据,写事件一直触发;
    边沿触发(edge-triggered)
    socket的接收缓冲区状态变化时触发读事件,即空的接收缓冲区刚接收到数据时触发读事件;
    socket的发送缓冲区状态变化时触发写事件,即满的缓冲区刚空出空间时触发读事件;
    边沿触发仅触发一次(即缓冲区中从没有数据到有数据才触发,一直有或一直没有都不触发),水平触发会一直触发(只要缓冲区有数据就会一直触发)。

参考

Socket通信原理

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 08:27:36  更:2022-05-08 08:27:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 10:59:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计