【好书精读】网络是怎样连接的 之 创建套接字

news2024/11/25 6:53:17

(该图由AI制作 学习AI绘图 联系我)

目录

协议栈的内部结构

套接字的实体就是通信控制信息

真正的套接字

调用 socket 时的操作



从应用程序收到委托后 协议栈通过 TCP 协议收发数据的操作可以分为 4 个阶段 首先是创 建套接字 在这个阶段 我们将介绍协 议栈的内部结构、套接字的实体,以及创建套接字 的操作过程 到这 大家应该可以对套接字到底是什么样的一个东西有一个比较具体 的理解

协议栈的内部结构

图中最上面的部分是网络应用程序

浏览器电子邮件客户端Web 服务器电子邮件服务器等程序

应用程序的下面是 Socket 库,其中包括解析器 解析器用来向 DNS服务器发出查询
再下面就是 操作系统内部 其中包括协议栈
协议栈的 上半部分 有两块 分别是负责用 TCP 协议收发数据的部分和负责用 UDP 协议收发数 据的部分
浏览器、邮件等一般应用程序收发数据时用 TCP;
DNS 查询等收发较短的控制数据时用 UDP
下面一半 是用 IP 协议控制网络包收发操作的部分
IP 中还包括 ICMP A 协议和 ARP B 协议。
ICMP 用于告知网络包传送过程中产生的错误以及各种控制消息 ARP 用于根据 IP 地址查询相应的以太网 MAC 地址

IP 下面的网卡驱动程序负责控制网卡硬件 而最下面的网卡则负责完成实际的收发操作 也就是对网线中的信号执行发送和接收的操作

套接字的实体就是通信控制信息

在协议栈内部有一块用于存放控制信息的内存空间 这里记录了用于 控制通信操作的控制信息
例如通信对象的 IP 地址 端口号 通信操作的进行状态等
本来套接字就只是一个概念而已 并不存在实体 如果一定要赋予它一个实体 我们可以说这些控制信息就是套接字的实体 或者说 存放控制信息的内存空间就是套接字的实体
协议栈在执行操作时需要参阅这些控制信息
协议栈是根据套接字中记录的控制信息来工作的

真正的套接字

 

图中每一行相当于一个套接字,当创建套接字时,就会在这里增加一行新的控制信息

举个例子:

比如第 8
它表示 PID B 4 的程序正在使用 IP 地址为 10.10.1.16 的网卡与 IP 地址为10.10.1.18 的对象进行通信
此外我们还可以看出 本机使用 1031 端口 对方使用 139 端口 139 端口是 Windows 文件服务器使用的端口
因此 我们就能够看出这个套接字是连接到一台文件服务器的
我们再来看第 1 这一行表示 PID 984 的程序正在 135 端口等待另一方的连接 其中 本地 IP 地址和远程 IP 地址都是 0.0.0.0 这表示通信还没开始 IP 地址不 确定

调用 socket 时的操作

浏览器调用 socket connect Socket 库中的程序组件时 协议栈内部是如何工作的

浏览器委托协议栈使用 TCP 协议来收发数据

创建套接字的阶段如图 ①所示

应用程序调用 socket 申请创建套接字 协议栈根据应用程序的申请执行创建套接字的操作
创建套接字时,首先分配一个套接字所需的内存空间,然后向其中写入初始状态。
将表示这个套接字的描述符告知应用程序(描述符相当于用来区分协议栈中的多个套接字的号码牌)
收到描述符之后 应用程序在向协议栈进行收发数据委托时就需要提供这个描述符

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/667007.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SothisAI创建容器和conda环境

1.创建容器(设置torch版本,cuda,python版本等等)后进入web shell 2.shell里输入ssh username(你自己的用户名) IP(你创建的实例的ip地址) 3.在web平台创建你自己的文件夹 4.shel…

小程序请求封装、使用

小程序请求封装 1、要了解方法 1.1、wx.request() wx.request 发起 HTTPS 网络请求。(详情点击wx.request查看官方文档) 1.2、wx.showModal() wx.showModal 显示模态对话框。(详情点击wx.showModal查看官方文档) 1.3、wx.sho…

Swift 周报 第三十一期

文章目录 前言新闻和社区注册 WWDC23 实验室和活动Apple Vision Pro 和 visionOS 撼世登场App Store 中新增的隐私功能 提案正在审查的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组自主整理周报的第二十二期,每个模块已初步成型。各位读者如果…

奇数分频器电路设计

目录 奇数分频器电路设计 1、奇数分频器电路简介 2、实验任务 3、程序设计 3.1、7分频电路代码 3.2、仿真验证 3.2.1、编写 TB 文件 3.2.2、仿真验证 4、用状态机实现7分频电路设计 4.1、代码如下: 4.2、使用状态机的好处 奇数分频器电路设计 前面一节我…

前端JS限制绕过测试-业务安全测试实操(17)

前端JS限制绕过测试,请求重放测试 前端JS限制绕过测试 测试原理和方法 很多商品在限制用户购买数量时,服务器仅在页面通过JS脚本限制,未在服务器端校验用户提交的数量,通过抓取客户端发送的请求包修改JS端生成处理的交易数据,如将请求中的商品数量改为大于最大数限制的值…

Vue中使用分布式事务管理解决方案

文章目录 分布式事务管理是什么优点:缺点:弥补缺点的方法有: 解决方案 分布式事务管理是什么 分布式事务管理是指在分布式系统中对跨多个数据库或服务的操作进行协调和保证一致性的机制。在分布式环境下,由于涉及到多个独立的资源…

半年面试12家大厂,我总结出了这份2023版互联网大厂(Java岗)面试真题汇总

Java面试 现在互联网大环境不好,互联网公司纷纷裁员并缩减HC,更多程序员去竞争更少的就业岗位,整的IT行业越来越卷。身为Java程序员的我们就更不用说了,上班8小时需要做好本职工作,下班后还要不断提升技能、技术栈&am…

docker 命令解释 - nginx镜像制作

目录 Dockerfile 部分命令解释 1、ENTRYPOINT 而ENTRYPOINT 语言 CMD的区别 1、docker run 启动容器的时候,可以传递参数进入给ENTRYPOINT里面的命令(-e) 2、当2者都存在的时候,CMD里的内容会成为 ENTRYPOINT 里的参数&#x…

Pytest中断言的重要性

目录 前言 pytest断言 增加断言详细信息 异常断言 .type .value .traceback pytest常用断言 前言 在pytest中,断言是非常重要的一部分。断言可以帮助我们验证代码的正确性,检查函数返回的值是否符合要求,以及判断程序中预期行为是否发生。如…

MySQL数据库(二)

前言 本文是关于MySQL数据库的第二弹。 临时表不受原表数据类型的约束!! SQL语法不区分大小写。 一、列的使用 (一)列的增加 1、全列插入 insert into 表名 values (数据,数据); 也可以同时插入多条数据: insert into 表名 va…

小程序跳转多次返回首页

小程序跳转多次返回首页 小程序跳转多个页面后直接返回首页 问题 例&#xff1a; 跳转&#xff1a;A(首页) - > B -> C -> D 返回&#xff1a;D -> A(首页) 1、页面中按钮跳转 <!--D页面 WXML--> <view class"-btn"><button bindtap&q…

6月第3周榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩)发布!

飞瓜轻数发布2023年6月12日-6月18日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的B…

浅谈智能配电房的系统设计和技术方案

张心志acrelzxz 安科瑞电气股份有限公司 上海嘉定 201801 摘 要&#xff1a;为了进一步提升配网运维工作质量和效率&#xff0c;支撑配网技术发展向数字化、精益化、智能化转型。在大量的配电房现状问题分析以及新监测技术调研的基础上&#xff0c;文章提出了智能配电房…

WebGL/Threejs瀑布水流粒子效果

webgl瀑布效果 初始化场景 function init () {scene new THREE.Scene();camera new THREE.PerspectiveCamera (45, scr.w / scr.h, 0.1, 10000);renderer new THREE.WebGLRenderer ({ antialias: true });renderer.gammaInput true;renderer.gammaOutput true;renderer.…

盘点中国顶级黑客Top10,最后一位你猜是谁

第一名&#xff1a;袁仁广 别名&#xff1a;大兔子(datuzi)&#xff0c;人称袁哥。提起袁任广&#xff0c;知道的人或许并不多。但如果提起袁哥或者大兔子&#xff0c;在国内安全业界称得上尽人皆知。在国内&#xff0c;他的windows系统方面的造诣可谓首屈一指&#xff0c;早在…

centos系统socket5安装与使用

一、socket5安装 1、安装依赖 yum -y install gcc openldap-devel pam-devel openssl-devel 2、安装socket5 wget http://nchc.dl.sourceforge.net/project/ss5/ss5/3.8.9-8/ss5-3.8.9-8.tar.gztar -xzvf ss5-3.8.9-8.tar.gzcd ss5-3.8.9./configuremakemake install 二、…

Android Jetpack Compose — Slider滑动条

在Android Jetpack Compose中&#xff0c;Slider(滑动条&#xff09;是一个常用的用户界面控件&#xff0c;它允许通过滑动条来选择一个范围或数值。Slider控件非常适用于调整音量、亮度、进度等需要连续调整的场景。 一、Slider的属性 Slider是Android Jetpack Compose中的一个…

html实现多种风格步骤条

文章目录 1.设计来源1.1 线性风步骤条1.2 进度风步骤条1.3 花式风步骤条1.4 格子风步骤条 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/131308246 html实现多种风格步骤…

Java版本+企业电子招投标系统源代码

一、立项管理 1、招标立项申请 功能点&#xff1a;招标类项目立项申请入口&#xff0c;用户可以保存为草稿&#xff0c;提交。 2、非招标立项申请 功能点&#xff1a;非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点&#xff1a;对草稿进行编辑&#x…

浅析景区慢直播的需求与基于视频技术的解决方案

一、行业背景 从春节到“五一”假期&#xff0c;旅游市场高开稳走&#xff0c;复苏持续提速。“慢直播”是一种特别的直播形式&#xff0c;没有主持人&#xff0c;也没有绚丽的镜头切换以及精美的后期制作&#xff0c;只用固定机位拍摄来更加真实地展现事件现场&#xff0c;以…