当前位置: 首页 > news >正文

详解TCP/IP五层模型

目录

一、什么是TCP五层模型?

二、TCP五层模型的详细内容

1. 应用层

2. 传输层

3. 网络层

4. 数据链路层

5. 物理层

三、网络设备所在分层  

封装和分⽤

三、Java示例


引言:

        在网络通信中,TCP/IP协议是至关重要的。为了更好地理解TCP协议的工作原理,我们需要了解TCP/IP模型,也称为五层模型。本文将深入探讨TCP五层模型的内容,并使用Java代码示例说明。

一、什么是TCP五层模型?

TCP/IP模型是一个网络通信体系结构,由五层组成,每一层都有其特定的功能。这五层分别是:

  1. 应用层
  2. 传输层
  3. 网络层
  4. 数据链路层
  5. 物理层

每一层都有不同的责任,通过这种层次结构,网络通信可以更有效地进行。

二、TCP五层模型的详细内容

1. 应用层

应用层是网络通信的最高层,它定义了应用程序和网络之间的接口。在这一层,用户可以直接与应用程序进行交互。常见的应用层协议有HTTP、FTP、SMTP等。

2. 传输层

传输层负责在源主机和目标主机之间建立数据传输通道。它提供了可靠的数据传输服务,确保数据的正确传输顺序和可靠性。TCP协议就是传输层协议的一种,它提供了可靠的、面向连接的数据传输服务。

3. 网络层

网络层负责在网络上寻址和路由数据包。它定义了数据在网络中的传输路径,使得数据可以从源主机传输到目标主机。常见的网络层协议有IP协议。

4. 数据链路层

数据链路层负责在物理网络上传输数据帧。它负责数据的分段和重新组装,以及物理介质的访问控制。常见的数据链路层协议有以太网协议。

5. 物理层

物理层是网络通信的最底层,它负责在物理介质上传输比特流。它定义了物理连接的特性,如电压、频率等。常见的物理层介质有光纤、双绞线等。

       

三、网络设备所在分层  

  • 对于⼀台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四
  • 对于⼀台路由器,它实现了从⽹络层到物理层,也即是TCP/IP五层模型的下三层
  • 对于⼀台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层
  • 对于集线器,它只实现了物理层
        注意我们这⾥说的是传统意义上的交换机和路由器,也称为⼆层交换机(⼯作在TCP/IP五层模型的下两层)、三层路由器(⼯作在TCP/IP五层模型的下三层)。
        随着现在⽹络设备技术的不断发展,也出现了很多3层或4层交换机,4层路由器。我们以下说的⽹络设备都是传统意义上的交换机和路由器。
        ⽹络数据传输时,经过不同的⽹络节点(主机、路由器)时,⽹络分层需要对应。
以下为同⼀个⽹段内的两台主机进⾏⽂件传输:

        以下为跨⽹段的主机的⽂件传输:数据从⼀台计算机到另⼀台计算机传输过程中要经过⼀个或多个路由器

 

封装和分⽤

  • 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在⽹络层叫做数据报 (datagram),在链路层叫做帧(frame)。
  • 应⽤层数据通过协议栈发到⽹络上时,每层协议都要加上⼀个数据⾸部(header),称为封装 (Encapsulation)。
  • ⾸部信息中包含了⼀些类似于⾸部有多⻓,载荷(payload)有多⻓,上层协议是什么等信息。
  • 数据封装成帧后发到传输介质上,到达⽬的主机后每层协议再剥掉相应的⾸部,根据⾸部中的 "上层协议字段" 将数据交给对应的上层协议处理。
下图为数据封装的过程

下图为数据分⽤的过程 

三、Java示例

下面通过一个简单的Java示例来说明TCP五层模型的工作原理。

import java.net.*;
import java.io.*;public class TCPServer {public static void main(String[] args) {try {// 创建服务器套接字,监听端口8888ServerSocket serverSocket = new ServerSocket(8888);System.out.println("服务器已启动,等待客户端连接...");// 等待客户端连接Socket clientSocket = serverSocket.accept();System.out.println("客户端已连接,IP地址为:" + clientSocket.getInetAddress());// 获取客户端输入流BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));// 获取服务器输出流PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);// 读取客户端发送的数据String message = in.readLine();System.out.println("客户端发送的消息为:" + message);// 向客户端发送响应消息out.println("服务器已接收到您的消息:" + message);// 关闭流和套接字in.close();out.close();clientSocket.close();serverSocket.close();} catch (IOException e) {e.printStackTrace();}}
}

        以上是一个简单的TCP服务器示例。它监听8888端口,并等待客户端连接。一旦客户端连接成功,就接收客户端发送的消息,并向客户端发送响应消息。

相关文章:

详解TCP/IP五层模型

目录 一、什么是TCP五层模型? 二、TCP五层模型的详细内容 1. 应用层 2. 传输层 3. 网络层 4. 数据链路层 5. 物理层 三、网络设备所在分层 封装和分⽤ 三、Java示例 引言: 在网络通信中,TCP/IP协议是至关重要的。为了更好地理解TCP协议的工…...

开创加密资产新纪元:深度解析ERC-314协议

随着加密资产市场的不断发展和区块链技术的日益成熟,新的协议和标准不断涌现,其中包括了ERC-314协议。本文将深入分析ERC-314协议的特点、功能以及对加密资产市场可能产生的影响。 1. ERC-314协议简介 ERC-314协议是一项建立在以太坊区块链上的新提案&a…...

Rust 实战练习 - 9. 文本编码,URL编码,加密解密

编解码 编程工作中,很复杂的一个环节的就是编解码和多语言。这里只讨论编解码的工作。 目标: 常见文本编码的转换(GBK, Shift-JIS, UTF8, Unicode, ASCII)Web中常用的编码常见的加密算法(md5, sha1, HMAC, AES/DES, RSA) encoding/decodi…...

linux环境openfile限制

/etc/security/limits.conf 是 Linux 系统中用于设置用户资源限制的配置文件。这个文件允许系统管理员为每个用户或用户组设置各种资源限制,以防止用户滥用系统资源。 这个文件中的每一行都定义了一个资源限制。每一行通常包含以下字段(由空格或冒号分隔…...

python之pandas数据导入和导出

目录 Pandas 常用数据导入Pandas 常用数据导出数据导入示例CSV 文件:指定导入文件的编码格式添加列标题 Excel 文件:JSON 文件:数据库:HTML 表格:Clipboard:HDF5 文件:Feather 文件:…...

Docker 集成 redis,并在nacos进行配置时需要注意点

安装redis镜像 docker pull redis:6.0.6redis配置文件 创建相关配置文件 mkdir /apps/redis cd /apps/redis touch redis.conf vim redis.confredis.conf内容: #开启保护 protected-mode yes #开启远程连接 bind 0.0.0.0 #自定义密码 port 6379 timeout 0 # 900s内…...

数据库系统工程师考试大纲

数据库系统工程师考试大纲主要包括以下几个方面的考试要求: 1.掌握计算机体系结构以及各主要部件的性能和基本工作原理。 2.掌握操作系统、程序设计语言的基础知识,了解编译程序的基本概念。 3.熟练掌握常用数据结构和常用算法。 4.熟悉软件工程和软件开…...

(Java)数据结构——图(第七节)Folyd实现多源最短路径

前言 本博客是博主用于复习数据结构以及算法的博客,如果疏忽出现错误,还望各位指正。 Folyd实现原理 中心点的概念 感觉像是充当一个桥梁的作用 还是这个图 我们常在一些讲解视频中看到,就比如dist(-1)&#xff0…...

使用Python进行高效的多线程HTTP请求

在处理网络请求时,尤其是当需要大量请求相同或不同的URL时,采用多线程的方式可以显著提高效率。本文介绍了如何使用Python的concurrent.futures模块实现多线程HTTP请求。 为什么使用多线程? 多线程可以让CPU和网络资源得到更有效的利用。在…...

如何利用OceanBase v4.2的 外部表简化外部数据处理

为什么需要使用外表 在日常的业务场景中,经常遇到需要在数据库中处理外部数据的情况,这些数据可能来源于应用程序,或者是其他业务系统。一般来说,常是通过ETL工具将外部数据库的数据导入到数据库内部的表中,再进行分析…...

【灵境矩阵】零代码创建AI智能体之行业词句助手

欢迎来到《小5讲堂》 这是《灵境矩阵》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 创建智能体选择创建方式零代码 基础配置头像名称简介指令开场白…...

springboot 防抖操作

大佬的代码:看这里 原理: 通过aop切面编程,在调用接口前缓存接口信息,将信息缓存到redis中,在规定时间内重复调用接口,会被拦截请求 有个地方感觉不太合理,在使用中我将其修改了 //前略 publi…...

Playwright录制脚本 —— web自动化测试!

简介: 在编写 web 自动化测试用例时,代码编写的速度是否快,会影响框架的使用体验。现在很多的框架都会提供一些辅助功能,帮助我们更快的去编写自动化测试代码,而录制功能是几乎所有的web自动化工具都会带的功能。在实际…...

什么是工业级物联网智能网关?如何远程控制PLC?

在数字化浪潮席卷全球的今天,工业物联网(IIoT)已经成为推动工业转型升级的关键力量。而在工业物联网的大家庭中,工业级物联网智能网关扮演着举足轻重的角色。那么,究竟什么是工业级物联网智能网关?又该如何…...

AI推介-大语言模型LLMs论文速览(arXiv方向):2024.04.05-2024.04.10

文章目录~ 1.Learn from Failure: Fine-Tuning LLMs with Trial-and-Error Data for Intuitionistic Propositional Logic Proving2.Continuous Language Model Interpolation for Dynamic and Controllable Text Generation3.Event Grounded Criminal Court View Generation w…...

javascript:call()、apply()、bind()的区别和使用

javascript:call()、apply()、bind()的区别和使用 1 前言 记录javascript的call、apply、bind方法绑定this的区别以及使用。 call、apply、bind的区别: 【相同点】:作用相同,都是动态修改this指向;都不会修改原先函…...

ubuntu系统安装systemc-2.3.4流程

背景:systemC编程在linux下的基础环境配置 1,下载安装包,并解压 (先下载了最新的3.0.0,安装时候显示sc_cmnhdr.h:115:5: error: #error **** SystemC requires a C compiler version of at least C17 **** &#xff…...

Java开发中的entity、vo和pojo

Java开发中的entity、vo和pojo 1.Entity实体2.vo3.pojo 1.Entity实体 定义: Entity 通常指的是与数据库表对应的对象。它包含了与数据库表字段相对应的属性和一些业务逻辑方法。Entity 通常用于数据的持久化操作,如增删改查。使用场景: 当需…...

通过IPV6+DDNS实现路由器远程管理和Win远程桌面控制

前期需要的准备: 软路由,什么系统都可以,要支持IPV6,能够自动添加解析 光猫的管理员账号,能够进入光猫修改配置,拨号上网账号 域名账号和DNS服务 主要步骤: 利用管理员账号,进入…...

数据湖/数据仓库

数据湖(Data Lake)和数据仓库(Data Warehouse)的主要区别在于它们的目的、存储的数据类型、数据处理方式、数据结构、数据安全性以及数据应用。以下是相关介绍: 目的。数据湖旨在作为一个集中的存储库,存储…...

ArcGIS Pro模型构建器实战:从零搭建自动化地理处理工作流

1. 初识ArcGIS Pro模型构建器 第一次接触ArcGIS Pro的模型构建器时,我完全被它的可视化操作界面惊艳到了。这就像搭积木一样,不需要写一行代码,就能把复杂的地理处理流程串起来。记得当时有个项目需要批量处理上百个乡镇的耕地数据&#xff0…...

ESLyric歌词源高效配置与避坑指南:Foobar2000用户进阶教程

ESLyric歌词源高效配置与避坑指南:Foobar2000用户进阶教程 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource ESLyric-LyricsSource是Foobar2000…...

MindFormers文本生成接口

MindFormers的文本生成接口(.generate())是大模型推理流程中控制生成行为、整合输入与输出的核心工具,其设计兼顾灵活性与易用性,支持从基础文本生成到高阶自定义配置的多类场景。一、核心入参:定义生成的“输入”与“…...

Qwen3-0.6B-FP8多语言落地:支持粤语、闽南语、藏语等方言指令理解实测

Qwen3-0.6B-FP8多语言落地:支持粤语、闽南语、藏语等方言指令理解实测 1. 引言:当AI能听懂你的家乡话 想象一下,你正在用粤语和AI助手聊天,让它帮你写一份工作报告;或者用闽南语问它今天的天气,它不仅能听…...

别再到处找模板了!我用这套软著申请材料(含用户手册+源代码模板)两个月搞定

两个月高效拿下软著:零基础开发者的材料准备实战指南 第一次提交软著申请时,我盯着官网模糊的材料要求整整发呆了半小时——"用户手册需图文并茂"到底要多详细?"源代码前30页后30页"该怎么截取?连续三个晚上搜…...

手把手教你用丹青识画:智能影像雅鉴系统保姆级入门教程

手把手教你用丹青识画:智能影像雅鉴系统保姆级入门教程 1. 认识丹青识画系统 "以科技之眼,点画意之睛。"这句话完美诠释了丹青识画系统的核心理念。这是一款将人工智能技术与东方美学相结合的创新工具,能够自动分析图像内容并生成…...

Spring Boot 3.2项目实战:5分钟搞定Tomcat虚拟线程配置,让你的接口吞吐量翻倍

Spring Boot 3.2虚拟线程实战:Tomcat配置优化与性能飞跃指南 当你的电商大促接口突然面临每秒上万请求,或者文件上传服务在高并发下响应缓慢时,传统线程池往往成为性能瓶颈。Spring Boot 3.2与Java 21的虚拟线程组合,正在重新定义…...

语义分割竞赛必备:5种Loss函数组合效果对比(含Dice+Focal Loss调参指南)

语义分割竞赛进阶:5种损失函数组合实战评测与调参策略 在Kaggle等数据竞赛中,语义分割任务的性能提升往往取决于损失函数的巧妙选择与组合。不同于常规分类任务,多类别像素级预测需要处理极端类别不平衡、边界模糊等独特挑战。本文将深入剖析…...

SVGnest智能排版优化器:5分钟掌握材料利用率翻倍的终极技巧

SVGnest智能排版优化器:5分钟掌握材料利用率翻倍的终极技巧 【免费下载链接】SVGnest An open source vector nesting tool 项目地址: https://gitcode.com/gh_mirrors/sv/SVGnest 想象一下,您是否经常在激光切割、CNC加工或3D打印中面临材料浪费…...

从Buck到三电平:软开关DC-DC变换器的Simulink建模与双闭环控制仿真

1. 从Buck到三电平:电力电子技术的进化之路 记得我第一次接触DC-DC变换器时,Buck电路就像是一道必须跨过的门槛。这个经典的降压电路结构简单,却蕴含着电力电子最基础的设计思想。但随着项目需求的提升,传统Buck电路在高压大功率场…...