计算机网络体系结构解析

OSI参考模型 与 TCP/IP模型

如图所示
image-20240707093716664

TCP/IP模型有几层

  • 应用层:只需要专注于为用户提供应用功能 HTTP、SMTP、Telnet等,工作在操作系统中的用户态,传输层及以下工作在内核态
  • 传输层:为应用层提供网络支持(TCP、UDP传输协议);传输的数据量非常大的场景下就需要将数据包进行分块,即使丢了只需要重新发送该块就可以。(如何区分一台设备上多个应用在接收传输数据时选择哪一个应用? 使用端口号来进行区分 80、22)
  • 网络层:将数据从一个设备传输到另一个设备,一般使用的IP协议进行传输 (寻址能力实现网络号查找朝哪个方向走、路由实现选择这个方向的最优路径)
  • 网络接口层:主要为网络层提供链路级别的传输服务,负责在以太网、wifi这样的底层网络上发送原始数据包,使用MAC地址来标识网络上的设备。

问题一:为什么要设计分层?

通过分层可以将庞大的网络问题,转化为若干个较小的局部问题,较小的局部问题解决和处理起来就比较的容易。通过分层能够细分通信功能,更易于单独实现每个分层的协议,并界定各个分层的具体责任和义务从而解决计算机在通信过程中遇到的实际问题。劣势在于过分模块化,使得处理变得更加沉重以及每个模块都不得不实现相似的处理逻辑。

问题二:模型中每一层的作用和顺序关系?

物理层(硬件):解决计算机之间的传输媒介和信号发送问题 【解决使用何种信号来传输比特的问题】 TCP/IP协议是在网络互连的设备之间能够通信的前提下被提出的

数据链路层(网络接口层):解决主机编址、如何从比特流中区分出地址和数据、协调各主机争用总线 【解决分组在一个网络上传输的问题】

网络层(互联网层):解决网络和主机共同编址的问题、路由器如何分组转发选择最优路径的问题 【解决分组在多个网络上传输的问题】 IP协议基于IP地址转发分包数据,不具有重发机制,属于非可靠性传输协议; ICMP用来发送异常通知,IP数据包在发送途中发生异常无法到达对端目标地址的场景下; ARP 从分组数据包的IP地址中解析出MAC地址的协议

运输层:解决进程之间基于网络的通信问题 端口号用来标识应用程序(服务器响应之后应该回传给那个进程)、出现传输错误如何处理 【解决进程之间基于网络通信的问题】 TCP \ UDP

应用层:通过应用进程间的交互来完成特定的网络应用

网络传输流程:

主机发送http请求报文,通过路由器转发到对应的服务器,服务器接收到之后返回相对应的http响应报文的数据,通过路由器转发给对应的主机 【实际上是主机里面的浏览器进程与服务器中的web服务器进程之间基于网络的通信】

image-20240707104430249

举个邮件发送的例子

(发送端沿着OSI模型的七层结构向下传输数据,接收端沿着七层结构向上传输数据)

A给B发送一封电子邮件的过程:

【发送过程】:A在电子邮件应用程序中编写邮件,点击"发送",程序将邮件传递到应用程序层,该层选取对应的协议再将数据传递到表示层。接着表示层压缩数据,将数据传递到会话层,会话层初始化通信会话后,接着数据到达发送方的传输层,在该层进行数据分段,然后到网络层后将数据段分解为数据包,然后在数据链路层中进一步分解为帧。随后数据链路层将这些帧传输到物理层,物理层将数据转换为位流1和0,最后通过物理介质发送数据。

【接收过程】:B的计算机物理介质接收到位流之后,数据沿着七层结构向上传输数据。首先物理层将位流转为帧,传递到数据链路层。然后数据链路层将帧重组为数据包,供网络层使用。接着网络层将数据包重组为数据段供传输层使用,传输层再将数据段重组为数据片段。随后数据流入B的会话层,该层将数据传递到表示层并结束通信会话。表示层解压数据并将原始数据传递到应用程序层。应用程序层将人们能够可读的数据传递到B的电子邮件软件中,然后就能收到并阅读A传递过来的电子邮件。

IP TCP DNS的关系

IP: 【网络层】

  • 作用:负责可靠传输数据包给对方
  • 前置条件:IP地址和MAC地址 (MAC地址基本不会更改)
  • ARP是一种解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址

TCP:【传输层】

  • 作用:提供可靠的字节流服务方便数据传输
  • 前置条件:三次握手保证通信的可靠

DNS:【应用层】

  • 作用:提供域名到IP地址之间的解析服务
  • 原因:域名相较于IP地址更加方便记忆

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 10:04:04       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 10:04:04       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 10:04:04       57 阅读
  4. Python语言-面向对象

    2024-07-12 10:04:04       68 阅读

热门阅读

  1. Mybatis SQL注解使用场景

    2024-07-12 10:04:04       16 阅读
  2. python 缩放照片

    2024-07-12 10:04:04       24 阅读
  3. 谈一谈徒劳的坐地收益的副业问题

    2024-07-12 10:04:04       26 阅读
  4. Milvus Cloud向量数据库:优势解析与深度应用探索

    2024-07-12 10:04:04       21 阅读
  5. MyBatis与数据库交互的四种方法详解

    2024-07-12 10:04:04       18 阅读
  6. uni-app 扫描二维码获取信息功能

    2024-07-12 10:04:04       20 阅读
  7. 设计模式Base

    2024-07-12 10:04:04       21 阅读
  8. 3 进程

    3 进程

    2024-07-12 10:04:04      19 阅读