TCP/IP 五层协议模型

转载大佬文章

我们每天使用互联网,本质上是在传输/接收各种数据,具体如何传输则是按照一系列互联网协议进行的。我们常说的网络七层模型,五层模型,四层模型都是对数据传输过程做了细化的分层。

按照五层模型比较好理解,并且理解每一层的功能主要是理解每一层的协议,如图是从【客户端】发送数据,经过应用层–》传输层–》网络层–》数据链路层–》物理层这 五层协议的处理,转化为物理的光电信号传输。【服务端】接收到之后再逆向顺序按照每层的协议逆向分析出数据。

分层的意义是为了封装,每一层都有自己特有的功能,上层协议可以使用下层协议的功能,上层的变动完全不涉及下层的结构

在这里插入图片描述

一、自下向上的系统的角度

1、物理层

将计算机用物理设备链接,使用网络物理方式传输0/1 序列,其中物理设备主要包含光缆、电缆、双绞线、无线电波等。

2、数据链路层

最终数据是按照0/1 序列进行传输的,0/1序列如何解读和分组,就是『数据链路层』的功能。
作用于该层功能的协议:以太网协议

3、网络层

每个计算机接入网络后都分配一个 IP 地址,我们如何找到具体的计算机节点就是『网络层』的功能。
作用于该层功能的协议:IP 协议、ARP协议、ICMP协议

4、传输层

每个计算机上都运行着多个程序,每个程序都有唯一的端口号,我们如何找到具体某个程序来接收和发送数据就是『传输层』的功能。
作用于该层功能的协议:TCP 协议、UDP协议

5、应用层

用户唯一能接触到的一层,应用之间的数据链接协议,规定应用程序的数据格式就是『应用层』的功能。例如浏览器向服务发送HTTP请求时,就必须按照Http 协议规定的格式发送数据。
作用于该层功能的协议:HTTP 协议、DHCP协议、FTP协议、SMTP协议

二、每层协议功能详细说明

1、物理层

将计算机用物理设备链接,使用网络物理方式传输0/1 序列。
其中物理设备主要包含光缆、电缆、双绞线、无线电波等。也是我们物理上能观察到的。
在这里插入图片描述

2、数据链路层

『数据链路层』的功能就是针对 0/1序列解读和分组。

1.以太网协议

以太网规定:一组0/1电信号构成一个数据包,叫做帧,每一帧包含标头(Head)和数据体(Data)
在这里插入图片描述
标头包含了数据类型,发送者和接受者等信息。
"标头"的长度,固定为18字节,"数据"的长度,最短为46字节,最长为1500字节,整个"帧"最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送

2.MAC 地址

上面提到数据包标头中包含了发送者和接受者信息,发送和接受的设备都有其唯一标识(网卡地址,MAC地址),每块网卡出厂的时候,都有唯一的MAC地址,长度是48个二进制位,通常用12个十六进制数表示,就可以定位网卡和数据包的路径了。

3.广播

如果都知道了发送和接受设备的MAC地址了,如何做到一对一准确传输呢?
以太网采用一种很"原始"的方式,他会向子网内的所有设备进行广播📢,接收的机器判断自己的 MAC 地址和标头中的 MAC 地址是否相等,相等则接收数据,否则丢弃数据。
在这里插入图片描述
上面广播方式时默认了发送者是知道接收者的MAC地址的。那如何获取接受者的 MAC 地址呢?这个是根据网络层的ARP 协议获取的。

3、网络层

数据链路层中以太网以广播的形式传输,如果北京和巴黎两台计算机处于同一子网内时,两者进行通信时,如果还是采用这种广播的方式,那就造成资源浪费和十分低效,所以两者肯定不能存在同一子网范围内 (只是包含了附近少量的设备)。那么如何区分多个设备是属于同一子网内呢?
我们知道,MAC 地址只与物理设备有关,与网络无关,所以这是网络层的功能。
网络层引进一套新的地址,使我们能够区分两台设备是否处于同一子网络,这个地址简称 『网络地址』

1.IP 协议

IP 协议功能是为每一个计算机分配网络地址,并且判断哪些网络地址属于同一子网络。 它所定义分配的地址,就被称为IP地址。(注意:IP 地址是IP 协议定义的网络地址的称呼,IP 协议则是一套协议)。

IPv4规定,网络地址由32个二进制位组成,从0.0.0.0一直到255.255.255.255,互联网上的每一台计算机,都会分配到一个IP地址。这个地址分成两个部分,前一部分代表网络,后一部分代表主机,如何区分哪部分是主机部分,需要用到另一个参数"子网掩码",形式上等同于IP地址,网络部分全部为1,主机部分全部为0,将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中。

例如:
已知IP地址172.16.254.1和172.16.254.233的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,结果都是172.16.254.0,因此它们在同一个子网络。

2.IP 数据包

根据 IP协议发送的数据包就成为IP 数据包,IP数据包也分为"标头"和"数据"两个部分。数据部分直接放进以太网数据包的"数据"部分 ,标头部分增加IP地址信息(完全不用修改以太网的规格。这就是互联网分层结构的好处:上层的变动完全不涉及下层的结构)。
在这里插入图片描述

3.ARP 协议

ARP 协议(地址解析协议)主要负责 IP 地址和 MAC 地址的映射关系解析。
ARP协议也是发出一个数据包(包含在以太网数据包中,这里也体现了:上层协议可以使用下层协议的功能),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个"广播"地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。

4、传输层

有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。
但是每个计算机上都运行着多个程序,还需要一个参数表示每个程序的唯一性。这个参数就叫做"端口"(port)。

"端口"是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。

“网络层"的功能是建立"主机到主机"的通信,“传输层"的功能是建立"端口到端口"的通信。那么如何将端口信息加到数据报中呢,使用了下面的协议。

1.UDP 协议

用户数据报协议,也是由"标头"和"数据"两部分组成,"标头"部分主要定义了发出端口和接收端口。"数据"部分就是具体的内容。然后,把整个UDP数据包放入IP数据包的"数据"部分,而前面说过,IP数据包又是放在以太网数据包之中的,所以整个以太网数据包现在变成了下面这样。
在这里插入图片描述

2.TCP 协议

传输控制协议。
对比UDP协议,TCP 协议提供了建立连接的可靠传输,可靠性强,实现复杂。
详细内容后面讲。

5、应用层

应用层主要功能就是规定应用程序的数据格式。
举例来说,TCP协议可以为各种各样的程序传递数据,比如 Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了"应用层"。

1. DHCP

计算机每次开机都会动态分配一个 IP 地址,DHCP 协议就是实现这个过程的(动态主机分配协议)
该协议规定,子网内有一台计算机专门负责管理本网络的IP地址,这台主机称为 DHCP 服务器,每台计算机开始接入网络时,回动态的向服务器发送一个『DHCP数据包』来申请IP地址和相关的网络参数。
在这里插入图片描述

DHCP 协议是基于UDP协议的应用层协议,其『DHCP数据包』 格式如上:

(1)以太网标头中存放本机MAC 地址、DHCP服务器 MAC 地址(此时还不知道,设置为广播地址:FF-FF-FF-FF-FF-FF)
(2)IP 标头中存放发出方和接收方的 IP 地址,两者都不知,前者:0:0:0:0,后者:255:255:255:255
(3)UDP标头中存放发出方的端口和接收方的端口。这一部分是DHCP协议规定好的,发出方是68端口,接收方是67端口

以太网是广播发送的,每台计算机都收到请求,拿到广播的 MAC 地址时,都不确定。所以必须要解析 IP地址,当看到发出方IP地址是0.0.0.0,接收方是255.255.255.255,于是DHCP服务器知道"这个包是发给我的",而其他计算机就可以丢弃这个包

接下来,DHCP服务器解析这个包的数据,发送回去一个"DHCP响应"数据包,以同样的格式,分配的 IP 和网络信息都在 DATA 中。至此,新加入的计算机收到这个响应包,于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数。

2.HTTP协议

HTTP协议是基于 TCP 的应用层协议。
在这里插入图片描述
HTTP格式如下:

   GET / HTTP/1.1Host: www.google.comConnection: keep-aliveUser-Agent: Mozilla/5.0 (Windows NT 6.1)Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8Accept-Encoding: gzip,deflate,sdchAccept-Language: zh-CN,zh;q=0.8Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3Cookie: … …

我们假定这个部分的长度为4960字节,它会被嵌在TCP数据包之中。

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

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

相关文章

操作系统启动相关概念(BIOS、MBR、GPT、BRUB)

不管是 Windows 还是 Linux 操作系统,底层设备一般均为物理硬件,操作系统启动之前会对硬件进行检测,然后硬盘引导启动操作系统,如下为操作系统启动相关的各个概念。 一、BIOS 基本输入输出系统(Basic Input Output Sy…

牛客网-刷SQL(10)

题目:现在运营想要找到每个学校gpa最低的同学来做调研,请你取出每个学校的最低gpa。 示例:user_profile iddevice_idgenderageuniversitygpaactive_days_within_30question_cntanswer_cnt12138male21北京大学3.4721223214male复旦大学41552…

近期总结的一些TypeScript小tip

const vs readonly const 用于修饰变量&#xff0c;readonly 用于变量的属性 const x: boolean;const x: {readonly a: boolean; } {a: true; };对于数组&#xff0c;const 只能保证地址不改动&#xff0c;ReadonlyArray<Number>则可以直接禁用 push/pop never vs un…

基于Java+SpringBoot+vue前后端分离校园周边美食探索分享平台设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

opencv-19 图像色彩空间转换函数cv2.cvtColor()

cv2.cvtColor() 函数是 OpenCV 中用于图像颜色空间转换的函数。它允许你将图像从一个色彩空间转换为另一个色彩空间。在 Python 中&#xff0c;你可以使用这个函数来实现不同色彩空间之间的转换。 函数的基本语法为&#xff1a; cv2.cvtColor(src, code[, dst[, dstCn]])参数…

leetcode5. 最长回文子串(Manacher - java)

Manacher回文算法 leetcode5. 最长回文子串Manacher 算法 manacher 算法 leetcode5. 最长回文子串 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s “…

NestJS 的 中间件 学习

基本概念 中间件是在路由处理程序之前调用的函数。中间件函数可以访问请求和响应对象。在程序中我们可以让多个中间件串起来一起使用&#xff0c;当多个中间件一起使用时我们可以使用next()调用下一个中间件。 中间件主要是可以实现如下功能&#xff1a; 执行任何代码更改请…

CentOS7.9.离线安装Docker

CentOS 7上离线安装Docker 下载适用于CentOS 7的Docker安装包&#xff1a; https://download.docker.com/linux/static/stable/x86_64/将下载的 docker-24.0.4.tgz 文件上传到CentOS 7系统。例如&#xff0c;可以上传到 /root 目录下。 解压 docker-24.0.4.tgz 文件&#xff…

搭建关键字驱动自动化测试框架

前言 上篇文章我们已经了解到了数据驱动自动化测试框架是如何构建和驱动测试的&#xff01;那么这篇文章我们将了解关键字驱动测试又是如何驱动自动化测试完成整个测试过程的。关键字驱动框架是一种功能自动化测试框架&#xff0c;它也被称为表格驱动测试或者基于动作字的测试…

Windows10 下 Neo4j1.5.8 安装教程

前言 Neo4j 是一个高性能的、NOSQL 图形数据库&#xff0c;它将结构化数据存储在网络上而不是表中。基于磁盘的、具备完全的事务特性的 Java 持久化引擎&#xff0c;这里就不把他和常用关系型数据库做对比了。因为篇幅有限&#xff0c;我这里也是第一次使用&#xff0c;所以以…

elasticsearch报错问题

标题1.报错问题 标题2.新建一个配置类 package cn.itcast.hotel.config;import org.apache.http.HttpHost; import org.apache.http.client.config.RequestConfig; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import o…

【Linux】Tcp协议的通讯流程,浅谈三次握手四次挥手

文章目录 Tcp协议的通讯流程一、协议定制与网络版计算器的实现二、json的使用总结 Tcp协议的通讯流程 上一篇文章我们讲解了如何实现Tcp服务器&#xff0c;Tcp的接口也用了&#xff0c;下面我们就看一下Tcp协议的通讯流程&#xff1a; 在服务端&#xff0c;我们首先要创建一个…

电脑C盘空间大小调整 --- 扩容(扩大/缩小)--磁盘分区大小调整/移动

概述&#xff1a; 此方法适合C盘右边没有可分配空间&#xff08;空闲空间&#xff09;的情况&#xff0c;D盘有数据不方便删除D盘分区的情况下&#xff0c;可以使用傲梅分区助手软件进行跨分区调整分区大小&#xff0c;不会损坏数据。反之可直接使用系统的磁盘管理工具进行调整…

Flutter学习—— Vscode创建项目

目录 一、Vscode创建项目 二、补充五种项目类型 Application: Module 模块开发&#xff0c; Package开发 Plugin 插件开发 Skeleton 骨架开发 一、Vscode创建项目 1.快捷键 CtrlShiftP 打开命令面板&#xff0c;选择新项目 2.选择需要开发的项目类型 Application 应用开…

39岁硕士找工作因年龄被卡?招聘单位否认

年龄限制问题在求职市场中是一个备受关注的话题。 近日&#xff0c;一位39岁的硕士徐先生在求职过程中遇到了年龄限制的问题&#xff0c;这一经历引发了人们对于年龄限制的探讨。 我们先来明确一下年龄限制的含义。 年龄限制是指在一些职业或领域中&#xff0c;对于应聘者的年龄…

Python代码片段之Django静态文件URL的配置

首先要说明这段python代码并不完整&#xff0c;而且我也没有做过测试&#xff0c;只是我在工作时参考了其中的一些个方法。这是我在找python相关源码资料里看到的一段代码&#xff0c;是Django静态文件URL配置代码片段2&#xff0c;代码中有些方法还是挺技巧的&#xff0c;做其…

Tomcat 的使用(图文教学)

Tomcat 的使用&#xff08;图文教学&#xff09; 前言一、什么是Tomcat&#xff1f;二、Tomcat 服务器和 Servlet 版本的对应关系三、Tomcat 的使用1、安装2、目录介绍3、如何启动4、Tomcat 的停止5、如何修改 Tomcat 的端口号6、如何部暑 web 工程到 Tomcat 中6.1 方式一6.2 …

红队打靶:Nullbyte打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现与端口扫描 第二步&#xff1a;Web渗透 第三步&#xff1a;hydra密码爆破 第四步&#xff1a;SQL注入大赏 方法一&#xff1a;手工SQL注入之联合查询 方法二&#xff1a;SQL注入写入一句话木马 方法三&#xff1a;SQL注入写入…

C语言学习笔记 VScode设置C环境-06

目录 一、下载vscode软件 二、安装minGW软件 三、VS Code安装C/C插件 3.1 搜索并安装C/C插件 3.2 配置C/C环境 总结 一、下载vscode软件 在官网上下载最新的版本 Download Visual Studio Code - Mac, Linux, Windowshttps://code.visualstudio.com/download 二、安装minGW…

测试覆盖率 JVM 字节码测试运用 - 远程调试、测试覆盖、影子数据库

目录 前言&#xff1a; 简介 基础使用方式介绍 工具特性 前言&#xff1a; 在软件开发中&#xff0c;测试覆盖率是一个非常重要的指标&#xff0c;它表示代码中所有的测试用例是否都已经被覆盖到。JVM 字节码测试是一种比较新的测试方法&#xff0c;它可以对 JVM 字节码进…