当前位置:   article > 正文

TCP/IP ⽹络模型

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)。但这些名词并没有什么本质的区分,可以统称为数据包。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/303582
推荐阅读
相关标签
  

闽ICP备14008679号