TCP/IP四层模型

article/2025/9/19 11:46:19

TCP/IP网络模型适用于不同设备上进程间的通信,共分为四层分,从上到下分别是应用层、传输层、网络层、网络接口层

应用层(Application Layer)

应用层是最上层的,我们能直接接触到的层,我们日常所使用的软件都是在应用层上实现的。

应用层不关心数据是如何传输的,就和我们寄快递的时候只需要把包裹交给快递员,我们不关心包裹是如何运输的。

协议

应用层的协议包括HTTP、FTP、Telnet、DNS、SMTP等。

传输层(Transport Layer)

传输层是为应用层提供网络支持的,在传输层有两个传输协议,分别是TCP和UDP。

TCP(Transmission Control Protocol)

TCP的全称是传输控制协议,大部分应用传输层协议使用的都是TCP,TCP为了保证数据能够可靠的传输到目的地,有流量控制、超时重传、拥塞控制等特性。

UDP(User Datagram Protocol)

UDP全称是用户报文协议,UDP相对TCP来说就很简单,只负责发送数据包,至于数据包能否正常抵达目的地,UDP不能保证;但是换一个角度来说,UDP少干了这么多,那他的实时性相对TCP来说更好,传输效率也更高。

通常来说一台设备上会运行多个应用进程,为了区分数据要发送的具体进程,传输层中需要指定端口号来区分不同的进程和应用。

网络层(Internet Layer)

负责将数据从一个设备发送到另一个设备的并不是传输层,传输层设计的理念是,简单、高效、专注,实际场景中的网络环节错综复杂,网络层就来是负责数据实际传输。

网络层最常用的是IP协议(Internet Protocol),IP协议会将传输层的报文作为数据部分,再加上IP数据包组装成IP报文。

网络层负责将数据从一个设备传输到另一个设备,而为了确定目标设备,网络层需要有区分设备单的编号,这个编号就是IP地址。

对于IPv4协议,IP地址共32位(32个bit),共分成四段(例如:192.168.1.1),每段8位。如果只有单纯的IP地址,虽然做到了设备区分,但是殉职起来就特别麻烦,世界上那么多设备,一个个去匹配显然是非常不科学的。

因此需要借助子网掩码来将IP地址分为两种意义:

  • 一个是网络号,负责标识IP地址是属于哪一个[子网]的;
  • 一个是主机号,负责标识同一子网下的不同主机;

举个栗子,比如192.168.1.1/24,后面的/24表示的就是子网掩码255.255.255.0,255.255.255.0 二进制是「11111111-11111111-11111111-00000000」,其中共有24个1,为了简化子网掩码的表示,就用/24来代替。

网络号=IP地址按位与子网掩码

主机号=IP地址按位与子网掩码取反

网络接口层(Link Layer)

网络层生成完IP头部之后,接下来要交给网络接口层在IP头前面加上MAC头,并封装成数据帧(Data Frame)发送到网络上。

IP头中的接收方IP表示网络包的目的地,通过这个地址我们就可以判断要将包发送到那里,但是在以太网的世界中,这个思路行不通!

以太网是一种在局域网内,把附近的设备连接起来,使其可以互相通讯的技术。我们电脑上的以太网口、WiFi接口,以太网交换机、路由器上的千兆、万兆网口,还有网线,都是以太网的组成部分。

以太网判断网络包目的地的方式和IP不同,不需要采用互相匹配的方式才能在以太网中将包发往目的地,而MAC头就是干这个用的,所以在以太网进行通讯需要用到MAC地址。

MAC头是以太网使用的头,包含了发送方和接收方的MAC地址等信息,我们可以通过ARP协议获取对方的MAC地址。

所以网络接口层主要为网络提供链路级别的传输服务,负责在以太网、WiFi这样的底层网络上发送原始数据包,工作在网卡这个层次,使用MAC地址来别试网络中的设备。

总结

TCP/IP网络的四层结构总结如下图:

在这里插入图片描述

每一层的封装结构如下图:

在这里插入图片描述

网络接口层的传输单位是帧(frame),IP层的传输单位是包(package),TCP层的传输单位是段(segment),HTTP的传输单位则是消息或报文(message),这些单位其实并没有本质上的区别,可以统称为数据包。

参考

小林coding TCP/IP 网络模型有哪几层?


http://chatgpt.dhexx.cn/article/u2hqACOp.shtml

相关文章

互联网基石:TCP/IP 四层模型,由浅入深直击原理!

前言 TCP/IP 是迄今为止最常用的网络互联协议套件,在全球互联网运营方面发挥了巨大作用,可以这样说 TCP/IP 在互联网世界无处不在! TCP/IP 最初由 DARPA(美国国防高级研究计划局)的两位科学家于 1970 年代开发&#x…

「网络基础」TCP/IP协议4层模型,一分钟了解下

一、TCP/IP四层模型 1、网络接口层 2、互联网层 3、传输层 4、应用层 TCP/IP和OSI七层对应关系: OSI&TCP IP 应用层协议对应关系: 【了解】Dynamic Host Configuration Protocol (DHCP)/BootP(Bootstrap Protocol)动态主机配置协议(DHCP)服务器…

maven快速打包

maven快速打包 你是否打个包需要很长时间。如:15-20分钟。那可能是你的操作方式有问题。 慢速的打包方式: 每次都clean一下后,再重新打包。 我之前也是这样做的,每次打包都需要10分钟。 正确的快速打包方式: 不clea…

maven打包指定jdk的版本

文章目录 问题 问题 今天遇到个问题,项目中新写了一个接口,其中用到了lambda表达式,本地跑是没问题的,但提交到gitLab上,自动打包部署时却报错了(这是其他同事配置的),报错信息如下: 可以看出…

IDEA使用maven进行打包详细记录

前言 IDEA打包有两种方式&#xff1a; 1.build打包 2.maven打包 一开始用第一种方式build打包后运行报错&#xff0c;然后用第二种打包后运行成功。 特此记录一下&#xff0c;用maven进行打包&#xff01; 一、配置pom.xml文件 <build><plugins><plugin>…

MAVEN工具篇——maven打包跳过测试

使用Maven打包的时候&#xff0c;可能会因为单元测试打包失败&#xff0c;这时候就需要跳过单元测试。 Maven跳过单元测试主要可以分为三种方法。 一、命令行方式跳过测试 我们可以用两种命令来跳过测试 mvn clean install -DskipTestsmvn clean install -Dmaven.test.skiptr…

idea中Maven打包

1.环境依赖 jdk maven maven打包插件引入 1.1 maven打包&#xff0c;首先在pom文件中加上build属性&#xff0c;和dependencies是同级的&#xff1a; <build> <!--打包出来的文件名,可以不填写&#xff0c;有默认值--> <finalName>Test</fin…

maven打包时, 资源文件没有被打包进来的问题

问题起因 我们系统使用Mybatis作为持久层框架&#xff0c;这里不详细描述Mybatis框架的使用方法&#xff0c;我们讲述三种加载mapper的方式总结&#xff1a; <mapper resource"" />加载普通的xml文件&#xff0c;传入xml的相对路径(相对于类路径)<mapper c…

【Maven】通过maven对项目打包

文章目录 1.Maven项目打包操作1.1 独立模块1.2 子项目依赖公共模块 2. 知识拓展 1.Maven项目打包操作 首先&#xff0c;在使用maven插件对项目进行打包 首先需要导入一下pom依赖 <build><plugins><plugin><groupId>org.springframework.boot</grou…

MAVEN打包这一篇就够了

Maven打包说明 IDEA目录结构 Java代码从编码到最后运行到两个核心步骤为"编译"和"执行"。"编译"会根据"源代码"产出对应的".class"文件&#xff0c;而"执行"就是让程序运行起来&#xff0c;运行的对象就是这些&qu…

Maven项目的简单打包

最简单的方法 首先是在maven项目的pom.xml中添加打包的插件&#xff0c;这里有很多种方式的。最最简单的就是只使用maven-compiler-plugin、maven-jar-plugin插件&#xff0c;并且指定程序入口。相关代码如下&#xff1a; pom.xml文件&#xff1a; <?xml version"1…

关于maven打包出错解决

今天在使用maven打包时出现错误&#xff0c;因此记录一下。。 出现错误的原因是因为maven中的指定的java版本与项目使用的java版本不一致导致的。。 maven中的java版本为11 而项目使用版本为1.8 因此会出现如下错误 解决版本有两种&#xff0c;一种是修改maven中对应的java版本…

maven打包步骤

1&#xff1a;配置maven环境 2、项目中进行打包配置 3、先进行mvn clean 4、进行打包 5、通过cmd进行项目启动 6、测试项目是否已启动 结束&#xff0c;验证ok

SpringBoot - Maven方式打包

SpringBoot 为当前最流行的JAVA框架 , 内嵌了 Tomcat 服务器 , 我们不用再像以前 Spring 那样打包成 war , 然后将 war 扔到 tomcat 中运行 。 我们现在可以直接将 SpringBoot 项目打包为一个内置 tomcat 的可运行 jar , 通过 java -jar xxx.jar 直接运行 (方便易用) 。 打包 S…

Maven打包操作

对于企业级项目&#xff0c;无论是进行本地测试&#xff0c;还是测试环境测试以及最终的项目上线&#xff0c;都会涉及项目的打包操作。对于每个环境下的项目打包&#xff0c;对应的项目所需要的配置资源都会有所区别&#xff0c;实现打包的方式有很多种&#xff0c;可以通过an…

Maven打包时指定配置文件

springboot项目通常会有部署到测试、演示、生产等多个环境&#xff0c;每次打包时都需要修改配置文件或指定配置文件&#xff0c;既麻烦&#xff0c;也不便于war包部署和版本管理。可以在maven打包时指定配置文件&#xff0c;实现打包配置文件零修改。 1、修改pom文件&#xff…

Maven打包插件介绍

文章目录 1. maven介绍2. 生命周期及插件2.1 总览生命周期2.2 打包插件2.2.1 maven-jar-plugin2.2.2 maven-assembly-plugin2.2.3 maven-shade-plugin2.2.4 maven-war-plugin2.2.4.1 jar和war 2.2.5 maven-source-plugin 3. springboot打包插件4.实际操作4.1 一个可用的打包插件…

maven项目如何打包

说明(java)&#xff1a; &#xff08;1&#xff09;胖包&#xff1a;将maven项目中的依赖包和项目打为一个包 。 &#xff08;2&#xff09;瘦包&#xff1a;直接打包&#xff0c;不打包依赖包&#xff0c;仅打包出项目中的代码到JAR包中。 1.打瘦包 2.只打胖包 2-1.快捷键…

Maven工程打包jar

Maven打包一般可以生成两种包一种是可以直接运行的包&#xff0c;一种是依赖包&#xff08;只是编译包&#xff09;。Maven默认打包时jar&#xff0c;如果需要修改其他类型。可以修改pom.xml <packaging>jar/ear/ejb</packaging> Maven工程默认引入的插件: 1.一般…

Maven打包的三种方式

Maven可以使用mvn package指令对项目进行打包&#xff0c;如果使用Java -jar xxx.jar执行运行jar文件&#xff0c;会出现"no main manifest attribute, in xxx.jar"&#xff08;没有设置Main-Class&#xff09;、ClassNotFoundException&#xff08;找不到依赖包&…