《网络基础之socket理解》

news2024/11/25 16:26:04

【一】socket是什么

        从字面上的意思来理解,这玩意的中文含义叫插座,对你想的没错,就是你家用来插电器的插座,只不过你家的插座是用来导电的,而网络里面的socket是用来传导信息的。

【二】网络socket传送数据流程

        我们使用tcp进行链接的时候的一般流程是这样的:

        客户端:创建socket套接字,进行connect()链接,send(),或者recv()数据

        服务端:创建socket套接字,进行bind绑定自己的ip和端口号,设计listen监听状态,accept()获取链接,recv或send信息。

 【三】重新解析socket

        尽管我们很多人见过也用过socket了,但是很多人还是对这玩意的感觉还是一个黑盒,既然你都不知道这玩意是啥了,索性我们直接忘记这玩意,重新设计一个内核网络传输功能。一般情况下,我们实现一个新的功能就需要定义一个新的结构体,那么这个结构体就叫做socket,又因为socket需要实现的功能为在多台设备之间收发数据,而设备需要标识,里面的软件也需要标识,所以socket天生就不止一个,且使用ip标识设备,port标识进程。而收发数据有很多种方式,有可靠的tcp协议有不可靠的udp协议,但是这些协议有很多相似的地方,比如收发数据时的一些逻辑,这部分的代码完全是可以复用的,按照我们面向对象编程的思想,这些不同的协议相同的部分提取出来,通过继承的方式进行复用。

        而socket就是一类最基础的功能,比如接发数据的缓冲区,在socket的基础上封装成了TCP_SOCKET和UDP_SOCKET结构体,这也就是为啥我们创建socket的时候需要指定协议类型。而这类结构体是可以直接进行控制底层硬件的,例如网课,毕竟网络协议最后所有数据都 一定要从网卡里发送。

        但由于这类操作的权限属实有点高,所以直接将其放到了操作系统内核里,但是在Linux系统下有一种思想叫做,一切皆文件。所以这就是为什么我们进行socket读写的时候有点像对文件进行读写了。

        但是我们如何在系统的一系列的socket结构体中找到我们所需要的那个结构体呢?我们如何在操作系统中打开一个文件呢?通过文件路径打开文件,返回文件标识符fd,fd唯一标识这个文件,所以我们也可以将socket结构体抽象为这样,只不过和文件读写操作不同的是,socket结构体读写是读写到socket的结构体中的发送和接受缓冲区。

【三】对应的API接口

        但是我们真不能按照文件读写的函数进行网络信号传输吧?所以我们又设计了一套网络用API结构,我们可以了解一下:send,recv,bind,listen,connect等等。

        刚才我们提到传输数据的流程时,细心的小伙伴会发现,在客户端比服务端少了bind,listen和accpet流程的,这是为什么呢?

        因为在服务器中,我们需要唯一确定ip地址和端口号,方便所有的用户都能找到对应的服务器,而这个相关的信息,我们可以写在相关的配置文件中,所以从用户端是一定能找到服务器的,但是从服务器的角度来说,用户端的ip是随机的,端口是随机的,我不需要去找你,也根本找不到你,也会出现端口号被占用的情况,索性不如让操作系统帮我们进行绑定,一旦进行连接,服务器这边就能记录端口号和ip地址,方便下次找到你。

        缺少listen是因为客户端是连接发起端,不需要去主动监听外来连接,我们发送三次握手连接后,等待回应即可。而没有accpet就更简单了,没有人来连我,我为啥要去握手完成队列里面获取连接?更不应该去获取连接。

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

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

相关文章

基于阻尼绕组起动同步电动机matlab完整程序分享

主要包含输出转速,感应转矩,磁场变化,感应电压,感应电流等6个参数变化曲线图!! 完整程序如下: clc; clear; close all; warning off; addpath(genpath(pwd)); %電機參數設定 r_stat_in=15;%stator內圈半徑 r_stat_out=17;%stator外圈半徑 width_rot=2;%rotor細部寬度 leng…

【瑞萨RA_FSP】DAC —— 输出正弦波

文章目录 一、DAC简介二、DAC的结构框图1. 参考电压2. 触发源3. DAC数据寄存器4. 转换的过程5. 同步转换 三、生成正弦波数据表四、DAC程序设计1. 硬件设计2. 软件设计①文件结构②FSP配置③DAC初始化函数④设置DAC输出电压函数⑤DAC输出正弦波⑥ hal_entry入口函数 一、DAC简介…

多用户商城软件有哪些开发方式?-加速度jsudo

电商时代之下,企业商家纷纷开始了b2b2c商城系统的搭建,以此来抢占电商市场,但由于大多企业商家并没有专业化的开发团队,所以大多会选择将网站建设外包给专业的商城系统开发公司,但就目前而言,b2b2c商城系统…

改进YOLOv8 | 损失函数篇 | YOLOv8 更换损失函数之 SIoU / EIoU / WIoU / Focal_xIoU 最全汇总版

文章目录 更换方式CIoUDIoUEIoUGIoUSIoUWIoUFocal_CIoUFocal_DIoUFocal_EIoUFocal_GIoUFocal_SIoU提示更换方式 第一步:将ultralytics/yolo/utils/metrics.py文件中的bbox_iou替换为如下的代码:class

基于微信小程序的云音乐管理系统+第三稿+文档

博主介绍:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 项目名称 基于微信小程序的云音乐管理系统第三稿文档 视频演示 基于微信小程序的云音乐管理系统第三稿问题解答任务书开题报告查重报告安装视频讲解视频&#…

【计算机网络】第三章传输层-电子科技大学2023期末考试

第三章 传输层 传输层服务与协议 传输层为两个不同主机上的应用程序之间提供逻辑通信机制 传输层协议运行在端系统 发送方: 将应用程序报文分成数据段传递给网络层,接受方: 将数据段重新组装成报文传递到应用层 网络层为两个主机之间提供逻辑通信 主要提供两种协议TCP和U…

RTC

文章目录 前言驱动应用程序运行 前言 RTC(Real Time Clock,实时时钟)是个常用的外设,通过 RTC 我们可以知道日期和时间信息,因此在需要记录时间的场合就需要实时时钟。 可以使用专用的实时时钟芯片来完成此功能&#…

PostgreSQL如何创建临时表?

分类 PostgreSQL支持两种临时表: 会话级临时表:数据可以一直保存在整个会话的生命周期中事务级临时表:数据只存在于这个事务的生命周期中 在PostgreSQL中,不管是事务级的临时表还是会话级的临时表,当会话结束时都会…

家庭版Windows10/Windows11不支持远程桌面的解决办法

家庭版Windows10或11是不支持远程桌面的。我们可以在电脑的“设置”-> “远程桌面设置”中查看系统是否支持远程桌面:我们可以通过RDPWrap这个项目让家庭版也支持远程桌面。 百度网盘下载 首先在下面网址下载该项目,下载zip:https://gith…

【wifi使用指导】wifi模块怎么用?无线路由wifi模块SKW92A/SKW77网页配置说明

据悉,在全球范围内,WiFi承载了超过一半的数据流量,并且65%-90%的智能手机流量来自WiFi。无线覆盖的实现依赖于WiFi模块提供的WiFi信号,支持AP/Client,Bridge,Gateway,Router,3G/4G R…

U-Mail企业邮件服务器搭建方案

数字化办公的日渐推行,使企业对邮箱的依赖与日俱增,正式工作报告,部门之间的事物往来、通知等等都需要使用到企业邮箱。随着企业对数字化建设的不断深入,企业对企业邮箱的要求也越来越高,比如对第三方应用集成及协同办…

【C++】STL之string类(1)

个人主页:平行线也会相交💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C之路】💌 本专栏旨在记录C的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长&…

19项网络与数据安全新国标全文公开免费下载

根据2023年5月23日国家市场监督管理总局、国家标准化管理委员会发布的中华人民共和国国家标准公告(2023年第2号),全国信息安全标准化技术委员会归口的19项网络安全国家标准正式发布。近日,标准全文正式公开,博主第一时…

【社区图书馆】疯狂 Java 讲义:但凡种种,不一而足

虽说酒香不怕巷子深,但是千里之外并不一定能闻到,有人看到这可能会感觉这不免有些杠的味道,其实我想表达的是好酒也需要宣传,比如今天我所要讲的这本书《疯狂Java讲义》。 这不是【赠书活动】,这不是赠书活动… …&…

ChatGPT辅助学Qt6.2——1.Qt安装及编写登录界面

本文旨在帮助读者理解如何使用ChatGPT来辅助安装和学习Qt 6.2。我们将从Qt 6.2的基本概念开始,然后深入了解其安装过程,并探讨如何使用ChatGPT作为一个强大的辅助工具。对于那些寻求在学习和使用Qt 6.2中找到有效支持的人来说,这篇文章将提供…

中国电子学会2023年05月份青少年软件编程Python等级考试试卷五级真题(含答案)

2023-05 Python五级真题 分数:100 题数:38 测试时长:60min 一、单选题(共25题,共50分) 1. 有列表L[UK,china,lili,"张三"],print(L[-2])的结果是?( C) A. UK B.…

华为防火墙基础知识

1.什么是防火墙 墙,始于防,忠于守。自古至今,墙予人以安全之意。防火墙,顾名思义,阻挡的是火,这一名词起源于建筑领域,其作用是隔离火灾,阻止火势从一个区域蔓延到另一个区域。 而…

Spring常见问题

包含内容 单例bean线程是安全的吗? Spring框架中的bean是单例的吗? 是单例的 这个默认是单例的但是可以在Bean注解类文件使用Scope注解进行配置 singleton:bean在每个Spring IOC容器中只有一个实例prototype:一个bean的定义可以…

C语言指针入门学习、知识点梳理(三)

本篇继续深入介绍C语言指针的基本概念与知识点,以经典指针程序--------”互换两个数字“进行阐述,基础不牢地动山摇,有关指针的基础概念,需要提前学习的,可以通过链接跳转至第一、第二篇。 C语言指针入门学习、概念梳…

Linux常见指令

Linux常见指令 引言Linux常见指令查指令——man文件管理相关指令lspwdcdtouchmkdirrmdir与rmrmdirrm cpmvfind 文件查看类catmorelesshead 与 tailheadtail使用管道显示某段内容 grep 打包压缩相关指令zip/unziptar 总结 引言 Linux与我们熟悉的Window都是操作系统&#xff0c…