中科大计网学习记录笔记(六):应用层概述 | 应用层原理

news2024/10/5 20:20:16

前言:

学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程
该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信息量过大,有太多无法理解的地方,在我第一次点开的时候也有相同的感受,但经过了一段时间项目的学习,对计网有了更多的了解,所以我准备在这次学习的时候做一些记录并且加入一些我的理解,希望能够帮助到大家。
往期笔记可以看专栏中的内容😊😊😊

资料分享:
视频课件分享链接,提取码 pho1
计算机网络(第七版) 自顶向下方法分享链接,提取码 7ln4

02. 应用层

目标:

  1. 网络应用的原理:网络应用协议的概念和实现方面
    • 传输层的服务模型
    • 客户端-服务器模式(cs 模式,client / server)
    • 对等模式(p2p 模式,peer to peer)
    • 内容分发网络
  2. 网络应用的实例:互联网流行的应用层协议
    • HTTP
    • FTP
    • SMIP / POP3 / IMAP
    • DNS
  3. 编程:网络应用程序
    • Socker API

2.1 应用层协议原理

2.1.1 客户端服务器模式(cs 模式)

服务器是一直运行再固定的 IP 和端口号来等待客户端来进行请求的,客户端直接与服务器通信,而不能直接与其他客户端通信。

这样的缺点就是可扩展性比较差:

服务器会因为访问量增大到某个阈值而呈现断崖式的下降,如果服务器负载过高,可能需要增加服务器的硬件资源或引入负载均衡等技术来处理更多的请求。

且因为服务器是一个中心化的实体,服务器出现故障或需要维护,整个系统可能会受到影响,等等诸多问题导致其拓展性很差。

2.1.2 进程通信

进程:在主机上应用程序

  • 客户端进程:首先发起通信的进程
  • 服务器进程:等待连接的进程

不同的主机之间通过交换报文(Message)来通信(应用层的 PAU)

分布式进程之间通信需要解决的问题:

分布式就是在不同计算机上的进程,这里理解为客户端到服务端的通信即可

  • 问题 1:进程标识和寻址问题,如何找到要服务的用户
  • 问题 2:传输层-应用层之间是如何提供服务的,如何和下层进行交接
  • 问题 3:如何使用传输层提供的服务实现应用进程之间的报文转换,即当收到 不同的报文 的时候需要去做什么。

问题 1:如何标识一个应用进程?

  1. 用户提供的 IP
  2. 应用程序是在 UDP 之上还是 TCP 之上
  3. 应用程序是在那个端口上(port)

问题 2:传输层提供的服务

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

层间接口必须要携带的信息

  • 要传输的报文(SDU)
  • 谁传的:本应用进程的标识(IP + TCP(UDP)端口)
  • 传给谁:对方的应用进程的标示:对方的IP+TCP(UDP)端口号

传输层实体(tcp或者udp实体)根据这些信息进行TCP 报文段(UDP数据报)的封装

  • 源端口号,目标端口号,数据等。
  • 将 IP 地址往下交 IP 实体,用于封装IP数据报:源 IP,目标 IP。

但这又引出一个问题,每次都需要携带上面的三种信息会导致传输的信息重复,且层间传输的信息量会增大,有没有方法可以解决这个问题呢?

2.1.3 socket 的基础理解
  • 如果每次传输报文都需要携带如此多的信息,太繁琐而且不宜管理
  • 所以采用编号的方式来标识双方或者单方,例如当 TCP 连接建立的时候可以向操作系统请求一个 socket,这个 socket 会以编号的形式存在,且会携带上面的三种信息,以后每次发送请求和接受请求的时候就可以通过 socket 来实现标识的作用。
  • socket 可以看作是在网络中建立通信连接的一种手段,它在应用层和传输层之间提供了一个抽象层,使得应用程序能够通过简单而灵活的方式进行网络通信。

Socket 能够解决穿越层间的信息传递问题的原因:

  1. 抽象网络协议: Socket 提供了一个抽象层,隐藏了底层网络协议的细节。无论是 TCP 还是 UDP,应用程序可以使用相同的 Socket 接口进行通信。这种抽象性允许应用程序在不同的网络协议之间切换,而不必修改主要的通信逻辑。
  2. 统一的编程接口: Socket 提供了一致的编程接口,无论在不同的网络层次上。通过调用 Socket API,应用程序可以实现对底层网络协议的访问,而 无需关心底层协议的差异。这使得开发者能够使用相似的代码来处理不同的网络通信需求。
  3. 多协议支持: Socket 不仅支持 TCP 和 UDP,还可以在应用程序层面上支持其他自定义的协议。这种多协议支持使得应用程序能够选择最适合其需求的通信方式,而不受制于特定的网络层次。
  4. 跨越网络层次: Socket 的设计目标之一就是跨越网络层次,使得应用程序可以在不同的网络层次上进行通信。通过 Socket,应用程序可以在传输层(如 TCP 和 UDP)以及应用层(通过自定义协议)实现通信。
  5. 灵活性和通用性: Socket 提供了灵活且通用的接口,能够适应不同的网络场景。这种通用性使得 Socket 成为一个广泛应用于各种应用领域的通信工具,从简单的文件传输到复杂的分布式系统通信。

这样就可以做到减少从应用层到传输层之间传递的信息量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.1.4 TCP 和 UDP 的 socket

TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种不同的传输层协议,它们在使用Socket进行通信时有一些区别。以下是TCP和UDP的Socket在通信中的一些特点:

  1. TCP Socket:
    • 连接导向: TCP是面向连接的协议,因此TCP Socket通信建立连接时需要进行三次握手。连接建立后,数据的传输是可靠的,有序的,且不会丢失。
    • 流式传输: TCP提供的是流式传输,数据被看作是连续的字节流。TCP会保证数据的完整性,按照发送的顺序进行重组。
    • 面向字节流: TCP是面向字节流的,发送和接收的是字节序列。应用程序需要负责解析消息的边界。
    • 连接维持: TCP保持连接的状态,双方在通信完成后需要进行四次挥手来终止连接。
  2. UDP Socket:
    • 无连接: UDP是无连接的协议,因此UDP Socket通信不需要建立连接,发送数据前不需要进行握手。每个数据包都是独立的,相互之间没有关系。
    • 数据报传输: UDP提供数据报传输,每个数据包是独立的单元,不会进行流式传输。数据包可能会丢失或乱序,因此不保证可靠性。
    • 面向消息: UDP是面向消息的,每个数据包都是一个独立的消息。
    • 无连接状态: UDP不保持连接状态,每次发送数据都是相互独立的操作。

TCP soket 中包含源主机的 IP 和端口,目标主机的 IP 和端口,所以传输的时候需要 socket 和传输的内容即可;UDP socket 中仅包含了本主机的端口和 IP,所以传输的时候需要 socket 、目标主机的 IP 和端口还有传输的内容

2.1.5 应用层协议

运行在 不同端系统 上的应用如何相互交换报文

HTTP:用于在客户端和服务器之间传输超文本,是 Web 应用中最常用的协议。HTTP 定义了客户端请求和服务器响应的格式,支持无状态的通信。

应用层需要传输层提供的服务

  • 数据丢失率:有些应用能容忍一定比例的数据丢失,比如音频;有些应用则要求 100% 的准确性
  • 延迟:有些应用对于延迟要求很高,比如数据电话,需要很低的延迟才能保证人们之间的正常交流
  • 吞吐
  • 安全性

常见应用需要传输层提供的服务

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

TCP 与 UDP 可提供的服务

TCP 提供 可靠的传输服务、流量控制、拥塞控制。

UDP 提供 不可靠的传输服务,没有以上的控制各种限制,但换来了更快的速度和更低的延迟。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM的餐厅点菜管理系统(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的餐厅点菜管理系统(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring …

作业2.7

一、填空题 1、在下列程序的空格处填上适当的字句&#xff0c;使输出为&#xff1a;0&#xff0c;2&#xff0c;10。 #include <iostream> #include <math.h> class Magic {double x; public: Magic(double d0.00):x(fabs(d)) {} Magic operator(__const Magic&…

【前端web入门第四天】03 显示模式+综合案例热词与banner效果

文章目录: 1. 显示模式 1.1 块级元素,行内元素,行内块元素 1.2 转换显示模式 综合案例 综合案例一 热词综合案例二 banner效果 1. 显示模式 什么是显示模式 标签(元素)的显示方式 标签的作用是什么? 布局网页的时候&#xff0c;根据标签的显示模式选择合适的标签摆放内容。…

微服务介绍、使用 Nacos 实现远程调用以及 OpenFeign 的使用

1 微服务的概念 区别于单体项目 单体项目拆分成微服务项目的目标&#xff1a;高内聚、低耦合 拆分思路 纵向拆分&#xff1a;根据功能模块 横向拆分&#xff1a;抽取可复用模块 2 微服务拆分——远程调用 背景&#xff1a;微服务单一职责&#xff0c;每个服务只有自己的功能…

海岛火山:可视化技术下的自然奇观

当我们谈论大自然的奇观时&#xff0c;海岛火山总是能引起人们无限的遐想&#xff0c;它们像是大海深处的秘密守护者&#xff0c;时而宁静&#xff0c;时而狂暴&#xff0c;用它们独特的方式诠释着大自然的魅力和力量。 海岛火山是大自然的画家&#xff0c;用火与土绘制出一幅幅…

CSS Transition:为网页元素增添优雅过渡效果

随着互联网的发展&#xff0c;网页的视觉效果和用户体验变得尤为重要。CSS Transition作为一种能够让网页元素在状态改变时呈现平滑过渡效果的工具&#xff0c;受到了广大前端开发者的青睐。本文将详细介绍CSS Transition的基本概念、使用方法以及常见应用&#xff0c;帮助读者…

使用 WMI 查询安全软件信息

在这篇文章中&#xff0c;我们将详细介绍如何使用 Windows Management Instrumentation (WMI) API 来查询当前计算机上安装的安全软件的基本信息。我们将分析代码的各个部分&#xff0c;并解释每个步骤所涉及的技术和原理。 一、什么是 WMI&#xff1f; WMI 是 Windows Manag…

【Qt学习笔记】Qt Creator环境下 信号与槽 详解(自定义信号槽、断连、lambda表达式等)

文章目录 1. 信号槽概念1.1 信号的本质1.2 槽的本质1.3 标准信号槽1.4 信号槽 实例 2. 自定义信号槽2.1 自定义槽函数2.2 自定义信号2.3 带参 信号槽 3. 信号槽的意义 与 作用4. 信号槽断连 &#xff08;了解&#xff09;5. lamda表达式的使用5.1 基本用法5.2 捕获局部变量5.3 …

论文阅读-GROUP:一种聚焦于工作负载组行为的端到端多步预测方法

摘要 准确地预测工作负载可以使网络服务提供商实现应用程序的主动运行管理&#xff0c;确保服务质量和成本效益。对于云原生应用程序来说&#xff0c;多个容器协同处理用户请求&#xff0c;导致每个容器的工作负载变化受到工作负载组行为的影响。然而&#xff0c;现有方法主要…

冻雨 冰雨。冻雨与冰雹的区别?

冻雨&#xff0c;也被称为冰雨 是一种降水形式&#xff0c;它发生在冷空气层覆盖在地面上方较薄的暖空气层之下。在这种情况下&#xff0c;雨水通过暖空气层下降时变成液态&#xff0c;但当它接触到冰点以下的地面或其他物体时&#xff0c;立即冻结形成冰层。这可以导致道路、…

用python编写爬虫,爬取房产信息

题目 报告要求 工程报告链接放在这里 https://download.csdn.net/download/Samature/88816284使用 1.安装jupyter notebook 2.用jupyter notebook打开工程里的ipynb文件&#xff0c;再run all就行 注意事项 可能遇到的bug 暂无&#xff0c;有的话私信我

使用dbeaver导入Excel到mysql数据库

最近业务需要将Excel导入到mysql数据库中&#xff0c;之前一直用的heisql&#xff0c;但是heidisql的导入功能太弱了&#xff0c;后来用了dbeaver&#xff0c;功能很强大。 一、安装dbeaver 首先去官网下载dbeaver社区版&#xff0c;社区版免费&#xff1a;dbeaver.io/ dbea…

C++进阶--C++11智能指针

目录 一、智能指针的使用及原理1.1 什么是智能指针1.2 智能指针的发展历史1.3 智能指针的使用1.3.1 内存泄漏问题1.3.2 利用异常的重新捕获解决1.3.3 利用智能指针解决 1.4 智能指针的原理1.4.1 需要考虑的问题1.4.2 为什么要解决智能指针对象的拷贝问题 二、C中的智能指针2.1 …

锁(二)队列同步器AQS

一、队列同步器AQS 1、定义 用来构建锁或者其他同步组件的基础框架&#xff0c;它使用了一个int成员变量表示同步状态&#xff0c;通过内置的FIFO队列来完成资源获取线程的排队工作。是实现锁的关键。 2、实现 同步器的设计是基于模板方法模式的&#xff0c;也就是说&#…

Excel——分类汇总

1.一级分类汇总 Q&#xff1a;请根据各销售地区统计销售额总数。 第一步&#xff1a;排序&#xff0c;我们需要根据销售地区汇总数据&#xff0c;我们就要对【销售地区】的内容进行排序。点击【销售地区】列中任意一个单元格&#xff0c;选择【数据】——【排序】&#xff0c…

Linux自有服务—防火墙和计划任务

Linux常用自有服务有NTP时间同步服务、firewalld防火墙服务和crond计划任务服务&#xff0c;NTP在上一篇中讲过&#xff0c;这次主要来说一下防火墙firewalld与计划任务的相关内容。如下。 一、Linux中防火墙firewalld 1、什么是防火墙 防火墙&#xff1a;防范一些网络攻击…

找不到concrt140.dll无法继续执行程序的多种解决方法

concrt140.dll文件的丢失可能会对Windows操作系统产生一系列显著的影响。作为系统运行过程中不可或缺的一部分&#xff0c;concrt140.dll是Microsoft Visual C Redistributable Package中包含的重要动态链接库文件&#xff0c;它为应用程序提供了关键的并发运行时支持。一旦该文…

Spring Boot 001 环境配置以及初始化项目

知识储备 后端&#xff1a;JavaSE, SSM&#xff08;SpringSpringMVCMyBatis&#xff09; 前端&#xff1a;HTML, CSS, Javascript 环境准备 JDK17下载 Java Downloads | Oracle 安装方式 JDK17在Windows安装以及环境变量配置&#xff08;超详细的教程&#xff09;_jdk17安装…

网络原理HTTP/HTTPS(1)

文章目录 HTTP抓包工具FIddler**HTTP请求****HTTP响应** 认识URLURL encode认识"方法"(method)1.GET方法使用Fiddler观察GET请求 2.POST方法使⽤Fiddler观察POST⽅法 经典面试题&#xff1a;GET和POST有啥区别请求报头&#xff08;header&#xff09;HostContent-Len…

Java+SpringBoot:构建稳定高效的计算机基础教学平台

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…