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

写在前面

刚刚更新完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/310722.html

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

相关文章

回顾2023,立2024flag

文章目录 回顾2023与CSDN相识专栏整理数据回顾 立2024flag 回顾2023 在过去的一年里,前端技术不断演进和创新。新技术、新框架层出不穷,给前端工程师提供了更多选择和挑战。2023年已经成为过去,回首这一年,我们也经历了许多挑战和…

C# Linq+ValueTuple(元祖),成为Linq高手!

文章目录 前言简单使用:能被2整除ValueTuple使用:两数相加等于4不使用元祖使用元祖排序 基于类的LinqGroupByJoinDistinct去重普通去重选择去重 集合去重ExceptIntersectUnion 总结 前言 Linq是C# 最强语法之一,和委托,get set并列(在我的心中)。我很早就听说了Lin…

rust异步实现(偏应用少理论不头疼版)

文章目录 1 添加依赖2 示例3 tokio异步实现机制概要 参考资料:( 想要进步理解可以看这个 ↓ ) https://www.bilibili.com/video/BV16r4y187P4/?spm_id_from333.788.recommend_more_video.1&vd_source20edf767ec72b97832bba2fc3aca50b8 R…

原型对象与对象原型,理解Function与Array和Object,在instanceof下的关联

面向过程与面向对象 面向过程时一步一步去做一件事,面向对象是多个功能组合在一起,去完成这件事。 面向对象的特性:继承性,封装性,多态性 通过概述应该知道面向过程和面向对象的优缺点 封装性 大家要玩游戏&#x…

如何使用手机公网远程访问本地群辉Video Station中视频文件【内网穿透】

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 文章目录 1.使用环境要求:2.下载群晖videostation&am…

三段低THD线性恒流控制芯片SM2256E:适用于印度球泡灯9W@230Vac

三段低THD线性恒流控制芯片SM2256E是一款专为印度球泡灯、GU10 LED 球泡灯、射灯、LED 蜡烛灯等设计的电子元件。它采用了先进的控制技术,实现了对电流的精准控制,从而有效地降低了总谐波失真(THD)。 SM2256E参数 该芯片的主要特…

蓝桥杯省赛无忧 STL 课件12 vector

01 vector的定义和特性 02 vector的常用函数 03 vector排序去重 示例&#xff1a; #include<bits/stdc.h> using namespace std; int main(){vector<int> vec {5,2,8,1,9};sort(vec.begin(),vec.end());for(const auto& num : vec){cout<<num<<&q…

Spring Boot自动装配

前言 自动装配是 Spring Boot 最核心的功能之一&#xff0c;第三方可以基于这个特性非常方便的和 Spring 做整合&#xff0c;实现自己的 Starter&#xff0c;做到开箱即用。 Java 早期并不支持注解&#xff0c;所以那会儿 Spring 只能通过 xml 的形式来配置。早期项目里要引入…

[Vulnhub靶机] DriftingBlues: 6

[Vulnhub靶机] DriftingBlues: 6靶机渗透思路及方法&#xff08;个人分享&#xff09; 靶机下载地址&#xff1a; https://download.vulnhub.com/driftingblues/driftingblues6_vh.ova 靶机地址&#xff1a;192.168.67.25 攻击机地址&#xff1a;192.168.67.3 一、信息收集 …

分布式限流和本地限流那些事?

分布式限流和本地限流的目的是一样的&#xff0c;当然我建议技术人在自己的服务中优先考虑本地限流&#xff0c;那样对于自己的API的影响会小一点。 限流这种技术&#xff0c;在没有触发限流的阈值的时候&#xff0c;是不会有什么大的问题的&#xff0c;当时一旦触发阈值&…

在树莓派OS Bookworm中如何安装Python包

树莓派OS "Bookworm"版本&#xff0c;用于树莓派5上&#xff0c;更改了安装Python模块的方法。 关键要点&#xff1a; 1&#xff09;树莓派OS Bookworm需要在一个虚拟环境中安装Python包来防止与Python的系统版本发生冲突。 2&#xff09;你可以使用apt包管理器来搜…

如何在群辉NAS使用Docker搭建容器魔方并实现无公网ip远程访问

文章目录 1. 拉取容器魔方镜像2. 运行容器魔方3. 本地访问容器魔方4. 群辉安装Cpolar5. 配置容器魔方远程地址6. 远程访问测试7. 固定公网地址 本文主要介绍如何在群辉7.2版本中使用Docker安装容器魔方&#xff0c;并结合Cpolar内网穿透工具实现远程访问本地网心云容器魔方界面…

商品源数据如何采集,您知道吗?

如今&#xff0c;电子商务已经渗透到了人们生活的方方面面。2020年新冠肺炎突如其来&#xff0c;打乱了人们正常的生产生活秩序&#xff0c;给经济发展带来了极大的影响。抗击疫情过程中&#xff0c;为避免人员接触和聚集&#xff0c;以“无接触配送”为营销卖点的电子商务迅速…

【数据结构】7大排序最详细

0.前言 接下来进入排序&#xff0c;我们知道在c语言阶段可能就学习过了像冒泡排序&#xff0c;选择排序这种比较简单的排序&#xff0c;那么接下来我们就会学习到更加高级的排序算法。但高级代表着难度的提升&#xff0c;但不用担心&#xff0c;博主会细细来谈&#xff0c;慢慢…

使用Rider C# Dll工程和Unity工程互相调用、断点方法

总体流程 创建C# Dll工程&#xff0c;生成C#工程Dll 创建Unity工程 Unity调用C#工程的代码 C#工程调用Unity工程的代码 断点方法 创建C# Dll工程&#xff0c;生成C#工程Dll 创建工程 选这个&#xff0c;注意UnityEngineDll这个选项&#xff0c;要选你目标unity版本的Dll…

【【深入浅出了解静态时钟分析和时钟约束】】

深入浅出了解静态时钟分析和时钟约束 时序分析是什么&#xff1f; 我们提出一些特定的时序要求&#xff08;或者说是添加特定的时序约束&#xff09;&#xff0c;使用特定的时序模型&#xff0c;针对特定的电路进行分析。分析的最终结果是要求系统时序满足我们提出的要求。 这…

MySQL的三种存储引擎 InnoDB、MyISAM、Memory

InnoDB 1). 介绍 InnoDB是一种兼顾高可靠性和高性能的通用存储引擎&#xff0c;在 MySQL 5.5 之后&#xff0c;InnoDB是默认的MySQL 存储引擎。 2). 特点 DML操作遵循ACID模型&#xff0c;支持事务&#xff1b; 行级锁&#xff0c;提高并发访问性能&#xff1b; 支持外键F…

云渲染是什么?云渲染有什么用?云渲染对本地的渲染的影响有哪些?

如果你曾经在深夜加班&#xff0c;眼睁睁看着电脑显卡冒着烟、渲染器哭着喊着把你的CPU和GPU当成磨盘来使用&#xff0c;那么你可能会对云渲染心生向往。毕竟&#xff0c;谁不想在享用最新游戏画面和电影级效果的同时&#xff0c;不用忍受电脑发热、卡顿等问题呢&#xff1f; 云…

What does “grep -i“ do?

grep&#xff08; Global Regular Expression Print &#xff09;根据 给定的正则表达式 搜索文本&#xff0c;并将匹配的行打印出来 grep -i 表示查找的过程中忽略大小写 在已安装的rpm包里&#xff0c;查询是否有tree相关的包 rpm -qa | grep -i "tree"在文件中搜…

在Vivado下利用Tcl实现IP的高效管理

在Vivado下利用Tcl实现IP的高效管理https://cloud.tencent.com/developer/article/1736645 在Vivado下&#xff0c;有两种方式管理IP。一种是创建FPGA工程之后&#xff0c;在当前工程中选中IP Catalog&#xff0c;生成所需IP&#xff0c;这时相应的IP会被自动添加到当前工程中&…