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

文章目录

  • 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.mzph.cn/news/85073.shtml

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

相关文章

终于把量化入门了,实盘权限已开,学习这件事也不难

多数人18岁就死了,但直到75岁才埋。 ——网易云热评《杀死那个石家庄人》 猫猫挺喜欢这句话的,为什么只活动75岁,于是我查了查现如今78.6岁,大差不差的。 那扣扣减减,人生短短57年,唯一十八岁那年&#xff…

鼠标移入展示字体操作

鼠标移入展示字体 点击删除实行删除操作&#xff0c;点击图片文字跳转产品详情的逻辑实现 <div class"allProduct-content"><template v-for"(item, index) in obj.product" :key"index"><!-- <img :src"item.image&qu…

Mac 上安装yt-dlp 和下载视频的操作

安装 打开终端&#xff0c;在终端输入 cd python的路径&#xff0c;然后输入pip3 install yt-dlp&#xff0c;如下图&#xff1b; 出现 如Successfully installed yt-dlp-2023.7.6 的时候&#xff0c;说明下载成功 下载 下载命令&#xff1a; yt-dlp --list-formats https…

【00】FISCO BCOS区块链简介

官方文档&#xff1a;https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/introduction.html FISCO BCOS是由国内企业主导研发、对外开源、安全可控的企业级金融联盟链底层平台&#xff0c;由金链盟开源工作组协作打造&#xff0c;并于2017年正式对外开源。 F…

【Unity基础】4.动画Animation

【Unity基础】4.动画Animation 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity基础系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;Unity动画编辑器 &#xff08;1&#xff09;Animation组件 这一张我们要学习如何在unity编辑器中&…

HarmonyOS/OpenHarmony应用开发-DevEco Studio新建项目的整体说明

一、文件-新建-新建项目 二、传统应用形态与IDE自带的模板可供选用与免安装的元服与IDE中自带模板的选择 三、以元服务&#xff0c;远程模拟器为例说明IDE整体结构 1区是工程目录结构&#xff0c;是最基本的配置与开发路径等的认知。 2区是代码开发与修改区&#xff0c;是开发…

TexStudio报错 Class: No Found

\classdocument[preprint,review,fleqn,sort&compress,3p]{elsarticle}这里常见导入的类&#xff08;class&#xff09;文件有article.cls&#xff0c;elsarticle.cls&#xff0c;sn-jnl.cls等 一般来说这些文件都应该和我们的源文件document.tex在同一个目录下。如果不在…

9.22(一):数组扁平化

ES6的flat方法 const arr[1,2,[33,44,5,[6,7]],3]// es6中的flat方法function arr1() { //数组自带的扁平化方法,flat的参数代表的是需要展开几层&#xff0c; //如果是Infinity的话&#xff0c;就是不管嵌套几层&#xff0c;全部都展开return arr.flat(Infinity) } let resul…

计算机视觉与深度学习-经典网络解析-ResNet-[北邮鲁鹏]

这里写目录标题 ResNet参考产生背景贡献残差模块残差结构 批归一化ReLU激活函数的初始化方法 网络结构为什么残差网络性能好&#xff1f; ResNet ResNet&#xff08;Residual Neural Network&#xff09;是一种深度卷积神经网络模型&#xff0c;由Kaiming He等人在2015年提出。…

[杂谈]-八进制数

八进制数 文章目录 八进制数1、概述2、八进制数的表示2.1 八进制数2.2 以八进制计数2.3 二进制数补零 3、八进制到十进制转换4、十进制到八进制转换5、二进制到八进制转换示例6、八进制到二进制和十进制转换示例7、总结 1、概述 八进制编号系统是另一种使用基数为8计数系统&am…

Linux 线程属性相关函数

pthread_attr_t就是对应线程的属性 /*#include <pthread.h>int pthread_attr_init(pthread_attr_t *attr);初始化线程属性变量int pthread_attr_destroy(pthread_attr_t *attr);释放线程属性资源int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *deta…

数据变换:数据挖掘的准备工作之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

里氏替换原则~

里氏替换原则&#xff08;Liskov Substitution Principle&#xff09;是面向对象设计中的一个基本原则&#xff0c;它是由Barbara Liskov提出的。 如果对于每一个类型为Apple的对象1&#xff0c;都有类型为fruit的对象2&#xff0c;使得以fruit定义的所有程序 P 在所有的对象1都…

vue获取本地缓存并转为json格式

场景 要求获取当前登录用户id&#xff0c;传入后台去筛选属于该用户的数据&#xff1b; 当前登录用户信息一般会在本地存储中&#xff0c;有些则是在session中&#xff0c;此处只对本地存储做讨论&#xff1b; 本地缓存的用法 1 存储数据 localStorage.setltem(userId,"…

Java多线程篇(4)——wait/notify和park/unPark

文章目录 Object - wait/notifyobject.wait()object.notify() LockSupport - park/unparkLockSupport.park()LockSupport.unPark() Object - wait/notify object.wait() ObjectSynchronizer::wait 从这段代码可以得到两个信息 1&#xff1a;wait() 底层是对象锁&#xff08;就…

20 mysql const 查询

前言 这里主要是 探究一下 explain $sql 中各个 type 诸如 const, ref, range, index, all 的查询的影响, 以及一个初步的效率的判断 这里会调试源码来看一下 各个类型的查询 需要 lookUp 的记录 以及 相关的差异 测试表结构信息如下 CREATE TABLE tz_test (id int(1…

Python 计算三角形面积

"""计算三角形面积介绍&#xff1a;已知三角形边长分别为x、y、z&#xff0c;可以计算三角形半周长q&#xff0c;然后根据海伦公式计算三角形面积S三角形半周长&#xff1a;q (x y z) / 2三角形面积&#xff1a;S (q * (q-x) * (q-y) * (q-z)) ** 0.5知识点…

HCIE-容器docker

1、安装配置操作系统&#xff0c;使用CentOS stream 8镜像 之前&#xff1a;RHEL 8.4 发布了&#xff0c;CentOS紧随其后&#xff0c;发布CentOS 8.4 之后&#xff1a;CentOS 走在前面&#xff0c;成为RHEL上游&#xff0c;再去发布RHEL 制作模板&#xff0c;模板配置要求&…

计算机视觉与深度学习-卷积神经网络-卷积图像去噪边缘提取-图像去噪 [北邮鲁鹏]

目录标题 参考学习链接图像噪声噪声分类椒盐噪声脉冲噪声对椒盐噪声&脉冲噪声去噪使用高斯卷积核中值滤波器 高斯噪声减少高斯噪声 参考学习链接 计算机视觉与深度学习-04-图像去噪&卷积-北邮鲁鹏老师课程笔记 图像噪声 噪声点&#xff0c;其实在视觉上看上去让人感…

用AVR128单片机的音乐门铃

一、系统方案 1、使用按键控制蜂鸣器模拟发出“叮咚”的门铃声。 2、“叮”声对应声音频率714Hz&#xff0c;“咚”对应声音频率500Hz,这两种频率由ATmega128的定时器生成&#xff0c;定时器使用的工作模式自定&#xff0c;处理器使用内部4M时钟。“叮”声持续时间300ms&#x…