计算机网络基础 - 应用层(1)

2024-08-25 10:12

本文主要是介绍计算机网络基础 - 应用层(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

计算机网络基础

  • 应用层
    • 网络应用的体系结构
      • C/S 体系结构
      • P2P 体系结构
      • C/S 和 P2P 体系结构的混合体
    • 进程通信
      • 概述
      • 套接字(Socket)
      • TCP socket
      • UDP socket
    • 应用层协议
    • 应用层需要传输层提供的服务
    • Web 与 HTTP
      • 概念
      • 非持续连接和持续连接
      • HTTP报文格式
        • 请求报文
        • 响应报文
      • Cookie
      • Web 缓存


大家好呀!我是小笙,本章我主要分享计算机网络基础 - 应用层(1)学习总结,希望内容对你有所帮助!!

应用层

网络应用的体系结构

  • 客户-服务器模式(C/S:client/server)
  • 对等模式(P2P:Peer To Peer)
  • 混合体:客户-服务器和对等体系结构

C/S 体系结构

服务器

  • 一直运行
  • 固定的 IP 地址和周知的端号(约定)
  • 扩展性:服务器场(数据中心进行扩展、 扩展性差)

客户端

  • 主动与服务器通信
  • 与互联网有间歇性的连接
  • 可能是动态 IP 地址
  • 不直接与其它客户端通信

注意:服务器 IP 也不一定是固定的,但是域名必须是固定的。可以通过 ddns 来刷新服务器的动态 ip

P2P 体系结构

  • (几乎)没有一直运行的服务器
  • 任意端系统之间可以进行通信
  • 每一个节点既是客户端又是服务器
  • 参与的主机间歇性连接且可以改变 IP 地址
  • 难以管理

例子:Gnutella、迅雷

C/S 和 P2P 体系结构的混合体

Napster

  • 文件搜索:集中
  • 文件传输:P2P

即时通信

  • 在线检测:集中
    • 当用户上线时,向中心服务器注册其IP地址
    • 用户与中心服务器联系,以找到其在线好友的位置
  • 两个用户之间聊天:P2P

进程通信

概述

进程(在主机上运行的应用程序)

  • 分为客户端进程、服务端进程
  • 在同一个主机内,使用进程间通信机制通信
  • 不同主机间,通过报文来通信

进程寻址

进程为了接收报文,必须有一个标识,即:SAP(发送也需要标示)

  • 主机:唯一的 32位IP地址
  • 所采用的传输层协议:TCP or UDP
  • 端口号(Port Numbers)

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

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

如果Socket API 每次传输报文,都携带如此多的信息,太繁琐易错,不便于管理

套接字(Socket)

一个进程向另一个进程发送的报文必须通过下面的网络时候,进程通过一个称为套接字的软件接口向网络发送报文和从网络接收报文,因此套接字也称为应用程序和网络之间的应用程序编程接口 API

  • 进程向套接字发送报文或从套接字接收报文(套接字 <=> 门户)
  • 发送进程将报文推出门户,发送进程依赖于传输层设施在另外一侧的门将报文交付给接受进程
  • 接收进程从另外一端的门户收到报文(依赖于传输层设施)

image-20240814224408695

TCP socket

  • TCP服务,两个进程之间的通信需要之前要建立连接

  • 两个进程通信会持续一段时间,通信关系稳定

  • 可以用一个整数表示两个应用实体之间的通信关系,本地标示

    四元组:源端系统 ip 、源端系统 port 、目标端系统 ip 、目标端系统 port

UDP socket

  • UDP服务,两个进程之间的通信需要之前无需建立连接

    • 每个报文都是独立传输的
    • 前后报文可能给不同的分布式进程
  • 穿过层间接口的信息大小最小

  • 只能用一个整数表示本应用实体的标示

    二元组:本机 ip、本机 port

注意:但是传输报文时:必须要提供对方ip、port


应用层协议

运行在不同端系统上的应用进程如何相互交换报文(协议定义规范)

  • 交换的报文类型:请求和应答报文
  • 各种报文类型的语法:报文中的各个字段及其描述
  • 字段的语义:即字段取值的含义
  • 进程何时、如何发送报文及对报文进行响应的规则
  • 应用协议仅仅是应用的一个组成部分

公开协议以及专用协议

  • 公开协议:由RFC文档定义允许互操作,如:HTTP、SMTP
  • 专用(私有)协议:协议不公开,如:Skype

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

  • 数据丢失率
    • 有些应用则要求100%的可靠数据传输(如文件)
    • 有些应用(如音频)能容忍一定比例以下的数据丢失
  • 吞吐
    • 一些应用出于有效性考虑,对数据传输有严格的时间限制 (Internet 电话、交互式游戏 )
  • 延迟
    • 一些应用(如多媒体)必须需要最小限度的吞吐,从而使得应用能够有效运转
    • 一些应用能充分利用可供使用的吞吐(弹性应用)
  • 安全性(机密、完整性、可认证性)

常见应用对传输服务的要求

image-20240815222317474

Web 与 HTTP

概念

Web页由一些对象组成,对象可以是HTML文件、JPEG图像、Java小程序、声音剪辑文件等

  • 多数Web页都含有一个 HTML 基本文件,该 HTML 基本文件又包含若干对象的引用(链接)
  • 通过URL对每个对象进行引用:访问协议,用户名,口令字,端口等

Web 的应用层协议的核心是超文本传输协议 HTTP

  • 定义了 Web 客户向 Web 服务器请求 Web 页面的方式,以及服务器向客户传送 Web 页面的方式
  • 使用传输层 TCP 协议建立连接
  • HTTP 是无状态的,服务器并不维护客户的信息

非持续连接和持续连接

概述

在许多因特网应用程序中,客户和服务器在 个相当长的时间范围内通信,当这种客户一服务器的交互是经 TCP 进行的,应用程序的研制者就需要做一个重要决定 ,即每个请求/响应对是经个单独的 TCP 连接发送,还是所有的请求及其应经相同 TCP 连接发送呢?

前者就是非持续连接,后者就是持续连接(HTTP1.0 采用的是非持续连接;HTTP1.1 采用的是持续连接)

非持续连接存在的问题

  • 必须为每一个请求的对象建立和维护一个全新的连接,对于每个这样的连接,在客户和服务器中都要分配 TCP 的缓冲区和保持 TCP 变量,这给 Web 服务器带来了严重的负担,因为 Web 服务器可能同时服务于数以百计不同的客户的请求
  • 每一个对象经受两倍 RTT 的交付时延,即一个 RTT 用于创建 TCP ,另一个 RTT 用于请求和接收一个对象

响应时间模型

  • 往返时间 RTT:一个小的分组从客户端到服务器,再回到客户端的时间
  • 响应时间:发起TCP连接时间 + HTTP请求等待时间 + 传输时间 = 2RTT + 传输时间

HTTP报文格式

请求报文

请求报文第一行称为 请求行,后继的行称为 首部行,最后可能还有实体对象(实体对象会和首部行中间会有回车或者换行,注意是在特定的请求方法下才有内容,如 POST)

  • 请求行有三个字段:方法字段、URL 字段、HTTP 版本字段

    image-20240817171710053

  • 首部行指明了对象的主机域名/IP、是否继续连接、用户代理(比如浏览器版本)、语言类型等等

    image-20240817171933273

  • 一个HTTP请求报文的通用格式

    image-20240817172400390
响应报文

它也是由三部分组成:一个初始状态行首部行 , 然后是实体对象

  • 状态行有 3 个字段:协议版本字段、状态码和相应状态信息

  • 首部行指明了是否继续连接、服务器产生并发送该响应报文的日期和时间、用户代理(比如浏览器版本)、上次对象创建或者最后修改的日期和时间等等

    image-20240817220439467
  • 一个HTTP 响应报文的通用格式

    image-20240817220728619

响应状态码

  • 200 OK :请求成功
  • 301 Moved Permanently
    • 请求的对象已经被永久转移了;新的URL在响应报文的 Location(首部行中指定)
    • 客户端软件自动用新的 URL 去获取对象
  • 400 Bad Request :一个通用的差错代码,表示该请求不能被服务器理解
  • 404 Not Found :请求的文档在该服务上没有找到
  • 505 HTTP Version Not Supported:服务器不支持请求报文使用的 HTTP 协议版本

Cookie

用于维护客户和服务器之间的状态(HTTP 是无状态的)

image-20240817221119552

缺点

尽管 cookie 常常能简化用户的因特网活动,但是它的使用仍具有争议,因为它们被认为是对用户隐私的一种侵害;如我们刚才所见,结合 cookie 和用户提供的账户信息,Web 站点可以知道许多有关用户的信息,并可能将这些信息卖给第三方

Web 缓存

Web 缓存器 (Web cache) 也叫代理服务器,不访问原始服务器,就能满足客户的请求

  • 代理服务器既是服务器又是客户端
  • 浏览器将所有的 HTTP 请求发给代理服务器
    • 在缓存中的对象,直接返回对象
    • 如果不在缓存中,代理服务器请求原始服务器,然后再将对象返回给客户端

image-20240817221336106

如何判断放在代理服务器中的对象是否是陈旧的?

通过获取请求头的方式获取到 If-Modified-Since 信息(上次对象创建或者最后修改的日期和时间),进而可以判断出代理服务器中的对象在源服务器中是否有被修改过

这篇关于计算机网络基础 - 应用层(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105273

相关文章

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou

c++基础版

c++基础版 Windows环境搭建第一个C++程序c++程序运行原理注释常亮字面常亮符号常亮 变量数据类型整型实型常量类型确定char类型字符串布尔类型 控制台输入随机数产生枚举定义数组数组便利 指针基础野指针空指针指针运算动态内存分配 结构体结构体默认值结构体数组结构体指针结构体指针数组函数无返回值函数和void类型地址传递函数传递数组 引用函数引用传参返回指针的正确写法函数返回数组

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口int main(int argc, char *argv[]){// argc是命令行参数个数,argv是

【MRI基础】TR 和 TE 时间概念

重复时间 (TR) 磁共振成像 (MRI) 中的 TR(重复时间,repetition time)是施加于同一切片的连续脉冲序列之间的时间间隔。具体而言,TR 是施加一个 RF(射频)脉冲与施加下一个 RF 脉冲之间的持续时间。TR 以毫秒 (ms) 为单位,主要控制后续脉冲之前的纵向弛豫程度(T1 弛豫),使其成为显著影响 MRI 中的图像对比度和信号特性的重要参数。 回声时间 (TE)