【网络编程】网络基础

TCP/IP五层模型

物理层:负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的 WIFI无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层,它通过物理层的广播方式来转发数据包。当一个计算机需要向另一个计算机发送数据时,它会将数据包发送给集线器,集线器会将这个数据包广播到所有连接到它的端口上。这样,所有连接到集线器上的计算机都能够收到这个数据包,并根据目标MAC 地址来判断是否接收该数据包。

数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动发)、数据差错校验等工作,有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层,它能够分析数据包的 MAC 地址,并根据 MAC 地址来确定数据包应该发送到哪个端口。当一个计算机需要向另一个计算机发送数据时,它会将数据包发送给交换机,交换机会根据目标 MAC地址来确定该数据包应该发送到哪个端口。这样,只有目标计算机会接收到这个数据包,而其他计算机则不会收到。

网络层:负责地址管理和路由选择,例如在 IP 协议中,通过 IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由),路由器(Router)工作在网路层,它能够分析数据包的 IP 地址,并根据 IP 地址来确定数据包应该转发到哪个网络中。当一个计算机需要向另一个网络中的计算机发送数据时,它会将数据包发送给路由器,路由器会根据目标IP地址来确定该数据包应该转发到哪个网络中。这样,不同网络之间的计算机就能够相互通信了。

传输层:负责两台主机之间的数据传输,如传输控制协议 (TCP)能够确保数据可靠的从源主机发送到目标主机。

应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等,我们的网络编程主要就是针对应用层。

通信过程简述

在这里插入图片描述
从上到下将数据封装,即每一层添加每一层对应的报头,通过以太网传播给对应的目标,然后自下而上进行解包过程即去掉每一层的报头,最后得到有效载荷实现通信。
报文=报头+有效载荷
每层协议都要提供分离报头和有效载荷的能力,都要提供决定将有效载荷交付给上层哪个协议的能力。

以太网(局域网)通信

局域网中每台主机都有一个惟一的mac地址。
1.帧的生成:当一台计算机要向另一台计算机发送数据时,它会将数据封装成一个数据帧,包括目标地址、源地址、数据内容等信息。
2.帧的传输:生成的数据帧会通过计算机的网卡发送到以太网上,然后通过以太网的传输介质传输到目标计算机。
3.帧的接收:当目标计算机接收到数据帧时,它会检查帧的目标地址是否与自己的地址匹配,如果匹配,则接收数据帧并将其解封装,提取出数据内容。
4.冲突检测与重传:在以太网上,多台计算机可以同时发送数据帧,这可能会导致帧的冲突。因此,以太网采用了冲突检测机制,当检测到冲突时,发送的计算机会停止发送数据,并在一段时间后重新发送。如果发送的数据帧没有被接收到,发送的计算机还会进行重传,直到数据帧被成功接收。
5.为了解决数据碰撞的问题,以太网采用了 CSMA / CD 协议。CSMA / CD 协议意味着 “带冲突检测的载波侦听多路访问”,它规定了当主机要发送数据时,需要先侦听介质上是否有其他主机正在发送数据。如果介质上有信号,主机就会等待一段随机时间后再发送数据。如果多个主机同时发送数据,会发生碰撞,这时所有的主机都会检测到冲突,并停止发送数据。接着,每个主机会等待一段随机时间后再次尝试发送数据,直到成功为止。
除了 CSMA / CD 协议,局域网还可以采用其他方法来解决数据碰撞问题,如使用交换机或使用全双工通信等技术。

mac地址和ip地址区别

1.mac地址是在硬件出厂时确定,是唯一的,作用在数据链路层,长度为48位。
2.而ip地址是逻辑地址,基于网络拓扑分配,不是惟一的,作用在网络层,ipv4 32位,ipv6 128位。

端口号

端口号是传输层协议的内容,它是用于标识网络应用程序的通信端口的一个 16 位的数字,其取值范围是 0 到 65535。其中 0 到 1023 的端口号被保留用于一些特定的服务和应用程序,称为“系统端口”或“熟知端口”,例如 HTTP 服务使用的端口号为 80,SMTP 服务使用的端口号为 25。每个端口号都与一个特定的应用程序或服务相关联,用于区分同一主机上的不同应用程序或在网络上的不同主机上的不同应用程序。

在一个网络数据包中,源和目标主机的 IP 地址用于标识主机在网络中的位置,而源和目标端口号则用于标识主机上的应用程序(进程)。网络应用程序使用端口号来与其他应用程序进行通信。在网络传输中,源主机上的应用程序将数据发送到目标主机上的特定端口号,目标主机会将数据包路由到相应的应用程序上进行处理。因此,端口号的作用是为应用程序提供一种可靠的通信机制,使不同的应用程序可以在同一主机上共存,或者在不同主机上进行通信。

注:IP地址 + 端口号能够标识网络上的某一台主机的某一个进程,一个端口号只能被一个进程占用,而一个进程可以绑定多个端口号

端口号和进程pid

pid已经能表示一台主机上进程的唯一性,为何还要端口号?
1.系统和网络功能解耦。将操作系统进程管理层面的pid和网络通信的端口号解耦。
2.如果一个进程想要提供多个服务或连接到多个不同的网络服务,它可能需要使用多个端口号。此外,不同的进程也可以复用相同的端口号。
3.PID是操作系统特定的,不同的操作系统或不同的系统实例可能会有相同的PID。而端口号是在网络层使用的,它允许跨平台、跨网络的进程间通信。这意味着,无论进程运行在哪个操作系统或哪个网络设备上,只要它们使用相同的端口号,就可以进行通信
4.不是所有进程都要网络通信,但所有进程都要有pid。

网络字节序

网络字节序(Network Byte Order)是一种统一的字节序,用于在计算机网络中进行数据传输。由于不同的计算机可能使用不同的字节序(大小端),因此在网络传输中,需要使用一种固定的字节序来确保数据的正确传输和解析。

网络字节序采用的是大端字节序(Big-endian):将高位字节存放在内存的低地址处,低位字节存放在内存的高地址处。在网络字节序中,所有数据类型(如整型、浮点型、字符型等)都采用相同的字节序,这样就可以保证在不同的计算机上进行数据传输和解析时,不会出现字节序不一致的问题。

套接字编程

在这里插入图片描述
sockaddr 是一个通用的套接字地址结构体,它包含了地址族、地址信息等字段。在 socket 编程中,通常需要将sockaddr 类型的地址转换成对应的具体类型的地址结构体,例如 sockaddr_in 或 sockaddr_un,才能方便地进行相关的操作。sockaddr 的结构体定义如下:

struct sockaddr 
{sa_family_t sa_family;      //地址族(AF_xxx)char        sa_data[14];    //14字节协议特定地址信息
};

sa_family 表示地址族,具体取值可以是 AF_UNIX、AF_INET、AF_INET6 等,sa_data 字段是协议特定的地址信息。在实际使用中,sockaddr 通常会被转换为其他具体的地址结构体,例如 sockaddr_in 或 sockaddr_un。

sockaddr_in 是 Internet 域套接字地址结构体,它在sockaddr 的基础上增加了 IPv4 地址和端口号字段。sockaddr_in 的结构体定义如下:

struct sockaddr_in 
{sa_family_t sin_family;      //地址族(AF_INET)uint16_t sin_port;           //16位端口号struct in_addr sin_addr;     //32位IPv4地址char sin_zero[8];           //不使用的填充字段
};

sockaddr_un 是 Unix 域套接字地址结构体,它在sockaddr 的基础上增加了一个路径名字段。sockaddr_un的结构体定义如下:

struct sockaddr_un 
{sa_family_t sun_family;     //地址族(AF_UNIX)char sun_path[108];         //文件路径名
};

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

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

相关文章

使用 uni-app 开发 iOS 应用的操作步骤

哈喽呀,大家好呀,淼淼又来和大家见面啦,上一期和大家一起探讨了使用uniapp开发iOS应用的优势及劣势之后有许多小伙伴想要尝试使用uniapp开发iOS应用,但是却不懂如何使用uniapp开发iOS应用,所以这一期淼淼就来给你们分享…

数据结构复习指导之数组和特殊矩阵

文章目录 数组和特殊矩阵 考纲内容 复习提示 前言 1.数组的定义 2.数组的存储结构 3.特殊矩阵的压缩存储 3.1对称矩阵 3.2三角矩阵 3.3三对角矩阵 4.稀疏矩阵 5.知识回顾 数组和特殊矩阵 考纲内容 (一)栈和队列的基本概念 (二&a…

【C++】:const成员,取地址及const取地址操作符重载

目录 一,const成员二,取地址及const取地址操作符重载 一,const成员 将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的…

百度竞价开户详解:步骤、优势与注意事项

随着互联网的普及,网络营销已成为企业不可或缺的一部分。其中,百度竞价作为一种高效的网络推广方式,受到了越来越多企业的青睐。本文将详细介绍百度竞价开户的流程、优势以及注意事项,帮助企业更好地利用这一工具提升品牌知名度和…

UnityWebGL获取话筒实时数据

看了木子李大佬的数字人https://digital.lkz.fit/之后,我也想搞一个,于是开始研究起来,先从WebGL录音开始,一共试了三个插件,个个都有问题…… 1、UnityWebGLMicrophone 用起来没啥问题,但是只能录音&#…

数据结构的队列(c语言版)

一.队列的概念 1.队列的定义 队列是一种常见的数据结构,它遵循先进先出的原则。类似于现实生活中排队的场景,最先进入队列的元素首先被处理,而最后进入队列的元素则要等到前面的元素都被处理完后才能被处理。 在队列中,元素只能…

《恶意不息》是一款什么样的游戏,苹果电脑怎么玩《恶意不息》恶意不息游戏内怎么存档 mac电脑玩游戏

近日steam游戏商城新上架了一款名叫《恶意不息》的游戏十分火爆,那么《恶意不息》是一款什么样的游戏,苹果电脑怎么玩《恶意不息》?一起来看看吧! 一、《恶意不息》是一款什么样的游戏? Private Division,…

【蓝桥杯嵌入式】第七届省赛 - 模拟液位检测告警系统

代码开源,Gitee自取 代码开源,Gitee自取 代码开源,Gitee自取 目录 0 前言 1 展示 1.1 源码 1.2 演示视频 1.3 题目展示 2 工程配置 3 资源配置&代码实现 3.1 定时器 3.2 液位检测 3.3 液位阈值设定 3.4 液位阈值设定 3.5 串…

BST二叉搜索树

概念 二叉搜索树(Binary Search Tree,简称BST),又称为二叉排序树或二叉查找树,是一种特殊的二叉树数据结构。它具有以下基本性质: 节点的值的有序性:对于BST中的任意一个节点,其左…

Angular基础-搭建Angular运行环境

这篇文章介绍了在Angular项目中进行开发环境搭建的关键步骤。包括node.js安装和配置、安装Angular CLI工具、安装angular-router、创建Angular项目等步骤。这篇文章为读者提供了清晰的指南,帮助他们快速搭建Angular开发环境,为后续的项目开发奠定基础。 …

【Debug】TensorRT报错汇总

搭建TensorRT过程参见:【通俗易懂】Windows系统安装TensorRT 下面是运行中的问题汇总及解决。 报错1. No module named ‘pycuda’ 解决: pip install pycuda报错2. AttributeError: ‘tensorrt.tensorrt.Builder’ object has no attribute ‘max_wor…

在ubuntu 24.04 上安装vmware workstation 17.5.1

ubuntu安装在新组装的i9 14900机器上,用来学习笨叔的ARM64体系结构编程,也熟悉Linux的用法。但有时候写文档总是不方便,还是需要window来用。因此想在ubuntu 24.04上安装Linux版本的vmware worksation 17.5.1以虚拟机的方式安装windows 11。其…

信息技术内涵及意义

一、信息技术及其演进趋势 (一)信息技术概况概念 信息技术(Information Technology,IT)指“应用在信息加工和处理中的科学、技术与工程的训练方法与管理技巧;上述方法和技巧的应用;计算机及其…

JavaScript+B/S版云LIS系统源码ASP.NET CORE 3.1 MVC云LIS系统如何实现样本追踪的预警功能?医院云LIS检验系统源码

JavaScriptB/S版云LIS系统源码ASP.NET CORE 3.1 MVC云LIS系统如何实现样本追踪的预警功能?医院云LIS检验系统源码 实验室信息管理系统(Trasen Laboratory Information Management System)是一套专业的医疗实验室信息管理软件,包含…

【C++庖丁解牛】C++11---新的类的功能 | 可变参数模板

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1.新的类功能1.1 默认成员…

pyqt标签常用qss格式设置

pyqt标签常用qss格式设置 QSS介绍标签常用的QSS设置效果代码 QSS介绍 Qt Style Sheets (QSS) 是 Qt 框架中用于定制应用程序界面样式的一种语言。它类似于网页开发中的 CSS(Cascading Style Sheets),但专门为 Qt 应用程序设计。使用 QSS&…

24.4.28(板刷dp,拓扑判环,区间dp+容斥算回文串总数)

星期一: 昨晚cf又掉分,小掉不算掉 补ABC350 D atc传送门 思路:对每个连通块,使其成为一个完全图,完全图的边数为 n*(n-1)/2 , 答案加上每个连通块成为完全图后的…

第十五届蓝桥杯Java软件开发大学B组自我经验小结

自我介绍 23届大一 双非 计院科班 软件工程 江苏人在吉林上大学 Java蒟蒻 在学校的宣传下 有幸参加了第十五届蓝桥杯Java大学b组省赛 蓝桥杯说明 就是一个算法比赛吧 考试时间9.00到1.00 四小时 带准考证和身份证和笔 草稿纸会发 赛制是IOC就是不会给任何反馈 就是你…

富唯智能案例|双3D相机引导衔架抓取铝型材

随着制造业的快速发展和自动化水平的不断提升,铝型材的自动化抓取和加工成为行业内的一大技术难题。铝型材因其轻便、耐腐蚀、易加工等特点,广泛应用于建筑、汽车、电子等领域。然而,铝型材的形状多样、尺寸不一,以及生产线上的高…

【算法系列】哈希表

目录 哈希表总结 leetcode题目 一、两数之和 二、判定是否互为字符重排 三、存在重复元素 四、存在重复元素 II 五、字母异位词分组 六、在长度2N的数组中找出重复N次的元素 七、两个数组的交集 八、两个数组的交集 II 九、两句话中的不常见单词 哈希表总结 1.存储数…