TCP/IP ⽹络模型

TCP/IP ⽹络模型

对于同⼀台设备上的进程间通信,有很多种⽅式,⽐如有管道、消息队列、共享内存、信号等⽅式,⽽对于不同设备上的进程间通信,就需要⽹络通信,⽽设备是多样性的,所以要兼容多种多样的设备,就协商出了⼀套通⽤的⽹络协议。

应⽤层

在OSI模型或TCP/IP模型中,应用层位于层次结构的最上层,直接服务于最终用户的应用程序。这一层的重点是如何提供网络服务或数据给用户应用,而不涉及数据传输的底层细节。

应用层协议定义了运行在不同终端设备上的应用程序如何进行通信。这些协议包括但不限于HTTP(超文本传输协议),用于网页浏览;FTP(文件传输协议),用于文件下载和上传;SMTP(简单邮件传输协议),用于电子邮件发送;DNS(域名系统),用于解析域名到IP地址;Telnet,用于远程登录。

当应用层的一个程序需要与另一个程序通信时,它会将应用数据发送给传输层。传输层的主要职责是提供端到端的数据传输服务,确保数据能够从源头安全、准确地传送到目的地。传输层使用的协议包括TCP(传输控制协议)和UDP(用户数据报协议)。

值得注意的是,应用层工作在操作系统的用户态,而传输层及其以下的层次(如网络层、数据链路层、物理层)则工作在内核态。用户态和内核态是操作系统的两种不同的权限模式。用户态允许用户应用程序运行,而内核态则有更高的权限,能够直接访问硬件和执行关键的系统任务。

这种分层的设计使得应用程序开发者可以专注于应用逻辑和用户体验,而无需关心数据如何在网络中传输的复杂细节。这也使网络通信更加模块化,有助于不同层次的技术和协议的独立发展和改进。

传输层

应⽤层的数据包会传给传输层,传输层(Transport Layer)是为应⽤层提供⽹络⽀持的。

image-20240319092525062

在传输层会有两个传输协议,分别是 TCP 和 UDP。

TCP (Transmission Control Protocol)

TCP 是一种面向连接的、可靠的传输层通信协议,设计目的是确保数据包能够可靠地、按顺序地从源传输到目的地。TCP 实现了几个关键特性以保证这种可靠性:

  • 流量控制:通过控制数据传输的速率,防止网络中的任一部分被过量的数据流淹没。
  • 超时重传:如果一个数据包在设定的时间内未被确认收到,则会重新发送该数据包。
  • 拥塞控制:在网络拥堵时减少数据的发送速率。
  • 有序数据传输:确保数据包按照发送顺序到达接收方。
  • 错误检测:通过校验和等方法检测数据在传输过程中的任何错误。

TCP 适用于那些需要高可靠性的应用,如网页浏览、文件传输、电子邮件等。

UDP (User Datagram Protocol)

UDP 是一种无连接的协议,相对于 TCP 来说,它简单得多,提供的是一种不可靠的服务。UDP 只是将应用层数据打包并发送,不保证数据包的可靠到达,也不进行错误检测、流量控制或拥塞控制。UDP 的这种设计使其在实时性要求较高的场景中(如视频会议、实时游戏)更为适用,因为即使丢失一些数据包,也不会像 TCP 那样等待重传,从而避免了延迟。

虽然 UDP 本身不提供可靠性保证,应用层可以在需要的情况下实现类似于 TCP 的可靠传输机制,如通过数据包重传、数据完整性校验等方式来确保数据的可靠到达。但是,实现一个商业级的可靠 UDP 传输协议是复杂的,需要在保持 UDP 高效率和低延迟的特点的同时,增加额外的可靠性机制。

数据分块和TCP段

对于大数据传输,TCP 采用分段的方法来优化传输过程。这意味着大块数据会被切分成更小的段,每个段都有自己的序号和校验和。这样,如果某个段在传输过程中丢失或损坏,只需重新传输那个特定的段,而不是整个数据包。MSS(最大报文段长度)是一个重要的参数,它定义了TCP段的最大数据量,帮助优化网络传输,避免因数据包过大而导致的网络拥堵。

总的来说,TCP和UDP各自服务于不同类型的网络应用需求,前者侧重于可靠性和顺序性,后者则侧重于低延迟和高效率。

image-20240319093310634

端口号的作用

  • 区分服务:在一个网络通信过程中,IP地址用来识别目标设备,而端口号则用来指定该设备上的特定应用。这样,即使多个应用同时使用同一网络协议(例如TCP或UDP)进行通信,它们也可以通过各自的端口号被正确区分和识别。
  • 实现多任务:同一台计算机上可以同时运行多个网络服务(如Web服务、邮件服务等),通过使用不同的端口号,这些服务可以同时监听网络请求,无需相互干扰。

常见端口号

  • 80端口:通常被HTTP服务使用,用于Web服务器。
  • 22端口:常用于SSH服务,用于安全的远程登录和其他安全网络服务。
  • 443端口:用于HTTPS服务,即加密的HTTP通信,提供安全的Web浏览。
  • 21端口:FTP服务使用,用于文件传输。

对于客户端应用程序(如Web浏览器中的标签),操作系统会分配临时端口号(也称为动态端口号)。这些端口号通常从一个特定的范围内选择,不用于标准网络服务。动态端口的使用允许多个网络应用并发运行,而不冲突。

当数据包在网络中传输时,它们的头部信息包括源端口号和目标端口号。这样,当数据包到达目标设备时,传输层可以通过目标端口号确定哪个具体的应用程序应该接收这些数据。同样地,源端口号告诉接收方如何回应消息,确保响应能返回给正确的应用程序。

端口号的这种设计极大地增强了网络通信的灵活性和效率,使得复杂的网络应用和服务得以在同一台设备上协同工作。

传输层的职责

传输层主要负责应用程序之间的数据传输服务,确保数据可以在应用程序之间准确无误地传递。它不直接处理数据的路由选择或跨网络的传输。传输层的职责包括:

  • 确保数据完整性:通过校验和等方法检测传输过程中的错误。
  • 保持数据顺序:确保数据包的顺序与发送时一致。
  • 流量控制和拥塞避免:防止网络过载。
  • 多路复用和分解:允许多个应用程序通过不同的端口同时使用网络。

⽹络层

网络层的职责

网络层负责数据包在网络中的传输和路由选择。这一层涉及到数据包在整个网络中从源头到目的地的传递,包括跨越不同的网络和中间设备(如路由器)。网络层的核心协议是IP(Internet Protocol),它定义了数据包的路由方式和地址格式。网络层的主要职责是:

  • 路由:决定数据包从源到目的地的路径。
  • 分片和重组:根据网络的MTU(最大传输单元),可能需要将大的数据包分成较小的片段进行传输,目的地再将这些片段重组。
  • 寻址:使用IP地址标识发送者和接收者。

传输层可能⼤家刚接触的时候,会认为它负责将数据从⼀个设备传输到另⼀个设备,事实上它并不负责。
实际场景中的⽹络环节是错综复杂的,中间有各种各样的线路和分叉路⼝,如果⼀个设备的数据要传输给另⼀个设备,就需要在各种各样的路径和节点进⾏选择,⽽传输层的设计理念是简单、⾼效、专注,如果传输层还负责这⼀块功能就有点违背设计原则了。也就是说,我们不希望传输层协议处理太多的事情,只需要服务好应⽤即可,让其作为应⽤间数据传输的媒介,帮助实现应⽤到应⽤的通信,⽽实际的传输功能就交给下⼀层,也就是⽹络层(Internet Layer)。

image-20240319101537211

⽹络层最常使⽤的是 IP 协议(Internet Protocol),IP 协议会将传输层的报⽂作为数据部分,再加上 IP 包头组装成 IP 报⽂,如果 IP 报⽂⼤⼩超过 MTU(以太⽹中⼀般为 1500 字节)就会再次进⾏分⽚,得到⼀个即将发送到⽹络的 IP 报⽂。

数据包的封装过程

  • 当数据从应用层下发到传输层,如使用TCP或UDP协议,它会被封装成一个段(TCP)或数据报(UDP),并附加上相应的端口号。
  • 传输层的数据随后下发到网络层,网络层将传输层的数据段或数据报封装在IP包中,加上IP头部信息,这些头部信息包括源IP地址和目标IP地址等。
  • 如果IP包的大小超过网络的MTU,网络层会将包分片。每个片段都能独立路由到目的地,在那里它们会被重新组装成原始的IP包。
image-20240319101929820

⽹络层负责将数据从⼀个设备传输到另⼀个设备,世界上那么多设备,⼜该如何找到对⽅呢?因此,⽹络层需要有区分设备的编号。

我们⼀般⽤ IP 地址给设备进⾏编号,对于 IPv4 协议, IP 地址共 32 位,分成了四段(⽐如,192.168.100.1),每段是 8 位。只有⼀个单纯的 IP 地址虽然做到了区分设备,但是寻址起来就特别麻烦,全世界那么多台设备,难道⼀个⼀个去匹配?这显然不科学。
因此,需要将 IP 地址分成两种意义:
⼀个是⽹络号,负责标识该 IP 地址是属于哪个「⼦⽹」的;
⼀个是主机号,负责标识同⼀「⼦⽹」下的不同主机;
怎么分的呢?这需要配合⼦⽹掩码才能算出 IP 地址 的⽹络号和主机号。

IP地址

IP地址是分配给每个连接到网络的设备的唯一标识符。对于IPv4,它是一个32位的数字,通常表示为四个十进制数(每个范围从0到255),用点分隔,例如192.168.100.1。这种结构允许大约42亿(2^32)的唯一地址。

子网掩码

子网掩码用于确定IP地址中哪一部分表示网络地址,哪一部分表示主机地址。通过将IP地址与子网掩码进行按位与(AND)运算,可以得到网络地址。子网掩码通常也是一个32位的数字,表示为与IP地址相同的点分十进制格式,例如255.255.255.0,或者作为CIDR表示法中的斜杠后数字,例如/24。

网络地址和主机地址的计算

  • 网络地址的计算:将IP地址与子网掩码按位与运算得到。这表示了IP地址所在的子网。
  • 主机地址的计算:将IP地址与子网掩码的反码按位与运算得到。这表示了子网中特定设备的标识。

例子

以IP地址10.100.122.2和子网掩码255.255.255.0(/24)为例:

  • 子网掩码/24表示前24位是网络部分,后8位是主机部分。
  • 网络地址计算:10.100.122.2 AND 255.255.255.0 = 10.100.122.0
  • 主机地址计算:10.100.122.2 AND 0.0.0.255(255.255.255.0的反码)= 0.0.0.2

网络地址10.100.122.0表示所有以此地址开始的设备都位于同一子网内。主机号2指的是该子网内的特定设备。

image-20240319102642394

子网掩码的作用

通过改变子网掩码,可以控制子网的大小。更多的位分配给网络部分意味着更多的子网,但每个子网中可以有的主机数就更少;相反,更多的位分配给主机部分意味着更少的子网,但每个子网可以包含更多的主机。子网掩码的设计使得网络管理员可以根据需要灵活地划分网络,以适应不同的网络规模和需求。

IP寻址

IP寻址的基本过程包括确定目标设备的IP地址,然后利用子网掩码来区分网络地址和主机地址。在数据包的传输过程中,网络地址用于确定目标设备位于哪个子网,而主机地址则用于识别该子网内的具体设备。只有当数据包到达了正确的子网,它才能被送达给正确的主机。

路由

路由是决定数据包从源头到目的地之间传输路径的过程。路由器在这个过程中起着至关重要的作用:

  1. 路径决定:路由器利用路由表来决定数据包的最佳路径。路由表包含了不同目的地的IP地址范围和对应的下一跳地址。下一跳可以是另一个路由器,这样数据包就通过一系列跳跃,最终到达目的地。
  2. 子网间转发:当数据包到达一个网络节点(如路由器)时,路由器检查目标IP地址,确定下一步应该转发到哪个子网或直接到达的主机。
  3. 动态路由协议:在复杂的网络环境中,路由器通过动态路由协议(如OSPF、BGP)自动更新路由表信息,以应对网络变化,确保数据包沿着最佳路径传输。

数据包转发

当路由器接收到一个数据包时,它首先检查数据包的目标IP地址,然后与路由表中的记录进行匹配,找出最合适的下一跳。如果目标地址在直接连接的网络中,数据包将直接发送到目标主机。如果不在,数据包将被转发到下一跳路由器。这一过程会一直重复,直到数据包到达最终目的地。

通过这种方式,即使在一个由数以千计的网络和设备构成的复杂互联网环境中,数据包也能够通过寻址和路由的机制找到一条路径,从而成功地从发送者传输到接收者。

所以,IP 协议的寻址作⽤是告诉我们去往下⼀个⽬的地该朝哪个⽅向⾛,路由则是根据「下⼀个⽬的地」选择路径。寻址更像在导航,路由更像在操作⽅向盘。

image-20240319103412824

⽹络接⼝层(数据链路层)

网络接口层,也称为链路层或数据链路层,是负责网络物理实体间数据传输的网络模型的一部分。它直接与网络的物理连接(如以太网、WiFi)打交道,确保数据能够在物理网络上有效地传输。

MAC地址

  • 定义:MAC(媒体访问控制)地址是链路层地址,用于标识网络上的设备。每个网络接口卡(Network Interface Card, NIC)都有一个全球唯一的MAC地址,确保在局域网中每个设备都可以被唯一识别。
  • 作用:在数据链路层,数据包是通过MAC地址来寻址的,而不是IP地址。这意味着,为了在局域网内部发送数据包,发送方需要知道接收方的MAC地址。

ARP协议

ARP(地址解析协议)是一种网络协议,用于将网络层的地址(如IP地址)解析为链路层的地址(如MAC地址)。当一个设备想要与同一局域网内的另一个设备通信时,但只知道其IP地址,它可以使用ARP协议来查询对应的MAC地址。

数据包的封装过程

  1. 网络层:数据包在网络层被赋予一个IP头部,标识了数据包的源IP地址和目标IP地址。

  2. 链路层:数据包下发到链路层时,链路层会在IP头部的前面加上MAC头部,其中包含了源MAC地址和目标MAC地址。这个过程中,如果不知道目标MAC地址,会先使用ARP协议进行查询。

  3. 发送数据帧:经过MAC头部封装的数据包变成了一个完整的数据帧,然后通过物理介质(如以太网线、WiFi信号)发送出去。

综上所述,TCP/IP ⽹络通常是由上到下分成 4 层,分别是应⽤层,传输层,⽹络层和⽹络接⼝层。

image-20240319104349600

每⼀层的封装格式:

image-20240319104443924

⽹络接⼝层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报⽂(message)。但这些名词并没有什么本质的区分,可以统称为数据包。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[PwnThyBytes 2019]Baby_SQL

[PwnThyBytes 2019]Baby_SQL 查看源码发现 下载源码,首先观察index.php 首先进入index.php,会执行session_start();启动session这里通过foreach将所有的环境变量的值都遍历了一遍,并且都使用了addslashes()进行转义,然后就定义了…

【论文阅读】(DALL-E)Zero-Shot Text-to-Image Generation

(DALL-E)Zero-Shot Text-to-Image Generation 引用: Ramesh A, Pavlov M, Goh G, et al. Zero-shot text-to-image generation[C]//International conference on machine learning. Pmlr, 2021: 8821-8831. 论文链接: [2102.120…

3D开发工具HOOPS在船舶设计中的应用以及其价值优势

在当今数字化时代,船舶设计领域也不例外地受益于先进的技术和工具。HOOPS 3D图形SDK(Software Development Kit)作为一种强大的工具,在船舶设计中发挥着越来越重要的作用。它为设计师们提供了一种高效、灵活且功能丰富的方式来处理…

Android Studio实现内容丰富的安卓外卖平台

获取源码请点击文章末尾QQ名片联系,源码不免费,尊重创作,尊重劳动 项目编号122 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.查看公告 3.查看外卖分类 4.购物车, 5.个人中…

nodejs基于vue超市信息管理系统flask-django-php

互联网的快速发展,使世界各地的各种组织的管理方式发生了根本性的变化,我国政府、企业等组织在上个世纪90年代就已开始考虑使用互联网来管理信息。由于以前的种种因素,比如网络的普及率不高,用户对它的认知度不够,以及…

GPT实战系列-智谱GLM-4的模型调用

GPT实战系列-智谱GLM-4的模型调用 GPT专栏文章: GPT实战系列-实战Qwen通义千问在Cuda 1224G部署方案_通义千问 ptuning-CSDN博客 GPT实战系列-ChatGLM3本地部署CUDA111080Ti显卡24G实战方案 GPT实战系列-Baichuan2本地化部署实战方案 GPT实战系列-让CodeGeeX2帮…

创建自己的“百度网盘”(部署owncloud)

[rootlocalhost html]# cd /root/[rootlocalhost ~]# wget https://download.com/server/stable/owncloud-10.12.0.zip --no-check-certificate #下载当前的owncloud代码包[rootlocalhost ~]# yum -y install unzip #安装解压工具[rootlocalhost ~]# unzip owncloud-10.12.0.zi…

HarmonyOS开发:超详细介绍如何开源静态共享包,实现远程依赖

前言 当我们开发了一个独立的功能,想让他人进行使用,一般的方式就是开源出去,有源码的方式,也有文件包的形式,当然了也有远程依赖的方式,比如在Android中,我们可以提供源码,也可以打…

【PG数据库】PostgreSQL 转储详细操作流程

1.pg_dump pg_dump 是用于备份一种 PostgreSQL 数据库的工具。即使数据库正在被并发使用,它也能创建一致的备份。pg_dump不阻塞其他用户访问数据库(读取或写入)。 pg_dump 只转储单个数据库。要备份一个集簇中 对于所有数据库公共的全局对象…

基于python失物招领系统-安卓-flask-django-nodejs-php

随着现在网络的快速发展,网络的应用在各行各业当中,利用网络来做这个失物招领的网站,随之就产生了“失物招领 ”,这样用户就可以利用平台来发布信息。 对于本失物招领 的设计来说, 它是应用mysql数据库、安卓等技术动…

路由器的端口映射能实现什么?

路由器的端口映射是一项重要的网络配置功能,它可以帮助实现局域网内外的设备之间的通信。通过端口映射,我们可以在公网上访问局域网内的设备,方便的进行远程访问、共享文件和资源等操作。 什么是端口映射? 在介绍端口映射之前&am…

【RabbitMQ | 第七篇】RabbitMQ实现JSON、Map格式数据的发送与接收

文章目录 7.RabbitMQ实现JSON、Map格式数据的发送与接收7.1消息发送端7.1.1引入依赖7.1.2yml配置7.1.3RabbitMQConfig配置类——(非常重要)(1)创建交换器方法(2)创建队列方法(3)绑定…

【RabbitMQ | 第六篇】消息重复消费问题及解决方案

文章目录 6.消息重复消费问题6.1问题介绍6.2解决思路6.3将该消息存储到Redis6.3.1将id存入string(单消费者场景)(1)实现思路(2)问题 6.3.2将id存入list中(多消费场景)(1&…

《Linux 高可用负载均衡集群实践真传》正式面市

终于等到啦! ​"Linux高可用实践真传系列"三本终于全部弄齐了,总的来说算是圆满。 本书为《Linux企业级高可用实践真传》系列丛书之《Linux 高可用负载均衡集群实践真传》。是一本专门介绍主流负载均衡技术的原创书籍,是作者二十多…

Springboot+vue的仓库管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的仓库管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层…

智慧城市与数字孪生:科技融合助力城市可持续发展

随着信息技术的迅猛发展,智慧城市和数字孪生作为现代城市发展的重要理念和技术手段,正日益受到广泛关注。智慧城市通过集成应用先进的信息通信技术,实现城市管理、服务、运行的智能化,而数字孪生则是利用数字化手段对物理城市进行…

Harvester基于 Kubernetes 构建的开源超融合基础架构 (HCI) 软件

Harvester 是基于 Kubernetes 构建的开源超融合基础架构 (HCI) 软件。它是使用专有 HCI 堆栈的一种开放替代方案,该堆栈结合了 Cloud Native Computing 的设计和精神。 Harvester 功能​ Harvester 支持在裸机服务器上实施 HCI。Harvester 使用本地、直接连接的存…

vue+bpmn.js实现自定义流程图

效果图: 使用插件版本: 插件名称版本安装命令 bpmn-js 7.3.1 npm install bpmn-js^7.3.1 --save-D bpmn-js-properties-panel 0.37.2 npm install bpmn-js-properties-panel^0.37.2 --save-Dcamunda-bpmn-moddle4.5.0npm install camunda-bpmn-moddle…

HCIA ——VLAN实验

一 、 实验需求 1.PC1和PC3所在接口为access接口;属于vlan 2 PC2-4-5-6处于同一网段;其中PC2可以访问PC4-5-6 PC4可以访问PC5不能访问PC6 PC5不能访问PC6 3.PC1-PC3与PC2-4-5-6不在同一个网段 4.所有PC均使用DHCP获取IP地址,且PC1可以正常访问…

使用ES检索PDF等文档的全栈方案之前端demo(end)

写在前面 通过之前的系列文章,整个ES搜索文件的流程与大的问题已经统统扫除了,既然是全栈流程,是不能缺少前端查询页面的,前端需简单实现一个用户输入查询关键词句,发起搜索,页面以表格形式展示查询的结果…
最新文章