计算机网络自顶向下-应用层

article/2025/10/10 11:37:53

一、简介:

网络应用是计算机网络存在的理由,没有了应用也不存在任何的网络协议。我们学习网络应用的原理和实现方面知识,从定义应用层概念开始,其中包括网络服务、客户】服务器、进程和运输层接口。
其中包括我们熟悉的web、email、dns等。

二、应用层协议原理

网络应用程序核心是能够在不同端系统和通过网络彼此通信的程序。像web应用程序,一个运行在web服务器主机,一个运行在用户主机上的浏览器程序。并且不需要关心下面层次的程序软件。

三、网络应用体系结构

应用程序体系结构由开发者设定,规定了如何在不同端系统上组织应用程序,当前两种主流的体系结构:客户-服务器体系结构(C-S)和对等(P2P)体系结构

  • 客户服务器体系结构:一个总是打开的主机称为服务器,它服务于许多其他主机的请求称为客户。客户向服务器发起请求,服务器向客户发送响应,客户之间没有通信。服务器必须有固定的IP地址。

  • P2P体系结构:应用程序在间断连接的主机之间直接通信没有专门的服务器。如电话会议、视频等。每个主机被称为对等方。每个对等方既可以请求数据也可以服务其他对等方。

四、进程通信

两个不同端系统之间的应用程序之间通信起始就是两个进程之间的通信,跨越计算机网络交换报文而进行通信。发送进程向网络发送报文,接收进程接收报文并且回应。

  1. 客户和服务器进程:网络应用程序由成对的进程组成,如web应用程序由客户端的客户浏览器进程与web服务器端进程。对于P2P来说下载文件端是客户端,上传文件端是服务端。所以我们定义:发起通信的进程被标识为客户。会话开始等待连接的进程为服务器。

  2. 计算机网络与进程之间的接口:进程通过套接字来实现软件接口向网络发送博文和接收报文。如socket套接字。

  3. 进程寻址:发送报文需要目的地址,所以需要两种信息:1.主机地址也就是IP地址。2.目的主机中的接收进程,也就是端口号。

五、可供应用程序使用的运输服务

套接字是应用进程和运输层协议之间的接口,在套接字的另一侧,运输层协议负责从接收进程的套接字得到报文。运输层可以提供什么服务呢?

  1. 可靠的数据传输:确保应用程序发送的数据准确无误地交付给另一端

  2. 吞吐量:以某种特定速率提供确保的可用吞吐量。可用吞吐量:发送进程能够向接收进程交付比特的速率。

  3. 定时:如超时重传机制

  4. 安全性:对发送进程的数据进行加密传输,在接收方进行解密

六、因特网提供的运输服务

因特网为应用层提供了两个运输层协议:TCP和UDP

1. TCP:TCP服务提供面向连接服务和可靠数据传输服务。

  • 面向连接:应用层数据报文在开始前,tcp让客户和服务器相互交换运输层信息。也就是三次握手。

  • 可靠的数据传输服务:可以无差错、按适当顺序交付所有发送的数据。没有字节丢失和冗余。

  • 拥塞控制:当发送方和接收方之间网络出现了阻塞的时候,TCP的拥塞控制会抑制发送进程和限制tcp连接。

2. UDP:不提供不必要服务的轻量级运输协议。没有握、不可靠数据传输、没有拥塞控制。

七、应用层协议

应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文。应用层协议是网络应用的一部分,例如web应用层协议是http,电子邮件的应用层协议是smtp。应用层协议定义了:

  • 交换的报文类型:请求报文和响应报文

  • 各种报文类型语法:报文中各个字段如何描述的

  • 字段的语义:字段中的信息含义确定一个进程何时以及如何发送报文,对报文进行响应规则。

八、HTTP

  • HTTP:web的的应用层协议:超文本传输协议。hrrp定义了web客户向web服务器请求web页面的方式,以及服务器向客户传送页面的方式。

  • web页面由对象组成,一个对象表示一个文件,多数web页面由一个HTML基本文件和多个对象组成。HTML基本文件通过对象的URL地址引用页面中的其他对象。
    3URL由两

  • 分组成,存放对象的服务器主机名和对象的路径名。

  • HTTP使用tcp作为它的运输协议。http客户首先发起一个与服务器连接的tcp请求,一旦建立连接,浏览器和服务器就可以通过套接字来访问tcp,客户端向套接字发送请求和接收响应。

  • 非持续连接:每个tcp连接在服务器发送一个对象之后就关闭,连接不为其他对象而持续。当有多个对象时候就会产生多个连接。

  • 持续连接:HTTP1.1,服务器发送响应之后保持该连接,后续的请求和响应可以通过相同的连接进行传送。

1.HTTP报文格式

  • 客户端请求报文:请求行(request line)、首部行(header)、空行和请求数据四个部分组成,

     	GET /hello.txt HTTP/1.1Host: www.example.comUser-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3Connection:closeAccept-Language: en, mi
    

第一行:请求行:方法字段(get)+ URL字段(/hello.txt)+ HTTP版本字段(HTTP/1.1)。其中方法字段可以是 get、post、head、put、delete。
后继的行:首部行:host:指主机
Connection:close:表示服务器不使用持续连接。
User-Agent:用户代理,指服务器发送请求的浏览器类型。
Accept-Language:用户想要对象的语法版本
如图:
在这里插入图片描述

2.服务器端响应报文:状态行、首部行、空行和响应正文四部分组成。

		HTTP/1.1 200 OKDate: Mon, 27 Jul 2009 12:28:53 GMTServer: ApacheLast-Modified: Wed, 22 Jul 2009 19:15:56 GMTContent-Length: 51Content-Type: text/plain

第一行:状态行:版本号+状态
后继的行:首部行:Connection:close:发送完报文之后关闭tcp连接
Date:服务器产生并发送报文的时间
Server:指报文由Apache服务器产生
Last-Modified:指最后一次修改时间
Content-Length:发送对象的字节数
Content-Type:发送数据类型
在这里插入图片描述

3.cookie:用户与服务器之间的交互,用于标识客户,将内容与客户身份联系起来

  • cookie的四个组件

    • http请求报文中的一个cookie的首部行

    • http响应报文中的一个cookie的首部行

    • web站点的一个后端数据库

    • 用户端系统中保留的cookie文件

  • cookie使用:当客户端首次连接服务器时候,服务器将产生一个唯一的标识码,通过响应头部包含一个Set-cookie:1666 的首部传送给客户端,客户端收到之后保存在本地文件,在之后放服务端,都会在请求报文的首部行加入cookie:1666 。HTML基本文件通过对象的URL地址引用页面中的其他对象。

  • cookie作用:服务器可以知道客户端在什么时间做了什么,就像我们逛淘宝一样,将各种东西加入购物车,服务端维护我们的物品列表,最后一起付款一样。

3.web缓冲
web缓冲区也叫代理服务器,它能够代表初始web服务器来满足http请求的网络实体。它有自己的缓冲区,存储最近请求过对象的副本。web缓冲器既是服务端又是客户端。

  • 工作流程:当浏览器向服务端发起一个对象请求时,web缓冲区先看自己缓冲区有没有该对象,如果有就返回给浏览器,如果没有则向服务器请求,服务器返回时浏览器将保持副本,并且返回给客户端。

  • 作用:
    1.web缓冲区可以大大减少请求时间。
    2.大大减少一个机构接入链路到因特网通信量,
    3.大大减少因特网的web流量。
    4.条件GET方法

上面说的web缓冲区可以减少请求时间,但是如果服务器端对象以及更改,那么缓冲区的对象就是陈旧的,因此http有个机制,允许缓冲区证明对象是最新的,这个机制就是条件get。

九、电子邮件

1.电子邮件系统由三部分组成:用户代理、邮件服务器、简单邮件传输协议(SMTP)。
2. 使用tcp可靠数据传输服务
3.邮件服务器即运行SMTP客户端也运行SMTP服务端,当发送邮件时变为客户端,当接收文件时表现为服务端。

1.SMTP:SMTP用于从发送方的邮件服务器发送报文到接收方的邮件服务器。

  • SMTP如何将报文从发送邮件服务器发送到接收服务器:客户SMTP在端口号25建立一个与服务器连接的tcp连接,如果服务器没有开则稍后重试,如果开了则建立连接、握手,如何客户端发送报文。

  • SMTP与HTTP区别:
    相同点:都是从一台主机到另一台主机发送报文。持续的http和smtp都是持续连接的。
    不同点:
    1.http主要是拉协议,从服务器拉取资源。smtp是推协议,发送端向服务器推送资源。
    2.smtp报文采用7比特ASCII码格式,http没有限制
    3.http把每个对象封装在自己的HTTP响应报文中,而SMTP则把所有报文放在一个报文中。

2.邮件访问协议
现在的邮件访问使用的是 客户-服务器体系结构,用户通常在本地运行一个用户代理程序,而他访问存储在总是开启的共享邮件服务器上的邮箱。下面是三种当今流行的邮件访问协议

  • POP3:第三版邮局协议:POP3是一个简单的邮件访问协议,将邮件从接收方服务器传送到接收方的用户代理。
    工作流程:
    1.特许:用户代理发送用户名、口令以及鉴别用户
    2.事务处理:用户代理取回报文,同时进行阅读、删除等做标记操作
    3.更新:删除邮件服务器被标记的报文

  • IMAP:因特网邮件访问协议:当邮件到达服务器时候,自动与接收者的文件夹相关联。为用户提供了远程文件夹。

  • 基于web的电子邮件:用户与远程邮箱通过http进行

十、DNS 因特网的目录服务

  • DNS:域名系统:能够进行主机名到IP地址转换的目录服务,dns由一个分层的DNS服务器实现的分布式数据库,dns一个使得主机能够查询分布式数据库的应用层协议。

  • DNS运行在UDP之上。端口号53.

  • DNS通常由应用层其他协议使用。

  • DNS提供的服务:1.域名解析,2.主机别名、邮件服务器别名、负载分配。

DNS工作机理:一台主机上运行着DNS服务器,浏览器访问一个主机,将主机名发送给DNS应用客户端,然后DNS客户端向DNS服务器发起请求,服务端解析主机名的IP地址,
然后客户端接收到服务端带有IP地址的响应报文,然后浏览器收到DNS发送来的IP地址并访问。

分布式、层次数据库:DNS使用了大量DNS服务器,他们以层次方式组织起来分布在全世界,因特网上所有主机映射在这些服务器中。大致分为三种服务器:根DNS服务器、顶级域DNS服务器、权威DNS服务器。如图
在这里插入图片描述

首先如果客户想要访问baidu.com,客户首先与跟服务器进行联系,跟服务器返回顶域名com的TLD服务器,然后客户与TLD服务器联系,TLD服务器返回baidu.com的权威覅我去,最后客户与权威服务器联系,将baidu.com的IP地址返回客户。根DNS服务器:由13个不同组织管理着400多个根服务器 ,根服务器提供TLD服务器的IP地址。顶级域DNS服务器:每个顶级域名(com、edu、cn、net)和所有国家的顶级域名(uk、ca)都有TLD服务器。权威DNS服务器:权威DNS 服务器保存了一个组织机构可提供公共可访问的DNS记录。本地DNS服务器:不属于DNS服务器层次机构,但是对DNS层次结构至关重要。它起着代理作用,将主机请求发往DNS服务器。

DNS缓冲:为了减少在因特网上传输的DNS数量。作用机理如图web缓冲区。

DNS记录和报文

  • 记录:共同实现DNS分布式数据库的所有DNS服务器存储了资源记录,这些资源记录提供了主机名和IP地址的映射。每个DNS回答报文包含了一条或多条资源记录。资源记录包含以下4个字段:
    (NAME、Value、Type、TTL)其他TTL是记录的生存时间,name和value的值取决于Type:
    TYPE=A:name是主机名,value对应IP地址。
    TYPE=NS: names域名,Value对应域中主机IP地址的获取该权威DNS服务器主机名。
    TYPE=CNAME: names是主机名,value是对应的规范主机名。
    TYPE=MX: names是别名,value是邮件服务器的规范主机名

  • 报文格式如图
    在这里插入图片描述

    前12个字节是首部区域:标识符:16比特,用于表示查询。该标识符会被复制到查询的回答报文中。
    标志:1比特的查询(0)/回答(1)。1比特的权威服务器标志。1比特的递归查询。
    4个数:表示首部后面4类数据区域出现的数量

在DNS数据库中插入记录:当注册一个域名时,需要向注册机构提供权威DNS服务器的名字和IP地址,然后注册机构 将记录输入顶级域名服务器。

十一、P2P文件发布

P2P文件发布:单一服务器向大量对等方发送文件。每个对等方可以向其他对等方重新发送它所受到的文件任何部分,从而在发送过程中协助服务器。

1.P2P体系结构的扩展性:P2P体系结构中的每个对等方都可以帮助服务器分发该文件,特别是当每个对等方接收到某些文件数据时它可以使用自己的上载能力将数据发送给其他对等方。

2.BitTorrent:P2P的文件分发协议。参与一个文件分发的所有对等方集合被称为洪流。洪流中的对等方彼此下载等长度的文件块(一般是256k)。每个对等方首次加入洪流时没有块,随着时间它的块越来越多,等一个对等方具有块的子集时候,它就可以随时离开,或者留下为其他对等方传输。

十二、视频流和内容分发网

1.视频:视频是一系列图像以恒定的速率(每秒30张图像)来展示,一张图像由像素阵列组成,每个像素是由一些比特编码来表示亮度和颜色。视频的一个特征是能够压缩,所以比特率是权衡视频质量。
2.HTTP流:存储在HTTP服务器中的一个普通视频文件,每个文件有特定的URL。
3.DASH:经HTTP的动态适应性流:视频编码有多个不同版本,每个版本的比特率不同, 对应的视频质量不同。
4.CDN:内容分发网:管理分布在各个地方的视频服务器。

十三、套接字编程

1.UDP套接字编程:

	服务器创建套接字 socket( )填充服务器网络信息结构体 sockaddr_in将套接字与服务器网络信息结构体绑定 bind( )进行通信 recvfrom( )/sendto( )客户端创建套接字 socket( )填充服务器网络信息结构体 sockaddr_in进行通信 sendto( )/recvfrom( )

2.TCP编程

	服务器:创建套接字 socket( )填充服务器网络信息结构体 sockaddr_in将套接字与服务器网络信息结构体绑定 bind( ) 固定自己的信息将套接字设置为被动监听状态 listen( )阻塞等待客户端的连接请求 accept( )进行通信 接收数据recv( )/发送数据 send( )关闭套接字close()客户端:创建套接字 socket( )填充服务器网络信息结构体 sockaddr_in发送客户端连接请求 connect( )进行通信 发送数据 send( )/接收数据recv( )关闭套接字close()	

3.C语言实现socket套接字网络编程案例:
下面是我写的一篇巨详细的socket编程讲解
Linux操作系统下C语言网络编程


http://chatgpt.dhexx.cn/article/HvyRwvTG.shtml

相关文章

《计算机网络 自顶向下方法》学习整理

《计算机网络 自顶向下方法》学习整理 计算机网络1、计算机网络(1)英特网(2)网络边缘(3)网络核心(4)时延、丢包、吞吐量(5)协议层次 2、应用层(1&…

计算机网络复习(自顶向下)知识点总结(一天一夜超8000字,详细知识点总结,带重点标注目录)

计算机网络复习(自顶向下)1~2章 复习目录一、计算机网络基本概念1.1 认识英特网1.2 网络边缘1.3 网络核心1.4 ⭐时延、丢包和吞吐量1.5 协议层次和服务模型1.6 安全和历史(略) 二、应用层2.1 应用层协议原理2.2 ⭐Web和HTTP协议2.…

游戏引擎之物理碰撞检测原理(AABB算法)

在游戏或者仿真虚拟环境中需要模拟现实中的物理碰撞,由于模型边缘复杂,在精确度不高的游戏中经常把它处理为正方体盒子,然后再检测物理碰撞,常用的算法为AABB碰撞盒算法 先遍历模型所有顶点遍历所有顶点,然后再不同方…

不使用物理系统判断两个矩形是否碰撞

如图所示,不使用物理系统去检测两个物体是否碰撞的效果。 注意:两个物体如果一直相交,在Update中处理的时候会一直输出,在实际使用时需要注意相交时的处理。 直接上代码: 检测碰撞使用的是两个节点,节点有…

游戏物理中的碰撞测试(一) - 如何检测碰撞

日期:2008年10月 介绍 在文章中我会介绍3D撞击测试的原理和一些基本的实现步骤,当然也会写一些我在实现上的心得。所有的例子我都是在Visual C Express 2008里编译,还需要下载最新版本的OpenGL类库。我想提一下,这并不是一个新的课…

UE4 物理碰撞(C++)

设置碰撞 // 组件 ->SetCollisionEnabled(ECollisionEnabled::NoCollision); 注释:没有碰撞 // 组件 ->SetCollisionEnabled(ECollisionEnabled::PhysicsOnly); 注释:只有物理 // 组件 ->SetCollisionEnabled(ECollisionEnabled::Quer…

cocos creator 3.x 2d物理碰撞检测(不使用物理刚体)

cocos creator 3.x 2d物理碰撞检测(不使用物理刚体) 前言 我含着热泪而来,因为获取不到2d物体的碰撞检测弄了半天。之前一直学2.x,后面学了3.x版本,发现对于新手来说,蛮多需要去适应的,最主要…

BEPU物理引擎碰撞系统的架构与设计

前面我们讲解了如何监听物理引擎的碰撞事件, 在物理引擎内核中如何架构与设计碰撞规则,使得物理Entity与周围的物理环境产生碰撞时,如何灵活的控制物理碰撞,本节給大家详细的讲解BEPUphysicsint 物理引擎内部是如何管理与控制碰撞规则的。本文主要讲解3个…

11. unity 物理系统和碰撞检测+射击游戏案例

1. 物理系统 也就是在游戏场景中添加日常的重力,碰撞等到物理属性 1.1 刚体组件(Rigidbody) 给模型添加刚体组件后,模型会具备一些物理属性,比如重力,速度,加速度等,在属性窗口中点击Add Component,选择Physics->Rigidbody,如下图所示:添加刚体组件后,运行游…

Cocos Creator 如何处理物理和碰撞检测?

Cocos Creator 如何处理物理和碰撞检测? cocos creator 版本:v3.6.1 Cocos Creator 3.x 实现碰撞检测 Cocos Creator 通过使用物理引擎来处理物理和碰撞检测。Cocos Creator 默认使用 Box2D 物理引擎,也支持使用 Chipmunk 物理引擎。以下是处理物理和碰撞…

【唐老狮】Unity——物理系统(碰撞检测)

【学习目标】 碰撞检测 能够让两个游戏物体之间产生碰撞 能够让两个物体碰撞时表现出不同效果 能够通过代码检测到碰撞产生的不同阶段 能够使用触发器让两个物体相互穿透 能够通过代码检测到触发产生的不同阶段 【碰撞检测】 【碰撞的必要条件】 两个游戏物体&#xff…

unity物理碰撞操作方案

经unity官方网站资料改写整理书写本博客,原网址方案链接如下: Lesson 2.4 - Collision Decisions - Unity Learn 首先 1.先创建两个物体 然后 2.给这两个物体加上Box Collider 组件,并勾选“是触发器”(英文:is 啥…

2D物理系统——碰撞器

1、碰撞器 碰撞器是用于在物理系统中表示物体体积的形状或范围,刚体通过得到碰撞器的范围信息进行计算,判断两个物体的范围是否接触,如果接触刚体就会模拟力的效果产生速度和旋转 2、2D碰撞器 补充: 边界碰撞器可以用作不规则地…

JavaScript 游戏开发:手把手实现碰撞物理引擎

目录 基础结构绘制小球移动小球重构代码碰撞检测边界碰撞向量的基本操作碰撞处理动量守恒定律动能守恒定律 非弹性碰撞重力总结 年前我看到合成大西瓜小游戏火了,想到之前从来没有研究过游戏方面的开发,这次就想趁着这个机会看看 JavaScript 游戏开发&am…

unity 物理碰撞

一 .意义 在游戏里经常会发生角色碰撞的场景,但是unity模型碰撞没有啥效果,就需要物理引擎。 物理引擎就是在游戏中模拟真实的物理效果。 二.刚体 Rigidbody( 刚体) 刚体组件可使游戏对象在物理系统的控制下运动,任何游戏对象只有添加刚…

【Unity探究】物理碰撞实验

这几天为了准备面试,所以决定对平时学习中的盲点扫盲一下,首先想到的就是物理碰撞。以前没有好好研究过,一直模糊不清,到底什么条件下才可以产生物理碰撞呢?只要其中一个有Rigidbody就可以了吗?所以进行了下…

物理系统碰撞相关原理及算法

1.物理模拟相关过程 1) 积分Integrate(物体运动位置和朝向的迭代) 2)碰撞检测 Collision Detect(检测碰撞体间是否接触以及相关碰撞信息) 1.粗略碰撞检测BroadPhase(粗略判断碰撞体间是否接触&…

Linux MySQL8.0.11版本升级到MySQL8.0.23【数据库备份】

因修复绿盟扫出来的一系列漏洞进行版本升级 msyql下载链接:https://dev.mysql.com/downloads/mysql/ 1.选择对应linux版本下载 有两种方式,一种是用rz命令选择文件直接上传。 没有rz命令,需要先下载: # yum -y install lrzsz #…

mysql进阶(二十八)GRANT REVOKE用法

文章目录 一、前言二、查看用户权限三、撤销已赋予给 MySQL 用户的权限四、grant、revoke 用户权限注意事项五、用户和权限管理命令六、 grant 权限七、拓展阅读 一、前言 MySQL权限系统围绕两个概念: 认证->确定用户是否允许连接数据库服务器;授权…

MySQL8.0.21升级到8.0.28(Linux)

需要提前准备好MySQL8.0.28的压缩包文件 1 查看当前mysql版本 2 停止当前运行的mysql service mysqld stop 3 将下载好的压缩包导入(8.0.28),解压压缩包 sudo tar -xvf mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz -C /usr/local/ 4 修改之前的文件名,将mysql改为mysqlol…