【网络编程】网络通信基础——简述TCP/IP协议

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【网络编程】【Java系列】
本专栏旨在分享学习网络编程的一点学习心得,欢迎大家在评论区交流讨论💌

目录

  • 一、ip地址
  • 二、端口号
  • 三、协议分层
  • 四、封装和分用
  • 五、总结

一、ip地址

ip地址简单来说就是用来描述网络上一个设备的所在位置。

二、端口号

端口号用于区分一个主机上不同的应用程序。

一个网络程序在启动的时候都需要绑定一个或多个端口号,后续的通信过程都需依赖端口来进行展开的。

网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则(协议就只是表示一种约定,然而这种约定可以是任意的),之所以有统一的协议标准以便大家可以相互通信。

三、协议分层

网络通信是一个非常庞大的工作,其中会涉及到一系列非常繁琐,非常细节的工作,靠一个协议解决所有问题说明这个协议非常庞大。因此我们就需要对协议进行分类(把功能差不多的协议放到一起)、分层(上层协议调用下层协议,下次协议为上层协议提供支持,以避免跨层级所引起的混乱);另外上层协议不需要了解下层协议的细节(封装),我们可以灵活的调整替换某层协议。

协议分层就是为这些协议明确层级关系,避免跨层之间的交互,降低耦合,提高整个系统的稳定性。

协议分层有两种主要的方式:一种方式是OSI七层网络模型(目前只是在教科书中提到,在真实世界并没有对其进行应用),另一种是TCP/IP五层网络模型。
在这里插入图片描述

  • 物理层:描述网络通信中的一些基础设施需要遵守的规范。(比如网口、网线是什么样的)
  • 数据链库层:负责相邻两个节点的数据如何传输。
  • 网络层:负责地址管理和路由选择。
  • 传输层:管理两个节点之间的数据传输,只关注起点和终点。
  • 应用层:简单来说就是这个数据被用来干什么。
    在这里插入图片描述
  • 对于应用程序来说:不同的应用程序使用不同的协议(当然也能是使用相同的协议)。
  • 传输层协议和网络层协议都是操作系统已经内置好的。
  • 驱动程序都是硬件厂商提供的,驱动程序会和系统内核进行适配,系统就可以进一步的通过驱动来操作硬件了。数据链路层和物理层一般就是由硬件和驱动程序搭配来进行提供的。

四、封装和分用

网络数据传输的基本流程总结起来就是:封装和分用

我们现在通过QQ发送消息为例来描述网络数据传输的基本流程。即主机A通过QQ把消息发送给主机B:

  • 应用层方面:首先QQ这个应用程序先从输入框中获取到输入的信息,并将其构成应用层数据报(当然这里是根据应用层协议去进行数据报构造的,构建的应用层数据报的过程是按照一定的格式进行字符串拼接的)。这里我们要知道不同的应用程序使用的应用层协议是不同的,而其中很多一部分的应用程序会自定义应用层协议。当应用层数据报准备好之后,应用程序就会调用传输层提供的接口,然后把上述的数据报交给传输层去进行处理。

  • 传输层方面:传输层的协议有很多,最主要的协议就是TCP和UDP。此处我们这里假设使用的协议是UDP。当应用层把应用层的数据传到了传输层之后,并交给UDP,UDP会把应用层数据当作一个字符串,并构造出UDP数据报,然后把UDP数据报进一步的交给网络层。
    在这里插入图片描述

  • 网络层方面:网络层最主要的协议就是IP协议。IP协议会根据自己的格式来构造出IP数据报。IP协议并不关心IP数据报的载荷是啥,只是单纯的把IP数据报载荷当作一个字符串,在这个基础上拼接一个IP报头以获取更大的字符串。

在这里插入图片描述

注意,源ip和目的ip都是在ip报头中,而源端口和目的端口都是在UDP报头中
一次通信往往包括这5个信息:源IP、目的IP、源端口、目的端口、协议类型。此五点称为网络通信的五元组

之后对数据进一步传输,即把数据传输到数据链路层。

  • 数据链路层:数据链路层比较重要的协议就是以太网协议。以太网(平时上网插入的一个网线,这根网线就遵守以太网协议)又会针对IP数据报进行进一步的封装,即在IP数据报的基础上加上数据头数据尾。以太网依然不关心载荷是什么,以太网只是把载荷当作字符串,进一步的拼接上枕帧头帧尾以构造成以太网数据帧。至此,上述的数据还需要交给物理层。

在这里插入图片描述

  • 物理层:物理层这里就涉及到硬件设备了(比如网卡)。之前的以太网数据帧本质上是二进制的数据,这个时候硬件设备就需要对上述的数据进行转换(由物理层的这些设备把上述的数据转换称光信号、电信号、电磁波等)

至此,主机A就完成了发送过程。即上述的过程是主机A,即发送消息方的情况。

现在来看接收方(即主机B)的情况:

  • 物理层:硬件设备(如网卡)接收到光信号、电信号、电磁波。需要把接收到的信号解调(调制:就是把我们要传输的信息放到光电信号中解调:就是把光电信号中的信息提取出来;还有一个叫做调制解调器【俗称猫🐱】,调制解调器就是负责调制和解调的硬件设备:光猫🐱就是针对光信号进行调制解调的),解调之后我们就可以得到0101这样的二进制数据序列,这个序列就是以太网数据帧。此时我们经过解调得到的信息就会交给上一层,即交给数据链路层。好了,下面来看数据链路层的方面。
  • 数据链路层:数据链路层得到来自硬件设备解调出来的信息之后,数据链路层的以太网协议就会按照以太网数据帧的格式对信息进行解析。解析之后,就来到了网络层。下面来看网络层。

在这里插入图片描述

  • 网络层:ip协议会对从数据链路层那里得到的数据报进行解析(去掉ip报头,取出载荷部分的信息并将其交给传输层),好了现在就来到了传输层。

在这里插入图片描述

  • 传输层:传输层会根据ip报头中的字段就知道当前这个载荷是一个UDP数据报,并将该数据报交给UDP处理。然后UDP也会针对这个数据报进行解析(即去掉报头,取出载荷),然后进一步交给应用程序。好了,现在来到了应用程序层。
  • 应用程序层:UDP报头中有一个字段是目的端口,然后根据目的端口找到关联的应用程序,然后把数据交给应用程序即可。此时QQ程序就会按照QQ的应用层协议对数据进行解析,进一步把这里的数据显示到界面上。更进一步的此时我们的QQ头像就一直进行闪烁。

至此,主机A从上到下依次添加报头的过程称为封装。主机B从下到上依次解析报头的过程称之为分用。每次网络数据的传输都会经过封装和分用这样的过程。我们可以简单理解:封装就是在打包快递,而分用就是在拆快递。封装和分用相互配合,就可以完成数据的传输。上面的描述是针对消息发送方和消息接收方的进行分析的。

然后主机A和主机B之间还会有很多交换机和路由器进行转发。消息转发到某个设备(即中间过程的交换机和路由器)时,每个设备的处理流程和上面封装分用是一样的如果是交换机的话,交换机封装和分用到数据链路层即可。交换机解析出以太网数据帧之后,就会进一步获取到帧头中的mac地址(交换机通过在以太网数据帧中查找目标MAC地址来实现数据的转发),然后根据mac地址查询到交换机内部的转发表,然后接下来决定数据从哪个网口发出,在发送之前又会把以太网数据帧封装好。(我们举个栗子来更好的理解交换机这里,比如我们拿到一个快递之后,打开快递盒子并查看其中的标签以便我们可以知道这个快递发往哪里,之后我们得知快递发往哪里之后我们把这个快递盒子重新封装起来即可)
路由器则是封装分用到网络层即可。即先从物理层中解析出以太网数据帧(以太网数据帧是计算机网络中物理层和数据链路层之间的数据传输单位;计算机设备之间的通信都是通过以太网数据帧进行的),然后再去交给网络层(即交给ip协议)解析出ip数据包,进一步获取到ip报头,然后根据ip报头来进一步规划接下来的路线(不要忘记网络层的任务就是规划路线,而数据链路层的任务就是当路线确定好了之后再来确定我们应该怎么走;由此可以看到数据链路层和网络层是相互配合的),确定好路线之后,接下来又会把数据进行重新封装然后转发。
注意:上述的交换机路由器只是经典的交换机路由器,而现在的交换机路由器可以做到更多的事情,比如有的现代的交换机路由器很有可能封装分用到应用层

五、总结

  • TCP/IP五层协议:应用层(对应应用程序)、传输层(两点之间的传输)、网络层(规划路线)、数据链路层(负责两个相邻节点之间的传输),物理层(描述硬件设备),其中传输层会为应用层提供API,我们如果要编写一个具体的网络程序,此时就会经常使用到传输层的API。
  • 封装和分用:从上到下依次添加报头的过程称为封装。从下到上依次解析报头的过程称之为分用。

本文到这里就结束了,希望友友们可以支持一下一键三连哈。嗯,就到这里吧,再见啦!!!
在这里插入图片描述

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

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

相关文章

C/C++ 基础函数

memcpy:C/C语言中的一个用于内存复制的函数,声明在 string.h 中(C是 cstring) void *memcpy(void *destin, void *source, unsigned n);作用是:以source指向的地址为起点,将连续的n个字节数据,…

如何利用PPT绘图并导出清晰图片

在写论文的过程中,免不了需要绘图,但是visio等软件绘图没有在ppt上绘图比较熟练,尤其流程图结构图. 但是ppt导出的图片也不够清晰,默认分辨率是96dpi,而杂志投稿一般要求至300dpi。解决办法如下: 1.打开注…

通过 Higress Wasm 插件 3 倍性能实现 Spring-cloud-gateway 功能

作者:韦鑫,Higress Committer,来自南京航空航天大学分布式系统实验室 导读:本文将和大家一同回顾 Spring Cloud Gateway 是如何满足 HTTP 请求/响应转换需求场景的,并为大家介绍在这种场景下使用 Higress 云原生网关的…

【银行测试】相关专业知识点+核心业务系统性能方法(汇总)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、银行测试相关专…

HarmonyOS4.0系统性深入开发03UIAbility组件详解(中)

UIAbility组件基本用法 UIAbility组件的基本用法包括:指定UIAbility的启动页面以及获取UIAbility的上下文UIAbilityContext。 指定UIAbility的启动页面 应用中的UIAbility在启动过程中,需要指定启动页面,否则应用启动后会因为没有默认加载…

Html / CSS刷题笔记

WebKit是一个开源的浏览器引擎,它最初是由苹果公司开发的,并且被广泛用于Safari浏览器和其他基于WebKit的浏览器,比如Google Chrome的早期版本。它也是构建许多移动设备浏览器的基础。WebKit的主要功能是解析HTML和CSS,并将其渲染…

爬虫工作量由小到大的思维转变---<第二十三章 Scrapy开始很快,越来越慢(医病篇)>

诊断篇https://blog.csdn.net/m0_56758840/article/details/135170994?ops_request_misc%257B%2522request%255Fid%2522%253A%2522170333243316800180644102%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id1703332433168001806441…

面试题:JVM 对锁都进行了哪些优化?

文章目录 锁优化自旋锁和自适应自旋锁消除锁粗化逃逸分析方法逃逸线程逃逸通过逃逸分析,编译器对代码的优化 锁优化 jvm 在加锁的过程中,会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。 自旋锁和自适应自旋 现在大多的处理器都是…

node-red:使用node-red-contrib-amqp节点,实现与RabbitMQ服务器(AMQP)的消息传递

node-red-contrib-amqp节点使用 一、简介1.1 什么是AMQP协议?1.2 什么是RabbitMQ? -> 开源的AMQP协议实现1.3 RabbitMQ的WEB管理界面介绍1.3 如何实现RabbitMQ的数据采集? -> node-red 二、node-red-contrib-amqp节点安装与使用教程2.1 节点安装2.2 节点使用2.2.1 amq…

LTE之接口协议

一、接口协议栈 接口是指不同网元之间的信息交互方式。既然是信息交互,就应该使用彼此都能看懂的语言,这就是接口协议。接口协议的架构称为协议栈。根据接口所处位置分为空中接口和地面接口,响应的协议也分为空中接口协议和地面接口协议。空…

WEB 3D技术 three.js 通过lil-gui 控制x y z轴数值 操作分组 设置布尔值控制 颜色材质控制

上文 WEB 3D技术 three.js 通过lil-gui管理公共事件中 我们用 lil-gui 处理了一下基础事件和按钮的管理 那么 本文 我们来具体说说它能做的其他事 我们先将基础代码改成这样 import ./style.css import * as THREE from "three"; //引入lil-gui import { GUI } fro…

基于docker-compose 安装Sonar并集成gitlab

文章目录 1. 前置条件2. 编写docker-compose-sonar.yml文件3. 集成 gitlab4. Sonar Login with GitLab 1. 前置条件 安装docker-compose 安装docker 创建容器运行的特有网络 创建挂载目录 2. 编写docker-compose-sonar.yml文件 version: "3" services:sonar-postgre…

算法模板之队列图文详解

🌈个人主页:聆风吟 🔥系列专栏:算法模板、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. ⛳️模拟队列1.1 🔔用数组模拟实现队列1.1.1 👻队列的定…

【设计模式】RBAC 模型详解

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、什么是 RBAC 呢? 二、RBAC 的组成 三、RBAC 的优缺点 3.1 优点: 3.2 缺点: 四、RBAC 的…

java定义三套场景接口方案

一、背景 在前后端分离开发的背景下,后端java开发人员现在只需要编写接口接口。特别是使用微服务开发的接口。resful风格接口。那么一般后端接口被调用有下面三种场景。一、不需要用户登录的接口调用,第二、后端管理系统接口调用(需要账号密…

2024华为OD机试真题指南宝典—持续更新(JAVAPythonC++JS)【彻底搞懂算法和数据结构—算法之翼】

PC端可直接搜索关键词 快捷键:CtrlF 年份关键字、题目关键字等等 注意看本文目录-快速了解本专栏 文章目录 🐱2024年华为OD机试真题(马上更新)🐹2023年华为OD机试真题(更新中)🐶新…

《工具箱-SVN》SVN安装、备份、迁移教程

文章目录 一、服务器搭建SVN1.检查SVN是否存在2.安装SVN3.创建版本库4.创建版本库存放文件地址5.修改配置文件5.1 vim authz5.2 vim passwd5.3 vim svnserve.conf 6.启动并查看SVN7.SVN Checkout8.SVN Update9.SVN Commit 二、SVN-无法连接主机,目标计算机积极拒绝&…

【MySQL】表的基本查询

表的基本查询 表的增删查改1. Create(1)单行数据 全列插入(2)多行数据 指定列插入(3)插入否则更新(4)替换 2. Retrieve(1)select 列a. 全列查询b. 指定列查…

【第七在线】数据分析与人工智能在商品计划中的应用

随着技术的不断进步,数据分析和人工智能(AI)已经成为了现代商品计划的关键组成部分。在服装行业,这两项技术正在帮助企业更好地理解市场需求、优化库存管理、提高生产效率和提供更好的客户体验。本文将深入探讨数据分析和人工智能…

java并发编程十 原子累加器和Unsafe

文章目录 原子累加器cas 锁原理之伪共享 UnsafeUnsafe CAS 操作 原子累加器 累加器性能比较 private static <T> void demo(Supplier<T> adderSupplier, Consumer<T> action) {T adder adderSupplier.get();long start System.nanoTime();List<Thread…