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

news2025/1/20 1:46:28

写在前面

刚刚更新完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(线程同步/互斥锁/信号量/条件变量)

✨🎉总结

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

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

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

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

相关文章

Redis(概述、应用场景、线程模式、数据持久化、数据一致、事务、集群、哨兵、key过期策略、缓存穿透、击穿、雪崩)

目录 Redis概述 应用场景 Redis的线程模式 数据持久化 1.Rdb(Redis DataBase) 2.Aof(Append Only File) mysql与redis保持数据一致 redis事务 主从复制(Redis集群) 哨兵模式 key过期策略 缓存穿透、击穿、…

Docker安装Jenkins,配置Maven和Java

前言 这是一个java的springboot项目,使用maven构建 安装准备 需要将maven和jdk安装在服务器上,Jenkins需要用到,还有创建一个jenkins的目录,安装命令如下: docker run -d -uroot -p 9095:8080 -p 50000:50000 --n…

UE5 PCG插件场景静态网格模块化、快速搭建场景

PCG图表可以理解为静态网格体图表,里面可以自定义放不同有静态网格体、可以对密度、大小、面积等等在场景实际应中做相应的调整,可以根据地形高度随机生成静态网络体,可以模化作业。大大降低了场景制的时间成本。PCG插件目前需要UE5.2以上的版…

为什么光刻要用黄光

光刻是集成电路(IC或芯片)制造中的重要工艺之一。简单来说,它是通过使用光掩膜和光刻胶在基板上复制电路图案的过程。 基板将涂覆硅二氧化层绝缘层和光刻胶。光刻胶在被紫外光照射后可以容易地用显影剂溶解,然后在腐蚀后&#xf…

手把手图解教你Java SPI源码分析

原创/朱季谦 我在《Java SPI机制总结系列之开发入门实例》一文当中,分享了Java SPI的玩法,但是这只是基于表面的应用。若要明白其中的原理实现,还需深入到底层源码,分析一番。 这里再重温一下SPI机制的概念:SPI&#…

WSDM 2024 Oral | 港大提出DiffKG:融合知识图谱与扩散模型,为推荐系统赋能

论文链接: https://arxiv.org/abs/2312.16890 代码链接: https://github.com/HKUDS/DiffKG 实验室链接: https://sites.google.com/view/chaoh TLDR 知识图谱已成为提升推荐系统性能的重要资源,能提供丰富的事实信息并揭示实体间的…

Element-Puls Form表单内嵌套el-table表格,根据表格复选框多选或单选动态设置行的验证规则

需求 根据 Table 表格内的复选框来控制当前选中行是否添加必填校验规则 效果图 实现思想 我们需要设置一个 flag 来标识已勾选的行,el-table渲染数据结构是数组对象形式,我们可以在每个对象中手动加如一个标识,例如默认:selected …

Embeddings: What they are and why they matter

embeddings 是什么意思https://simonwillison.net/2023/Oct/23/embeddings/推荐原因:GPT 模型的基础是一种叫做 embeddings 的技术,用来将文本转换成向量,从而可以计算出文本之间的相似度。这篇文章详细地介绍了embeddings及应用 Embeddings…

NLP论文阅读记录 - 2021 | WOS 抽象文本摘要:使用词义消歧和语义内容泛化增强序列到序列模型

文章目录 前言0、论文摘要一、Introduction二.前提三.本文方法3.1 总结为两阶段学习3.1.1 基础系统 3.2 重构文本摘要 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Abstractive Text Summarization: Enhancing Sequen…

【CSS】保持元素宽高比

保持元素的宽高比,在视频或图片展示类页面是一个重要功能。 本文介绍其常规的实现方法。 实现效果 当浏览器视口发生变化时,元素的尺寸随之变化,且宽高比不变。 代码实现 我们用最简单的元素结构来演示,实现宽高比为4&#xf…

AI大模型学习笔记二

文章目录 一、Prompt Engineering1)环境准备 二、LangChain(一个框架名字)三、Fine-tuning(微调) 一、Prompt Engineering 1)环境准备 ①安装OpenAI库 pip install --upgrade openai附加 安装来源 pyth…

中职组安全-win20230217-环境-解析

*任务说明: 仅能获取win20230217的IP地址 用户名:test,密码:123456 访问服务器主机,找到主机中管理员名称,将管理员名称作为Flag值提交; john 访问服务器主机,找到主机中补丁信息,将补丁编号作为Flag值提交&#xff…

NLP论文阅读记录 - 2022 | WOS 一种新颖的优化的与语言无关的文本摘要技术

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.前提三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 A Novel Optimized Language-Independent Text Summarization Techni…

【OJ】环形链表

目录 1. 环形链表||(142)1.1 题目描述1.2 题目分析1.3 代码 2. 环形链表(141)2.1 题目描述2.2 题目分析2.3 代码 1. 环形链表||(142) 1.1 题目描述 1.2 题目分析 带环链表:尾节点的next指向链…

QLExpress和Groovy对比

原理 Groovy groovy基于JVM运行。 编译时:将源文件编译成class文件后,用java的classLoader加载;运行时:直接用groovy classLoader加载 QLExpress QLExpress将文本解析成AST,用java对象表达后执行。 特点 Groo…

【JaveWeb教程】(27)Mybatis的XML配置文件与Mybatis动态SQL 详细代码示例讲解

目录 2. Mybatis的XML配置文件2.1 XML配置文件规范2.2 XML配置文件实现2.3 MybatisX的使用 3. Mybatis动态SQL3.1 什么是动态SQL3.2 动态SQL-if3.2.1 条件查询3.2.2 更新员工 3.3 动态SQL-foreach3.4 动态SQL-sql&include 2. Mybatis的XML配置文件 Mybatis的开发有两种方式…

基于ssm的理财通的设计与实现+jsp论文

摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对理财信息管理的提升&#xff0c…

DeepFloyd IF:由文本生成图像的强大模型,能够绘制文字的 AI 图像工具

文章目录 一、DeepFloyd IF 简介二、DeepFloyd IF模型架构三、DeepFloyd IF模型生成流程四、DeepFloyd IF 模型定义 一、DeepFloyd IF 简介 DeepFloyd IF:能够绘制文字的 AI 图像工具 之前的 Stable Diffusion 和 Midjourney 都无法生成带有文字的图片,…

09Bean的生命周期/作用域不同管理方式不同/自己new的对象纳入Spring容器管理

Spring其实就是一个管理Bean对象的工厂。它负责对象的创建,对象的销毁等。 所谓的生命周期就是:对象从创建开始到最终销毁的整个过程。 Bean的生命周期之5步 ● 第一步:实例化Bean(无参构造方法执行) ● 第二步:Bean属性赋值(注…

python的库或函数不会用:使用help函数查看函数

help(time) # 查看time这个库 FUNCTIONS #函数;都可以调用asctime(...)asctime([tuple]) -> string #调用这个函数的参数需要一个元组(tuple),->:代表返回值是string类型的#下面是简单的介绍Convert a time tup…