TCP/IP 五层协议模型

news2024/10/10 22:23:37

转载大佬文章

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

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

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

在这里插入图片描述

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

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.1
  Host: www.google.com
  Connection: keep-alive
  User-Agent: Mozilla/5.0 (Windows NT 6.1) …
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
  Accept-Encoding: gzip,deflate,sdch
  Accept-Language: zh-CN,zh;q=0.8
  Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
  Cookie: … …

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

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

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

相关文章

Amazon Redshift Serverless – 现已正式推出新功能

去年在 re:Invent 上,我们推出了 Amazon Redshift Serverless 的预览版,这是 Amazon Redshift 的无服务器选项,可让您分析任何规模的数据,而无需管理数据仓库基础设施。您只需要加载和查询数据,并且只需为使用的内容付…

C语言动态内存管理(三)

目录 五、C/C程序的内存开辟1.图解2.关键点 六、柔性数组1.什么是柔性数组2.两种语法形式3.柔性数组的特点4.柔性数组的创建及使用在这个方案中柔性数组的柔性怎么体现出来的? 5.不用柔性数组,实现数组可大可小的思路6.对比 总结 五、C/C程序的内存开辟 1.图解 &a…

上手 SpringBoot

简介 SpringBoot设计的目的是简化 Spring应用的初始搭建以及 开发过程。 SpringBoot概述 parent 继承父pom文件,方便管理依赖的版本。此处涉及maven的使用 作用: 继承parent的形式可以采用引入依赖的形式实现效果 starter(原理是依赖传递) 包含了若…

C语言include学习

#include叫做文件包含命令&#xff0c;用来引入对应的头文件&#xff08;.h文件&#xff09;。 #include 也是C语言预处理命令的一种。 一个简单程序&#xff0c; #include <stdio.h>int main() {printf("hello world\n");return 0; } 使用printf()函数需要…

从虚拟现实到真实现实:沉浸式体验的未来 (ps beta)

首先&#xff0c;您需要创建一个免费的Adobe账户&#xff0c;如果您还没有一个账户的话。您可以在Adobe的注册页面上填写必要的信息来创建一个新账户。 Adobe: Creative, marketing and document management solutions login 创建账号&#xff1a; 编一个google邮箱&#xf…

F5 LTM 知识点和实验 1-BIG-IP 系统介绍

第一章&#xff1a;BIG-IP 系统介绍 基于包转发和全代理架构的区别&#xff08;packet-based vs full proxy architeture&#xff09; 一个网络设备如果是基于包转发的&#xff0c;则他是一个会话流&#xff08;communication stream&#xff09;的中间设备&#xff0c;而不是…

Atcoder Beginner Contest 311 C - E题讲解

C - Find it! 1. Description Problem Statement There is a directed graph with N N N vertices and N N N edges. The i i i-th edge goes from vertex i i i to vertex A i A_i Ai​. (The constraints guarantee that i ≠ A i i \neq A_i iAi​.) Find a dire…

记负均正 C语言实现

记负均正 描述 首先输入要输入的整数个数n&#xff0c;然后输入n个整数。输出为n个整数中负数的个数&#xff0c;和所有正整数的平均值&#xff0c;结果保留一位小数。 0即不是正整数&#xff0c;也不是负数&#xff0c;不计入计算。如果没有正数&#xff0c;则平均值为0。 数…

【C++】-多态的语法细节详解

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

软路由系统 --- iKuai虚拟机修改虚拟机网卡类型

软路由系统&#xff1a;iKuai 注意&#xff1a;2.0系列及以后版本&#xff0c;默认安装成功后只是绑定了LAN口&#xff0c;其他的接口需要自己进爱快的WEB界面手工绑定。 虚拟机网卡类型说明&#xff1a; 个人版vmware 建议选择Linux ubuntu64位&#xff0c;否则默认网卡类型…

MySQL 数据抽稀 每分钟取一条

假如原始数据为每5秒一个数据&#xff0c;现在想展示为每4分钟一条数据&#xff0c;先按照分钟数把除以4余数为0的行选出来&#xff0c;在按照 年月日 时分&#xff0c;做组内排序&#xff08;窗函数ROW_NUMBER&#xff09;&#xff0c;最后再拿出序号为1的行。 WITH data_01 …

基于SpringBoot+vue的私人健身与教练预约管理系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

谈谈区块链技术

目录 1.什么是区块链 2.区块链的实现原理 3.区块链技术有哪些应用 4.区块链技术潜在的危害 5.区块链技术未来会怎么发展 1.什么是区块链 区块链是一种技术&#xff0c;它通过在一个分布式网络中记录和验证交易和数据&#xff0c;实现去中心化的数字账本。区块链的核心概念是…

读数据压缩入门笔记11_读后总结与感想兼导读

1. 基本信息 数据压缩入门 Understanding Compression [美]柯尔特麦克安利斯&#xff08;Colt McAnlis&#xff09;、[美]亚历克斯海奇 著&#xff1b; 王凌云 译 人民邮电出版社,2020年4月出版&#xff0c;1版 1.1. 读薄率 书籍总字数300千字&#xff0c;笔记总字数18197…

Linux用户权限

1.用户、权限、组的概念 1.1 用户 用户 是Linux系统工作中重要的一环&#xff0c;在Linux系统中&#xff0c;不论是由本机或是远程登录系统&#xff0c;每个系统都必须拥有一个账号&#xff0c;一个账号就是一个用户。 1.2 权限 在Linux系统中&#xff0c;每一个用户对不同…

汇编语言(第4版)实验5 编写、调试具有多个段的程序

&#xff08;1&#xff09;参考答案&#xff1a; ①不变&#xff08;0123h,0456h,0789h,0abch,0defh,0cabh,0987h&#xff09; ②076c 076b 076a ③X-2 X-1 &#xff08;2&#xff09;参考答案&#xff1a; ①不变&#xff08;0123h,0456h&#xff09; ②076c 076b 076a ③X-2…

AcWing 1275. 最大数—线段树单点修改

题目链接 AcWing 1275. 最大数 题目描述 分析 这道题是线段树的模板题&#xff0c;属于一眼ding真&#xff0c;鉴定为线段树的裸题&#xff0c;正好用来学习线段树。线段树、树状数组等数据结构题&#xff0c;难的地方是在如何分析出来要用哪个数据结构解决。 线段树要比树状…

上海VR全景展示,快速了解VR全景拍摄

导语&#xff1a; 随着科技的不断进步&#xff0c;虚拟现实技术的应用日益广泛。在这其中&#xff0c;VR全景图片作为一种数字化助力的全景拍摄方式&#xff0c;正逐渐成为人们关注的焦点。通过数字化技术&#xff0c;VR全景图片能够以360度全方位的视角呈现真实的场景&#x…

docker学习和进阶2023

文末有下载地址。如有侵权请联系作者谢谢&#xff01; docker学习和进阶2023 参考引用 docker学习笔记&#xff1a;https://blog.csdn.net/m0_46188681/article/details/128993319 Docker容器配置和资源限制&#xff1a;https://www.cnblogs.com/xiugeng/p/16254087.html 容…

idea使用命令将jar包导入到maven仓库中

因为今天突然忘了命令&#xff0c;记下来方便以后查看 pom文件的依赖 jar包路径 进入idea中命令窗 输入命令 mvn install:install-file -DfileD:\Project\spring-cloud\dubbo-api\target\dubbo-api-1.0-SNAPSHOT.jar -DgroupIdcom.wmx -DartifactIddubbo-api -Dversion1.0…