145 Linux 网络编程1 ,协议,C/S B/S ,OSI 7层模型,TCP/IP 4层模型,

一 协议的概念

从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。

典型协议

传输层 常见协议有TCP/UDP协议。

应用层 常见的协议有HTTP协议,FTP协议。

网络层 常见协议有IP协议、ICMP协议、IGMP协议。

网络接口层 常见协议有ARP协议、RARP协议。

TCP传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

UDP用户数据报协议(User Datagram Protocol)是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

HTTP超文本传输协议(Hyper Text Transfer Protocol)是互联网上应用最为广泛的一种网络协议。

FTP文件传输协议(File Transfer Protocol)

IP协议是因特网互联协议(Internet Protocol)

ICMP协议是Internet控制报文协议(Internet Control Message Protocol)它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。

IGMP协议是 Internet 组管理协议(Internet Group Management Protocol),是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间。

ARP协议是正向地址解析协议(Address Resolution Protocol),通过已知的IP,寻找对应主机的MAC地址。

RARP是反向地址转换协议,通过MAC地址确定IP地址。

OSI七层模型

  1. 物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
  2. 数据链路层:定义了如何让格式化数据以帧为单位进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。如:串口通信中使用到的115200、8、N、1
  3. 网络层:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。
  4. 传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。
  5. 会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。
  6. 表示层:可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。
  7. 应用层:是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。

TCP/IP四层模型

TCP/IP网络协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)和链路层(Link)四层。如下图所示:

通信过程

两台计算机通过TCP/IP协议通讯的过程如下所示:

上图对应两台计算机在同一网段中的情况,如果两台计算机在不同的网段中,那么数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器,如下图所示:

TCP是一种面向连接的、可靠的协议,有点像打电话,双方拿起电话互通身份之后就建立了连接,然后说话就行了,这边说的话那边保证听得到,并且是按说话的顺序听到的,说完话挂机断开连接。也就是说TCP传输的双方需要首先建立连接,之后由TCP协议保证数据收发的可靠性,丢失的数据包自动重发,上层应用程序收到的总是可靠的数据流,通讯之后关闭连接。

UDP是无连接的传输协议,不保证可靠性,有点像寄信,信写好放到邮筒里,既不能保证信件在邮递过程中不会丢失,也不能保证信件寄送顺序。使用UDP协议的应用程序需要自己完成丢包重发、消息排序等工作。

目的主机收到数据包后,如何经过各层协议栈最后到达应用程序呢?其过程如下图所示:

以太网驱动程序首先根据以太网首部中的“上层协议”字段确定该数据帧的有效载荷(payload,指除去协议首部之外实际传输的数据)是IP、ARP还是RARP协议的数据报,然后交给相应的协议处理。假如是IP数据报,IP协议再根据IP首部中的“上层协议”字段确定该数据报的有效载荷是TCP、UDP、ICMP还是IGMP,然后交给相应的协议处理。假如是TCP段或UDP段,TCP或UDP协议再根据TCP首部或UDP首部的“端口号”字段确定应该将应用层数据交给哪个用户进程。IP地址是标识网络中不同主机的地址,而端口号就是同一台主机上标识不同进程的地址,IP地址和端口号合起来标识网络中唯一的进程。

虽然IP、ARP和RARP数据报都需要以太网驱动程序来封装成帧,但是从功能上划分,ARP和RARP属于链路层,IP属于网络层。虽然ICMP、IGMP、TCP、UDP的数据都需要IP协议来封装成数据报,但是从功能上划分,ICMP、IGMP与IP同属于网络层,TCP和UDP属于传输层。

协议格式

数据包封装

传输层及其以下的机制由内核提供,应用层由用户进程提供(后面将介绍如何使用socket API编写应用程序),应用程序对通讯数据的含义进行解释,而传输层及其以下处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示:

不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。

自己的理解和分析

我们从包裹的最后一段开始分析:红色部分的分析

以太网帧格式

以太网的帧格式如下所示:

ARP数据报的格式如下所示:

举例:

IP段格式

位置处于这里

一共20个字节

重要概念是:

版本就是IPV4/IPV6

TTL:time to live 表示在路由节点最大数,每经过一个路由节点,TTL减1,当TTL为0的时候,还没有到达目的网络,则网络丢弃该数据包。所以TTL的本质是设置数据包在路由节点中的跳转上限。TTL封装在 IP协议中的。

源IP      32 位---4字节     192.168.1.200---点分十进制的显示形式,本质上是string,要在网络上传输,需要转化成二进程

目的IP   32 位---4字节     192.168.1.200---点分十进制的显示形式,本质上是string,要在网络上传输,需要转化成二进程

TCP 数据包格式

位置处于这里

内容如下

TCP 的大小:最小为20个字节

最大为60个字节,在有“选项”的情况下,选项占用4-40个字节

TCP通信时序

下图是一次TCP通讯的时序图。TCP连接建立断开。包含大家熟知的三次握手和四次握手。

第一次客户端开始连接

SYN,1000(0),<mss 1460> :

                SYN 是专门用来建立通信的标志位

                1000 是包号,一般这个包号是从0开始,但是当前的图是从1000开始,

                (0)表示这个包所携带的数据的大小为0,因为这一条是专门建立通信的,因此这个包所携带的数据的大小肯定是0.

                <mss 1460>的意思是:告诉对方我所能接受的最大段大小。,为啥是1460?参见以太网帧格式 中最全的格式下是1500字节,然后有20字节的IP首部,20字节的TCP首部

第二次服务器端开始连接

SYN,8000(0),ACK 1001,<mss 1024>

SYN 表示服务器端要和客户端建立连接,SYN是专门建立通信的表示位。

8000 是服务器端的包号,

(0)表示服务器端带的数据大小是0,

ACK 表示服务器同一和客户端建立连接

1001 表示客户端发送的1001号前的数据包我都收到了。

<mss 1024> 告诉对方自己所能接受的最大段大小。

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

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

相关文章

作业-逆序和定位

目录 字符串逆序 题目描述 输入 输出 样例 解题思路&#xff1a; 单词倒排 题目描述 输入 输出 样例 解题思路&#xff1a; 首字母大写 题目描述 输入 输出 样例 解题思路&#xff1a; 统计句子中单词个数 题目描述 输入 输出 样例 解题思路&#xff1a; 大小写字母互换 题目描…

springboot“涛宝”大学生二手物品交易商城

摘 要 二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针对这一…

Kubernetes operator系列:webhook 知识学习

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Kubernetes operator学习 系列文章&#xff0c;本节会对 kubernetes webhook 知识进行学习 本文的所有代码&#xff0c;都存储于github代码库&#xff1a;https://github.com/graham924/share-code-operator-st…

免费接口调用 招标信息自动抽取|招标信息|招标数据解析接口

一、开源项目介绍 一款多模态AI能力引擎&#xff0c;专注于提供自然语言处理&#xff08;NLP&#xff09;、情感分析、实体识别、图像识别与分类、OCR识别和语音识别等接口服务。该平台功能强大&#xff0c;支持本地化部署&#xff0c;并鼓励用户体验和开发者共同完善&#xf…

浅谈性能测试中的基准测试

在性能测试中有一种测试类型叫做基准测试。这篇文章&#xff0c;就聊聊关于基准测试的一些事儿。 1、定义 通过设计合理的测试方法&#xff0c;选用合适的测试工具和被测系统&#xff0c;实现对某个特定目标场景的某项性能指标进行定量的和可对比的测试。 2、特质 ①、可重…

软件实例,餐厅酒水寄存管理系统软件,酒水寄存登记表软件操作教程

软件实例&#xff0c;餐厅酒水寄存管理系统软件&#xff0c;酒水寄存登记表软件操作教程 一、前言 以下软件操作以 佳易王酒水寄存管理系统软件V16.0为例说明 件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、酒水寄存管理系统软件可以管理多个品类的物…

SendMessage 和 PostMessage 有什么区别?

SendMessage和PostMessage都是Windows编程中用于进程间通信或同一进程内不同线程间通信的函数&#xff0c;用于向窗口发送消息。尽管这两个函数的目的相似&#xff0c;但它们在实现方式和行为上存在一些关键差异。 同步与异步&#xff1a; SendMessage是一个同步消息发送函数。…

用 C 语言模拟 Rust 的 Result 类型

在 Rust 中&#xff0c;Result<T, E> 类型是一个枚举&#xff0c;它表示一个操作可能成功并返回一个值 T&#xff0c;或者失败并返回一个错误 E。在 C 语言中&#xff0c;没有直接对应的 Result 类型&#xff0c;但我们可以使用结构体和枚举来模拟它。 下面是一个用 C 语…

AI健身教练-引体向上-俯卧撑计数-仰卧起坐姿态估计-康复训练姿态识别-姿态矫正

在AI健身应用中&#xff0c;通过关键点检测技术可以实现对用户动作的精准捕捉和分析&#xff0c;从而进行统计计数和规范性姿态识别。 统计计数&#xff1a;比如在做瑜伽、健身操等运动时&#xff0c;系统可以通过对人体关键点&#xff08;如手部、脚部、关节等&#xff09;的…

复习 --- windows 上安装 git,使用相关命令

文章目录 很少使用windows的git工具&#xff0c;这次借助这个任务&#xff0c;记录下使用过程&#xff0c;其他的等有空在整理。 其中&#xff0c;还使用了浏览器的AI小助手&#xff0c;复习了git相关的命令&#xff1a;图片放最后

ROS——集成开发环境搭建

1.4 ROS集成开发环境搭建 和大多数开发环境一样&#xff0c;理论上&#xff0c;在 ROS 中&#xff0c;只需要记事本就可以编写基本的 ROS 程序&#xff0c;但是工欲善其事必先利其器&#xff0c;为了提高开发效率&#xff0c;可以先安装集成开发工具和使用方便的工具:终端、ID…

C++ 虚函数表

虚函数表 当一个类中声明了虚函数时&#xff0c;这个函数在编译时会被标记为虚函数&#xff0c;并且对应的虚函数表中会为这个类生成一个虚函数表&#xff1b; 当基类指针指向派生类对象时&#xff0c;如果这个函数被调用&#xff0c;实际上调用的是派生类中的函数。这是因为…

Vue2(四):Vue监测数据的原理(对象,数组),Vue.set的使用方法

一、更新时的一个问题 如果我要点击按钮实现更新冯万宁儿的信息&#xff0c;那么如果一个属性一个属性地改&#xff0c;可以修改成功&#xff0c;并且Vue也会检测到并更新到页面。 但是我如果直接把要修改的信息写在this.persons[0] { id: 001, name: 冯千宁儿, age: 66, se…

Android Studio中快速修改包名

Android Studio中快速修改包名 假设原包名是com.abc.efg&#xff0c; 新包名是com.aaa.bbb 1、点击齿轮图标&#xff0c;把Compact Middle Packages前面的对勾取消&#xff0c;如果没有就忽略此步 2、在左侧项目栏中&#xff0c;选择Android, App-->java-->com,下面可以看…

SpringBoot程序的核心功能及优点

本篇博客主要记录SpringBoot程序的核心功能及优点&#xff1a; 起步依赖&#xff08;简化依赖配置&#xff09; 依赖配置的书写简化就是靠这个起步依赖达成的。 自动配置&#xff08;简化常用工程相关配置&#xff09; 配置过于繁琐&#xff0c;使用自动配置就可以做相应的简化…

教程:如何制作和分享自定义GPT

自定义GPT教程&#xff1a;如何制作和分享 引言 人工智能领域不断发展&#xff0c;引入了改变我们与科技互动方式的创新工具。在这些创新中&#xff0c;自定义生成式预训练变压器&#xff08;GPT&#xff09;的出现尤为引人注目。这些AI模型超越了标准ChatGPT的功能&#xff…

YOLOv9算法原理——使用可编程梯度信息学习想要学习的内容

前言 2023年1月发布YOLOv8正式版后&#xff0c;经过一年多的等待&#xff0c;YOLOv9终于面世了&#xff01;YOLO是一种利用图像全局信息进行目标检测的系统。自从2015年Joseph Redmon、Ali Farhadi等人提出了第一代模型以来&#xff0c;该领域的研究者们已经对YOLO进行了多次更…

k8s HPA 自动伸缩机制 (配置,资源限制,)

目录 一、概念 核心概念 工作原理 HPA 的配置关键参数 关键组件 使用场景 注意事项 如何确保程序稳定和服务连续 二、metrics-server 部署 metrics-server 准备 metrics-server 镜像: 使用 Helm 安装 metrics-server: 配置 metrics-server: 安装 metrics-server: …

EOS 与ESD 区别

ESD: 英文&#xff1a;Electrical Static Discharge&#xff1b; 定义&#xff1a;不同静电电位的两个物体之间的电荷转移&#xff1b;中文释为静电放电。静电是一种客观的自然现象&#xff1b; EOS&#xff1a; 英文&#xff1a;Electrical Over Stress 定义&#xf…

【算法】KY187 二进制数

https://www.nowcoder.com/ta/kaoyan 描述 大家都知道&#xff0c;数据在计算机里中存储是以二进制的形式存储的。 有一天&#xff0c;小明学了C语言之后&#xff0c;他想知道一个类型为unsigned int 类型的数字&#xff0c;存储在计算机中的二进制串是什么样子的。 你能帮帮小…