Linux学习记录——이십구 网络基础(2)

news2024/11/18 19:27:55

文章目录

  • 1、理解网络间通信
  • 2、理解协议
  • 3、网络字节序
  • 4、socket编程接口和sockaddr结构


1、理解网络间通信

宏观上,是主机与主机在发送接收消息,但主机怎么去发送消息?主机间的通信是通过进程完成的,这个进程就是用户发起的进程,比如打开微信聊天,就是打开了微信这个进程。主机包含操作系统,驱动,物理层,上方的应用层则有用户打开的进程,进程调用系统中的网络接口发送消息给到另一个主机的系统,系统会把这个消息传给上层的应用层的对应的进程。主机是如此,服务器也是如此,刷短视频的时候就是在进程在和软件公司的服务器交互,发送请求,由服务器去完成。

主机间的通信,先将数据通过OS,通过TCP/IP协议发送到目标主机,IP地址可以表示互联网上唯一一台主机,目标主机将收到的数据推送给自己上层的指定进程。但进程不只有一个,那么我们自己的主机如何知道是哪一个网络进程在与它交互?通过端口号。端口号是传输层协议的内容,是一个2字节16位的整数,它标识一个进程,告诉操作系统当前这个进程的数据要交给哪个进程来处理。IP地址标识唯一一台主机,端口号可以标识对应主机内,唯一的一个进程,所以IP地址+端口号就可以标识互联网上的唯一一个进程。

发送消息的主机,有源IP,源端口,接收消息的,有目的IP,目的端口,网络通信的本质就是通过IP + PORT(端口)构建进程唯一性,进行基于网路的进程间通信。通过IP+端口号来进行通信的方案就是套接字,socket通信。

网络通信不止这一个方案。除了端口号,其实也可以通过进程PID来实现通信,因为它也是唯一的,能够标识唯一一个进程,但端口号能告诉主机,这个进程是来通信的,而PID则不行;并且如果用PID,那么网络又得管理好这些进程,进程PID改了,网络相关部分也改了,所以不如单独用一个端口号来标识更针对。

一个进程可以绑定多个端口号,但一个端口号不能被多个进程绑定。一个主机的系统层收到信息后,通过TCP/IP协议,会得到两个端口号和两个IP地址,操作系统层面会维护一张端口号的哈希表,但不是哈希桶,所以一个位置只能连接上一个进程,但是一个进程可以映射到多个位置,所以通过这个哈希表,端口号就可以找到对应的进程。

网络也是在系统内部的,所以也是文件。网路这个文件有文件描述符,有自己的文件结构体,有自己的缓冲区,当网络收到数据时,通过有效载荷找到进程,根据进程找到网络的套接字,根据套接字查找文件描述符表,就找到了对应的缓冲区,把接收的数据放到缓冲区里,进程就可以以文件的形式读取到数据了。

2、理解协议

TCP/UDP协议在传输层。TCP是传输控制协议,面向连接的协议,并且自带可靠性,可靠性是指如果传输中数据丢失,TCP协议会重新发一遍。以及面向字节流。字节流是指在没有发数据前,存储时是以字节流存储的,拿取的策略靠拿数据的来确定,可以一次性拿全部,也可以每一次都拿4字节这样的。

UDP协议是用户数据报协议。它是无连接,不可靠传输,面向数据报的。用UDP协议发送数据时,就不关系数据后续怎么样了。它在通信之前也不需要建立连接。

面向数据报是什么意思?简单理解一下,就是拿快递时,只能一个个拿,或者多个拿,但不可能拿半个。而面向字节流,就是看拿取方怎么做了,只拿十分之一个快递也都是可以的。

TCP可靠,也表明它通信成本更高,使用成本更高,要做的工作更多,而UDP则更简洁,像直播场景用的就是UDP协议,不过TCP协议用的还是要更多。

3、网络字节序

每个字节都有地址,这些地址的权值位不同,有高有低,高权值位放在内存的高地址处(小端)和低地址处(大端)就有了不同的存放方法,也就有了大小端。如果两个主机存储方式不同,一个大,一个小,那么发送数据时,接收的数据就会变成一个反向存储的数据,数据就不对了,所以就出现了字节序来解决这个问题。

要解决这个问题,不能用添加报头来解决,因为报头也是数据,也会被反向存储。而字节序解决这个问题就很简单粗暴,就是直接规定了,网络序列必须是大端。发送数据一方必须将数据转成大端存储,接收一方就不管是不是大端了。

主机序列转成网络所需要的序列是一些函数支持的

在这里插入图片描述

前两个函数是主机转网络,后两个是网络转主机,32和16就是表示32和16位整数。

4、socket编程接口和sockaddr结构

在这里插入图片描述

struct sockaddr是一个结构体。这个结构体属于一个既能主机内部通信,又能网络间通信的标准,POSIX标准,而System V只能本主机通信。POSIX基于套接字制定。struct sockaddr_in套接字是用来网络间通信的,sockaddr_un是用来进行本地间通信的。un的方法和in类似,基本会了in就可以看得懂un了。struct sockaddr是一个通用接口,既可以网络通信,也可以本地通信。想做本地通信,就把un强转成sockaddr类型。通信的接口接收的都是sockaddr类型的。而为了强转能够没有问题,三个结构体最前头都有一个16位的地址,sockaddr会先判断是要进行哪个通信,这个16位地址其实存储的就是一个整数,和两个宏AF_INET AF_UNIX比较,等于哪个就采用哪个的方法。

在这里插入图片描述

实际上可以看出来,函数参数里是sockaddr,传过来in就用in的方法,传过来un就用un的方法,这就是多态,但因为TCP是用C语言写的,所以这是用C实现的多态。那为什么不用viod来代替sockaddr呢?其实是可以的,不过因为制定这个标准时还没有void的制定。

下一篇写udp套接字通信,开始写代码。

结束。

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

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

相关文章

《深度学习工业缺陷检测》专栏介绍 CSDN独家改进实战

💡💡💡深度学习工业缺陷检测 1)提供工业小缺陷检测性能提升方案,满足部署条件; 2)针对缺陷样品少等难点,引入无监督检测; 3)深度学习 C、C#部署方案&#…

我写过的最蠢的代码

提起这个话题,感慨万千啊。要说最蠢,应该是一个新年庆贺网站。 当时,一个朋友借给我了一个域名。 我当时,还怎么会写代码,刚大一。看到域名都是和网站挂钩的,我就想写一个网站。 后来新年到了&#xff0…

C++之vector::insert与vector::insert应用总结(二百二十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

七天学会C语言-第七天(结构体)

1.定义结构体 例 1&#xff1a;把一个学生的信息(包括学号、姓名、性别、住址等 4 项信息) 放在一个结构体变量中&#xff0c;然后输出这个学生的信息。 #include <stdio.h>struct Student {int student_id;char name[30];char gender;char address[60]; };int main() …

Vue脚手架一站式搭建项目

一、什么是vue-cli 1.1如果你只是简单写几个Vue的Demo程序&#xff0c;那么你不需要VueCLI脚手架。 1.2.如果你在开发大型项目&#xff0c;那么你需要&#xff0c;并且必然需要使用VueCLI。 1.2.1使用Vue.js开发大型应用时&#xff0c;我们需要考虑代码目录结构、项目结构和…

【2023研电赛】华东赛区一等奖:基于EtherCAT通信有限时间位置收敛伺服系统

本文为2023年第十八届中国研究生电子设计竞赛作品分享&#xff0c;参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&#xff01;&#xff0c;分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&#xff01; 基于…

MQ - 22 Kafka集群架构设计与实现

文章目录 导图概述数据可靠性副本拉取 Leader 数据动态维护可用副本集合控制 Leader 切换和数据截断安全控制可观测性总结导图 概述 MQ - 15 集群篇_如何构建分布式的消息队列集群(下)说了基于 ZooKeeper 和 KRaft 来构建集群的两种方式,在这里就不再重复。 这里我们详细分…

【GIS】地理坐标系WGS84、GCJ-02、BD-09、GCS2000

地理坐标系又可分为 参心坐标系 和 地心坐标系&#xff0c;常见的参心坐标系北京54、西安80&#xff0c;常见的地心坐标系有WGS84、GCJ-02、BD-09、GCS2000 地心坐标系 WGS84&#xff08;World Geodetic System 1984&#xff09; WGS84是为 GPS 全球定位系统建立的坐标系统&…

工作流 Flowable 的使用

一、BPMN 业务流程建模与标注 通过 Status&#xff08;状态&#xff09; 字段维护流程状态&#xff0c;流程负责的审批人可能也是 Hard Code&#xff08;硬编码&#xff09;会出现以下问题&#xff1a; 1.流程健壮性差&#xff0c;但凡出现人员变动&#xff0c;或者组织结构调…

数据结构与算法(六)--链表的遍历,查询和修改,删除操作

一、前言 上篇文章我们了解了链表的概念以及链表底层的搭建以及向链表中添加元素的操作。本次我们继续学习链表剩余的操作&#xff1a;遍历&#xff0c;查询和修改、删除操作。 二、链表查询以及遍历 ①获得链表的第index(0-based)个位置的元素&#xff08;不常用&#xff0…

微信定时发圈、跟圈是怎么操作的?

对于私域运营来说&#xff0c;手上都会有几个微信账号需要管理运营&#xff0c;每天需发圈、评论等操作都已经占据大量的时间了&#xff0c;更别说分配时间去做其他的功能做了。 自从用了微信管理工具&#xff0c;提高了运营的工作效率、而且操作非常地简单&#xff0c;还不用…

梯形加减速点动功能块(博途SCL)

梯形速度曲线相关算法介绍,请查看下面博客文章,这里不再赘述,受水平和能力所限文中难免出现错误和不足之处,欢迎大家批评指正,同时感谢大家订阅。 SMART PLC斜坡函数 SMART PLC斜坡函数功能块(梯形图代码)_RXXW_Dor的博客-CSDN博客斜坡函数Ramp的具体应用可以参看下面…

AI人体行为分析:玩手机/打电话/摔倒/攀爬/扭打检测及TSINGSEE场景解决方案

一、AI人体行为分析技术概述及场景 人体姿态分析/行为分析/动作识别AI算法&#xff0c;是一种利用人工智能技术对人体行为进行检测、跟踪和分析的方法。通过计算机视觉、深度学习和模式识别等技术&#xff0c;可以实现对人体姿态、动作和行为的自动化识别与分析。 在场景应用…

小米笔试题——01背包问题变种

这段代码的主要思路是使用动态规划来构建一个二维数组 dp&#xff0c;其中 dp[i][j] 表示前 i 个产品是否可以组合出金额 j。通过遍历产品列表和可能的目标金额&#xff0c;不断更新 dp 数组中的值&#xff0c;最终返回 dp[N][M] 来判断是否可以组合出目标金额 M。如果 dp[N][M…

Opencv-图像噪声(均值滤波、高斯滤波、中值滤波)

图像的噪声 图像的平滑 均值滤波 均值滤波代码实现 import cv2 as cv import numpy as np import matplotlib.pyplot as plt from pylab import mplmpl.rcParams[font.sans-serif] [SimHei]img cv.imread("dog.png")#均值滤波cv.blur(img, (5, 5))将对图像img进行…

Linux内核SPI子系统驱动框架详解

目录 1 spi子系统整体架构图 2 SPI控制器驱动和SPI设备驱动软件架构 3 SPI控制器驱动的整理流程 4 SPI发送数据过程 5 SPI设备驱动 6spidev万能驱动 7 费曼学习法&#xff1a;我录制了一个SPI子系统驱动框架讲解视频 参考文献&#xff1a; 1 spi子系统整体架构图 如上图…

资管巨头贝莱德增持矿企股份,机构资金正在慢慢进入比特币经济……

在比特币减半前夕&#xff0c;比特币挖矿企业股价今年大幅上涨&#xff0c;甚至比BTC上涨幅度还高数倍&#xff0c;非常强势。而据富途最新股权披露数据显示&#xff0c;截至2023年8月31日&#xff0c;已经有3家机构投资者增持了加密挖矿服务商比特小鹿&#xff08;Bitdeer&…

[面试] k8s面试题 2

文章目录 核心组件1.什么是 Kubernetes 中的控制器&#xff08;Controller&#xff09;&#xff1f;请提供一些常见的控制器类型。2.请解释一下 Kubernetes 中的 Ingress 是什么&#xff0c;以及它的作用。3.如何通过命令行在 Kubernetes 中创建一个 Pod&#xff1f;4.Stateful…

Jmeter配置性能监控插件

一、版本不兼容时&#xff0c;有报错 1、当jmeter版本比较高时&#xff0c;只需要从官网安装jmeter-plugins-manager-1.10.jar一个包 2、当jmeter版本较低时&#xff0c;安装JMeterPlugins-Extras-1.4.0.zip、JMeterPlugins-Standard-1.4.0.zip内两个jar包 3、服务器上传文件…

【链表】删除链表的中间节点-力扣2095题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…