Linux学习之网络编程1(纯理论)

写在前面

刚刚更新完Linux系统编程,特别推荐大家去看的Linux系统编程,总共44个小时,老师讲的非常好,我是十天肝完的,每天大概看20集,每天还要以写blog的形式来写笔记来总结一下,虽然这十天有点累,但是这套视频值得这些时间的付出。我现在在学习Linux网络编程,学习看的视频还是Linux系统编程同一个老师讲的,从今天开始更新Linux网络编程的笔记,先立一个flag:争取十天更新完(虽然我觉得这不太可能,但起码要在今年过年前更新完)


协议

OSI七层模型

  • 物理层:OSI参考模型中的最底层,面向实际承担数据传输的物理媒介,即通信通道。简单来说就是确保原始数据课在各种物理媒介上传输。
  • 数据链路层:定义了单个链路上如何传输数据。
  • 网络层:定义了端到端数据包传输,能够标识所有结点的逻辑地址,路由实现的方式和学习方式。
  • 运输层:又叫传输层。任务是向两台主机之间的进程通信提供通用的数据传输服务,应用进程利用该服务传送应用层报文。
  • 会话层:定义了如何开始,控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续信息的一部分时可以通知应用程序,使表示层看到的数据是连续的。
  • 表示层:定义数据格式及加密。
  • 应用层:OSI体系结构的最高层。任务是通过应用进程的交互来完成特定的网络应用。

这个OSI七层模型只用了解即可,我们后面写代码不用这个七层模型,用的是TCP/IP四层协议体系结构。
可以简记为“物数网传会应表

TCP/IP四层协议体系结构

  • 应用层:面向不同网络应用引入不同的应用层协议。FTP,HTTP,NFS,SSH
  • 传输层:使源端主机和目的端主机上的对等实体可以进行对话。TCP,UDP
  • 网络层:整个协议体系结构的核心。功能是把分组发往目的网路或主机。IP,ICMP,IGMP
  • 链路层(网络接口层):实际上,TCP/IP协议体系并没有真正描述网络接口层的实现,只是要求能够提供给网络层一个访问接口,以便在网络接口上传递IP分组。以太网帧协议,APR

可以简记为“网网传应

1


网络基础概念

MAC地址

介质访问控制(Media Access Control,MAC)地址也称硬件地址,长度是48位(6字节),由十六进制的数字组成,分为前24位和后24位。前24位称为组织唯一标志符(OUI),是由IEEE的注册管理机构分配给厂家的代码,用来区分不同的厂家;后24位由厂家自己分配的代码,成为拓展标识符。
在Linux系统下可以用ifconfig命令来查看MAC地址

IP地址

IP地址是IP提供的一种统一的地址格式,它为互联网上的每一个网络和每一个主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
IP地址分为IPv4和IPv6两类,由于现在主要使用IPv4地址,故下面只介绍IPv4地址
IPv4地址是一个32位的二进制数,通常分隔为四个八位二进制数(即四字节)。IPv4地址通常用点分十进制表示成a.b.c.d,其中a,b,c,d都是0-255内的十进制整数

子网掩码

子网掩码又称为网络掩码,地址掩码。计算机处理需要IP地址外,还需要知道多少位表示主机号及多少位表示子网号。这要求子网掩码不能单独存在,要结合IP地址一起使用,将某个IP地址划分为网络地址和主机地址两部分,子网掩码只针对IPv4地址。
在Linux系统下可以用ifconfig命令来查看子网掩码

端口

端口包括物理端口和逻辑端口。物理端口是用于连接物理设备的接口,逻辑端口是逻辑上用于区分服务端口。我们这里只讲逻辑端口。
Linux操作系统会给那些有需求的进程分配IP地址和端口,每一个端口由一个正整数标识。在互联网上,各个主机根据TCP/IP发送和接收数据包,数据包根据其目的主机IP地址选择路由器被传送到目的主机,当目的主机接收到数据包后,根据数据包中的目的端口号把数据发送到目的端口进行处理。
端口主要分为以下几类:

  • 周知端口:众所周知的端口号,范围是从0到2023。例如,其中80端口号分配给www服务,21端口分配给FTP服务等等。
  • 注册端口:分配给用户进程或应用程序,范围是从1024到49151.
  • 动态端口:范围是从49152到65535.之所以被称为动态端口,是因为它不固定分配某种服务端口号,而是动态分配服务端口号。

TCP

三次握手

1
2

建立TCP连接的过程又称为三次握手。建立一个TCP连接时,需要发送端和接收端共发送三个数据报文以确立连接建立。

  • 第一次握手,发送端将标志位SYN置为1,发送端进入SYN_SENT状态,随机产生一个值seq=J将该数据发送给接收端,等待接收端确认。
  • 第二次握手,接收端进入SYN_RCVD状态,收到数据后由标志位SYN=1确认发送端请求建立连接,接收端将SYNACK都置为1,ack=J+1,并随机产生一个值seq=K,并将该数据发送给发送端以确认收到请求连接。
  • 第三次握手,发送端收到请求后,检查ack是否为J+1,ACK是否为1,如果正确,将ACK置为1,ack=K+1,并将数据发送给接收端,接收端检查ack是否是K+1,ACK是否为1,如果正确则连接建立成功,接收端和发送端进入ESTABLISHED状态,完成三次握手,随后开始传输数据。

四次挥手

  • 第一次挥手,发送端发送一个FIN包,用来关闭到接收端的数据传送,发送端进入FIN_WAIT_1状态。
  • 第二次挥手,接收端收到FIN包,发送ACK给发送端,接收端进入到CLOSE_WAIT状态。
  • 第三次挥手,接收端发送一个FIN包,用来关闭到发送端的数据传送,接收端进入LAST_ACK状态。
  • 第四次挥手,发送端收到FIN包后,进入TIME_WAIT状态,并发送一个ACK确认包给接收端,经过2MSL后,进入CLOSE状态,完成四次挥手。连接完全断开。

3
4

这一篇全是理论,看起来应该有些枯燥,如果实在看不下去,可以先跳过,先看后套接字部分,等看了套接字之后再来看这可能会就会好一些。


写在最后

个人亲身经验:我们学习的一系列Linux命令,一定要自己亲手去敲。不要只是看别人敲代码,不要只是停留在眼睛看,脑袋以为自己懂了,等你实际上手去敲会发现许许多多的这样那样的问题。毕竟“实践出真知”。


如果你觉得我写的题解还不错的,请各位王子公主移步到我的其他题解看看

  1. 数据结构与算法部分(还在更新中):
  • C++ STL总结 - 基于算法竞赛(强力推荐
  • 动态规划——01背包问题
  • 动态规划——完全背包问题
  • 动态规划——多重背包问题
  • 动态规划——分组背包问题
  • 动态规划——最长上升子序列(LIS)
  • 二叉树的中序遍历(三种方法)
  • 最长回文子串
  • 最短路算法——Dijkstra(C++实现)
  • 最短路算法———Bellman_Ford算法(C++实现)
  • 最短路算法———SPFA算法(C++实现)
  • 最小生成树算法———prim算法(C++实现)
  • 最小生成树算法———Kruskal算法(C++实现)
  • 染色法判断二分图(C++实现)
  1. Linux部分(还在更新中):
  • Linux学习之初识Linux
  • Linux学习之命令行基础操作
  • Linux学习之基础命令(适合小白)
  • Linux学习之权限管理和用户管理
  • Linux学习之制作静态库和动态库
  • Linux学习之makefile
  • Linux学习之系统编程1(关于读写系统函数)
  • Linux学习之系统编程2(关于进程及其相关的函数)
  • Linux学习之系统编程3(进程及wait函数)
  • Linux学习之系统编程4(进程间通信)
  • Linux学习之系统编程5(信号)
  • Linux学习之系统编程6(线程)
  • Linux学习之系统编程7(线程同步/互斥锁/信号量/条件变量)

✨🎉总结

“种一颗树最好的是十年前,其次就是现在”
所以,
“让我们一起努力吧,去奔赴更高更远的山海”
在这里插入图片描述
如果有错误❌,欢迎指正哟😋

🎉如果觉得收获满满,可以动动小手,点点赞👍,支持一下哟🎉

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu18.04 TensorRT 部署 yolov5-7.0推理

文章目录 1、环境配置2、推理部分2.1、检测2.2、分类2.3、分割2.4、INT8 量化 1、环境配置 链接: TensorRT cuda环境安装 2、推理部分 下载yolov5对应版本的包 https://github.com/wang-xinyu/tensorrtx/tree/master/yolov5 2.1、检测 1、源码模型下载 git clone -b v7.0 …

Python—使用LangCahin调用千帆大模型

文章目录 前言一、安装LangChain二、获取千帆API Key、Secret Key三、简单对话案例实现四、构建语言模型应用程序:LLM1.初始化模型2.LLM初始化和调用 五、提示词模板(PromptTemplate): 管理 LLM 的提示1.定义提示模板2.组合 LLM 和提示词3.组合输出解析器…

浮动差价这么受欢迎Anzo Capital找了1个理由

在交易市场中,浮动差价是如今最常见的差价类型,也是最受欢迎的的差价类型。Anzo Capital认为它受欢迎的理由只有一条,那就是因为它对参与交易的各方都有利可图。 不仅是交易者本身,就连经纪人和交易商这三者都可以同时受益&…

Apipost接口自动化测试如何操作

Apipost提供可视化的API自动化测试功能,使用Apipost研发人员可以设计、调试接口,测试人员可以基于同一数据源进行测试,Apipost 接口自动化功能在上次更新中进行了逻辑调整,带来更好的交互操作、更多的控制器选择,同时新…

【python】内存管理和数据类型问题

一、内存管理 Python有一个自动内存管理机制,但它并不总是按照期望的方式工作。例如,如果创建了一个大的列表或字典,并且没有删除它,那么这个对象就会一直占用内存,直到Python的垃圾回收器决定清理它。为了避免这种情…

记录仪可作为XCP从站进行数据转发

车辆数据采集系统通常包含多种数据采集设备、多路总线或传感器信号,为了集中监控和管理,需要将这些设备的实时数据传输到上位机。对此,我们将使用基于XCP(Universal Measurement and Calibration Protocol)协议的数据记…

redis复习笔记03(小滴课堂)

Redis6常见数据结构概览 0代表存在,1代表不存在。 1表示删除成功,0表示失败。 查看类型,默认string类型。 也可以设置set类型。 list类型。 查看key的过期时间: Redis6数据结构之String类型介绍和应用场景 批量设置: …

期待!《数字化运维路线图》震撼发布(第一部分)

在时代的激流中,数字化浪潮奔涌而至,机遇与挑战在此交汇。各行业正步入持续变革阶段,一场技术的竞争与博弈正拉开帷幕。科技革命与产业变革如同疾风骤雨,加速进行,市场格局在不断重塑。各类因素叠加之下,一…

搜维尔科技:【简报】元宇宙数字人赛道,《全息影像技术应用》!

期待着看展的主角来到今天要参观的全息影像展,平时就喜欢看展的她对于所谓的全息影像非常好奇,于是她带着期待的心情进入展内。进入展内的主角看到的是与之前完全不同的画展,每幅画看起来就像真的一样,充满好奇的她在展览的各处游…

千问写作——论文写作

【千问写作】 千问写作是运用通义千问720亿参数的语言模型(qwen-72b-chat)进行基于目录的论文创作,通过python-docx设置文档格式然后写出文档 ,其他免费模型(qwen-1.8b-chat)暂时无法生成目录 1. 请求延时 …

怎么做UI自动化测试?不会代码也可以?

UI自动化测试已经成为现代软件开发过程中不可或缺的一部分。它能够提供诸多优势,包括提高测试效率、减少人力成本、提升软件质量等。同时,可视化工具为UI自动化测试带来了更多便利和灵活性。然而,可视化工具也存在一些潜在的劣势。本文将探讨…

工程中的SOVD——从ECU到车辆

SOVD标准正在改变诊断方式,特别是在互联网上当多个合作方进行交互时,其提供了很大的优势。在开发的早期阶段,需要使用附加的方法来利用这个标准,因为该标准并不是专为ECU诊断而开发的,而且还需格外注意数据的处理&…

在统信UOS Linux下用opencv-python捕获摄像头输入保存到视频文件

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、引言 老猿在CSDN的《opencv-python图形图像处理入门基础知识》介绍了一个利用电脑摄像头获取输入视频生成到文件的案例,这个案例当时基于windows的。在《统信UOS Linux下安装opencv-python过…

软件测评中心▏性能测试之压力测试、负载测试的区别和联系简析

在如今的信息时代,软件已经成为人们日常工作和生活不可或缺的一部分。然而,随着软件的发展和应用范围的不断扩大,软件性能的优劣也成为了影响用户使用体验的重要因素。 软件性能测试即对软件在不同条件下的性能进行评估和验证的过程。通过模…

Kubernetes/k8s的存储卷/数据卷

k8s的存储卷/数据卷 容器内的目录和宿主机的目录挂载 容器在系统上的生命周期是短暂的,delete,k8s用控制创建的pod,delete相当于重启,容器的状态也会回复到初始状态 一旦回到初始状态,所有的后天编辑的文件都会消失…

门店管理系统驱动智慧零售升级

在当今数字化经济的大潮中,实体门店正在经历一场由内而外的深度变革。门店管理系统以其高效、便捷和全面的功能特性,为实体店提供了高效的运营解决方案。 门店管理系统拜托了传统零售业对本地化软件的依赖,它将复杂的信息技术转化为易于获取…

Python 爬虫常用的库或工具推荐

在数据驱动的时代,Python爬虫技术以其简单易用、强大灵活的特性成为数据采集的有效手段,越来越多人加入了学习Python的队伍中,今天,我们就为大家推荐一些常用的Python爬虫库和工具,以备不时之需。 1.库 Requests库&am…

在软件测试过程中如何有效的开展接口自动化测试

一.简介 接口自动化测试是指使用自动化测试工具和脚本对软件系统中的接口进行测试的过程。其目的是在软件开发过程中,通过对接口的自动化测试来提高测试效率和测试质量,减少人工测试的工作量和测试成本,并且能够快速发现和修复接口错误&#…

阿里云OSS上传视频,可分片上传

uniappH5实现 阿里云OSS上传视频 示例图: 上传视频完整示例代码: 使用npm安装SDK开发包,安装命令为 npm install ali-oss --save accessKeyId 和 accessKeySecret 还有 bucket 替换成你的就行。 multipartUpload 的第一个入参是&#x…

​软件测试面试:关键问题解析

在软件开发领域,测试是确保软件质量的重要环节。面试是评估软件测试人员技能和经验的关键时刻。在一个软件测试面试中,面试官通常会问一系列问题来评估面试者的知识、技能和解决问题的能力。本文将介绍一些常见的软件测试面试问题,并给出一些…