【计算机网络:自顶向下方法】(二)应用层

article/2025/10/10 5:30:57

tm
【计算机网络:自顶向下方法】(二)应用层

文章目录

  • 应用层
    • 如何创建一个新的网络应用?
  • 2.1 应用层原理
    • 网络应用的体系结构
      • 对等模式(P2P:Peer To Peer)
      • 混合体:客户-服务器和对等体系结构
    • 进程通信
      • 分布式进程通信需要解决的问题
        • 问题1:进程标示和寻址问题(服务用户)
        • 问题2:传输层提供的服务-层间信息的代表
          • TCP上的socket
          • UDP上的socket
        • 问题3:如何使用传输层提供的服务实现应用
    • 应用层协议
        • Internet 传输层提供的服务
        • 为什么要有UDP
        • 安全&TCP
  • 2.2 Web and HTTP
    • HTTP
      • HTTP连接
    • HTTP请求报文
    • 用户-服务器状态 : cookies
    • Web缓存 (代理(proxy server)服务器)
      • 条件GET方法
    • FTP: 文件传输协议
    • 电子邮件(EMail)
      • eg
      • 简单的SMTP交互
      • 小结
      • 邮件报文格式
      • POP3
    • DNS (53端口, 给应用程序应用的程序 )
      • DNS系统需要解决的问题
      • 问题2:解析问题-名字服务器(NameServer)
      • DNS协议、报文
      • 提高性能 -- > 缓存
      • 问题3:维护问题:新增一个域
      • 攻击DNS
    • P2P
      • 文件分发
        • BitTorrent
      • p2p文件共享
        • 集中式目录
        • 泛洪 (完全分布式)
      • 利用不匀称性:KaZaA
    • CDN
      • 视频流化服务和CDN:上下文
    • Socket编程
        • socket俩个重要的数据结构
      • UDPsocket 编程
        • 运行过程
      • TCPsocket 编程
        • TCP中的socket编程示例
  • ==**🌹感谢阅读🌹**==

学习推荐 : 中科大计算机网络自顶向下
在这里插入图片描述

应用层

如何创建一个新的网络应用?

  • 编程
    • 在不同的端系统上运行 通过网络基础设施提供的服 务,应用进程彼此通信
    • 如Web: Web 服务器软件与浏览器软件 通信
  • 网络核心中没有应用层软件
    • 网络核心没有应用层功能
    • 网络应用只在端系统上存在 ,快速网络应用开发和部署

2.1 应用层原理

网络应用的体系结构

在这里插入图片描述

对等模式(P2P:Peer To Peer)

在这里插入图片描述

混合体:客户-服务器和对等体系结构

在这里插入图片描述
在这里插入图片描述

进程通信

在这里插入图片描述

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

在这里插入图片描述

问题1:进程标示和寻址问题(服务用户)

  • HTTP默认端口号 80 SMTP : 25
    在这里插入图片描述

问题2:传输层提供的服务-层间信息的代表

在这里插入图片描述

TCP上的socket

在这里插入图片描述

在这里插入图片描述

UDP上的socket

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

问题3:如何使用传输层提供的服务实现应用

在这里插入图片描述

应用层协议

在这里插入图片描述

  • 应用需要传输层提供什么样的服务? 如何描述传输层的服务?
    在这里插入图片描述
  • 常见应用对传输服务的要求
    在这里插入图片描述

Internet 传输层提供的服务

在这里插入图片描述

为什么要有UDP

在这里插入图片描述
在这里插入图片描述

安全&TCP

在这里插入图片描述

2.2 Web and HTTP

在这里插入图片描述

HTTP

  • 超文本传输协议( HyperText Transfer Protocol) : 文本与文本之间任意指向的关系
    在这里插入图片描述
  • Web页面(也叫文档) : 由对象注册的,一个对象只是一个文件.
  • 多数Web页面含有一个基本的HTML文件
    在这里插入图片描述

HTTP连接

在这里插入图片描述

  • 非持久HTTP连接
    在这里插入图片描述
  • 响应时间模型
    在这里插入图片描述
  • 持久HTPP
    在这里插入图片描述

HTTP请求报文

在这里插入图片描述

在这里插入图片描述

  • 提交表单输入
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

用户-服务器状态 : cookies

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Web缓存 (代理(proxy server)服务器)

在这里插入图片描述

  • 缓存既是客户端又是 服务器
  • 通常缓存是由ISP安 装 (大学、公司、居 民区ISP)
    为什么要使用Web缓存 ?
    降低客户端的请求响应时 间
    可以大大减少一个机构内 部网络与Internent接入 链路上的流量
    互联网大量采用了缓存: 可以使较弱的ICP也能够 有效提供内容
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

改进

缓存例子:安装本地缓存
在这里插入图片描述

在这里插入图片描述

  • 总体延迟:  = 0.6 * (从原始服务器获取对象的 延迟) +0.4 * (从缓存获取对象的延 迟)
     = 0.6 (2.01) + 0.4 (~msecs)  = ~ 1.2 secs  比安装154Mbps链路还来得小 (而且 比较便宜!)

条件GET方法

在这里插入图片描述

FTP: 文件传输协议

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

电子邮件(EMail)

在这里插入图片描述

  • 邮件服务器
    •  邮箱中管理和维护发送给用户 的邮件
    • 输出报文队列保持待发送邮件 报文
    •  邮件服务器之间的SMTP协议 :发送email报文
      •  客户:发送方邮件服务器
      •  服务器:接收端邮件服务 器
  • 使用TCP在客户端和服务器之间传送报文,端口 号为25
  • 直接传输:从发送方服务器到接收方服务器
  • 传输的3个阶段 握手 传输报文 关闭
  • 命令/响应交互 命令:ASCII文本 响应:状态码和状态信息
  • 报文必须为7位ASCII码

eg

在这里插入图片描述

简单的SMTP交互

  • telnet servername 25
  •  enter HELO, MAIL FROM, RCPT TO, DATA, QUIT commands

小结

  • HTPP :拉协议 ,用户使用HTTP从服务器拉取这些信息
  • SMTP :推协议,发送邮件服务器把文件推向接受邮件服务器。
    在这里插入图片描述

邮件报文格式

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

POP3

在这里插入图片描述
在这里插入图片描述

DNS (53端口, 给应用程序应用的程序 )

在这里插入图片描述
在这里插入图片描述

  • 负载均衡 : DNS也用于冗余的服务器之间进行负载分配 , 繁忙的站点被冗余分布在多台服务器上,每台服务器均运行在不同的端系统上,每个都有不同的IP地址。

DNS系统需要解决的问题

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

问题2:解析问题-名字服务器(NameServer)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • Value : IP

  • T : type
    在这里插入图片描述

  • 区域名字服务器维护资源记录

  • 资源记录(resource records)

    • 作用:维护 域名-IP地址(其它)的映射关系
    • 位置:Name Server的分布式数据库中
  • RR格式: (domain_name, ttl, type,class,Value)

    • Domain_name: 域名
    • Ttl: time to live : 生存时间(权威,缓冲记录)
    • Class 类别 :对于Internet,值为IN
    • Value 值:可以是数字,域名或ASCII串
    • Type 类别:资源记录的类型—见下页

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

DNS协议、报文

在这里插入图片描述
在这里插入图片描述

提高性能 – > 缓存

一旦名字服务器学到了一个映射,就将该映射 缓存起来
 根服务器通常都在本地服务器中缓存着 使得根服务器不用经常被访问
目的:提高效率 可能存在的问题:如果情况变化,缓存结果和 权威资源记录不一致
解决方案:TTL(默认2天)

问题3:维护问题:新增一个域

在这里插入图片描述

攻击DNS

在这里插入图片描述

P2P

  • 纯P2P架构 :  没有(或极少)一直运行的 服务器 任意端系统都可以直接通信  利用peer的服务能力  Peer节点间歇上网,每次IP 地址都有可能变化
  • 例子: 文件分发 (BitTorrent) 流媒体(KanKan)  VoIP (Skype)
  • 非结构化P2P : 集中化目录 , 完全分布式,混合
  • 结构化p2p :DHT(分布式散列表)维护环or树的有序拓扑结构( 不断深入的过程)

在这里插入图片描述

  • 分布式命名
  • 哈希值对应唯一的ID

文件分发

  • 问题: 从一台服务器分发文件(大小F)到N个peer 需要多少时间?
    在这里插入图片描述
  • CS模式
  • 在这里插入图片描述
    在这里插入图片描述
  • 当N足够的大的时候 ,取等号
  • P2P模式

在这里插入图片描述
在这里插入图片描述

BitTorrent

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

p2p文件共享

在这里插入图片描述

  • 两大问题: 如何定位所需资源 如何处理对等方的 加入与离开
  • 可能的方案 :集中 分散 半分散

集中式目录

在这里插入图片描述

泛洪 (完全分布式)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

利用不匀称性:KaZaA

在这里插入图片描述

  • KaZaA:查询
    在这里插入图片描述
    在这里插入图片描述

CDN

视频流化服务和CDN:上下文

  • 流量大、用户多 、异构性  不同用户拥有不同的能力(例如:有线接入和移 动用户;带宽丰富和受限用户 . — > 解决方案: 分布式的,应用层面的基础设施

  • 在这里插入图片描述

  • 由于存储下载视频 是一对一的关系,则下载未免有些慢了,于是就有了存储视频的流化服务.

  • 多媒体流化服务:DASH
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 互联网络主机-主机之间的通信作为一种服务向用户提供
  • OTT 挑战: 在拥塞的互联网上复制内容 “over the top”
    在这里插入图片描述
    1 : 流量服务器
    2、向本地DNS服务器解析
    3、返回URL
    4、 告诉他离他最近的客户端的ip地址
    6、再由kingCDN 向客户提供流化服务

Socket编程

  • 目标:建立客户机/服务器的应用中的通信运用socket
  • socket:相当于应用进程和点对点传输协议之间的一扇门
  • socket类型:对应TCP和UDP有两种socket
    在这里插入图片描述### TCP Socket
    在这里插入图片描述+ 过程
    在这里插入图片描述
    在这里插入图片描述
    主要!!
    在这里插入图片描述
    在这里插入图片描述
  • 重点理解堵塞 , 堵塞的时候 可以实现多进程 。。OS的内容
  • 服务器一个端口对应许多个客户端端口,每个都是独立的会话关系,对应不同的socket。老师说过要区分端口和socket的概念
  • TCP端口整数代表的是一个会话关系
  • TCP : 四元组 ! < 1, 2,3, 4>
  • 一个端口只能被一个服务器进程绑定,可以被多个进程共用。
  • 端口是可以共用的,而socket的整数值不一样的
    在这里插入图片描述
  • Welcome socket : 返回一个整数

socket俩个重要的数据结构

// IP地址和port捆绑关系的数据结构(标示进程的端节点)
struct sockaddr_in { short sin_family; //地址族u_short sin_port;// port端口struct in_addr ,sin_addr; //IP 地址char sin_zero[8]; // align  对齐
};//数据结构 hostent 域名和IP地址的数据结构
struct hostent { char *h_name;//主机域名char **h_aliases; //数组存储 主机别名  int h_addrtype; int h_length; /*地址长度*/char **h_addr_list; // 数组存储 IP地址#define h_addr h_addr_list[0];
};

UDPsocket 编程

UDP提供的是一种不可靠的数据流传输,传输过程中可能会丢包,接收的时候顺序也可能被打乱。

UDP:客户机与服务器之间没有连接

  • 发送数据前不需要握手
  • 发送数据包附加IP地址+端口号
  • 接收方从数据包中提取处IP地址+端口号
    在这里插入图片描述UDP中的socket编程示例
  • 下面俩个程序的作用是 在用户端发送字符串给服务端, 然后服务端把字符串修改为大写在发送给客户端
  • 这里jupyter notebook中进行编程,安装好jupyter notebook后,在命令行执行 (我用的vscode)UDPServer.ipynb
from socket import * #引入socket库serverPort = 12000 #服务器端口号
serverSocket = socket(AF_INET, SOCK_DGRAM) #创建服务器套接字
serverSocket.bind(('', serverPort)) #给套接字绑定端口号
print('The server is ready to receive.')while True: #服务器要一直在线等待,所以给一个死循环message, clientAddress = serverSocket.recvfrom(2048) #从服务器套接字中读取信息(发送的消息和客户机IP地址+端口号)modifiedMessage = message.decode().upper() #对消息进行处理(此处是改大写)serverSocket.sendto(modifiedMessage.encode(), clientAddress) #将处理后的消息发回给客户机

UDPClient.ipynb

from socket import * #引入socket库serverName = gethostname() #由于没得服务器,服务器主机用本机来当
serverPort = 12000 #服务器端口号
clientSocket = socket(AF_INET, SOCK_DGRAM) #创建客户机套接字message = input('Input lowercase sentence:') #得到输入字符串
clientSocket.sendto(message.encode(),(serverName, serverPort)) #发送数据到相应主机名+端口号的服务器进程modifiedMessage, serverAddress = clientSocket.recvfrom(2048) #接收服务器发回的消息
print(modifiedMessage.decode()) #显示接收的字符串clientSocket.close() #关闭客户机socket

运行过程

  • 必须先运行服务器端

在这里插入图片描述

在这里插入图片描述

TCPsocket 编程

  • 服务器的先行准备
    • 服务器必须先运行
    • 服务器需要创建socket来连接客户机
  • 客户机连接服务器
    • 客户机需要创建自己的socket,明确服务器进程的IP地址和端口号
    • 客户机创建socket时,客户机和服务器之间需建立TCP连接
  • 服务器接收客户机消息
    • 服务器需创建一个新的socket,为了服务器进程能够和客户机进行通信
      • 要运行服务器与多个客户机进行通信
      • 用源的端口号来区分不同的客户机

TCP提供的是一种可靠的字节流(byte-stream)传输(pipe)。

在这里插入图片描述

TCP中的socket编程示例

  • TCP服务器代码
    TCPServer.ipynb
from socket import * #引入socket库serverPort = 12000 #服务器端口号
serverSocket = socket(AF_INET, SOCK_STREAM) #创建服务器套接字(前台)
serverSocket.bind(('', serverPort)) #给套接字绑定端口号
serverSocket.listen(1)
print('The server is ready to receive.')while True: #服务器要一直在线等待,所以给一个死循环connectionSocket, addr = serverSocket.accept() #前台套接字接收到请求后,创建一个新的套接字(窗口)sentence = connectionSocket.recv(1024).decode() #窗口套接字读取信息capitalizedSentence = sentence.upper() #对消息进行处理(此处是改大写)connectionSocket.send(capitalizedSentence.encode()) #将处理后的信息发回给客户机connectionSocket.close() #关闭窗口套接字,前台套接字保持开放
  • TCP客户机代码
    TCPClient.ipynb
from socket import * #引入socket库serverName = gethostname() #由于没得服务器,服务器主机用本机来当
serverPort = 12000 #服务器端口号
clientSocket = socket(AF_INET, SOCK_STREAM) #创建客户机套接字(类型为字节流SOCK_STREAM)
clientSocket.connect((serverName, serverPort)) #TCP连接sentence = input('Input lowercase sentence:') #得到输入字符串
clientSocket.send(sentence.encode()) #发送数据到服务器modifiedSentence = clientSocket.recv(1024) #接收服务器发回的消息
print('From server:', modifiedSentence.decode()) #显示接收的字符串clientSocket.close() #关闭客户机socket
  • 有BUG 待解决 !!

  • 待补充C++版本

  • py版本

🌹感谢阅读🌹


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

相关文章

计算机网络自顶向下-第 8 版

Computer Networking A Top Down Approach 8th Edition Computer Networking A Top Down Approach 8th Edition 概述本书资源计算机网络自顶向下方法第八版英文pdf图片预览 更新特点精彩试读作者介绍 概述 概述 Computer Networking A Top Down Approach第8版也就是计算机网…

自顶向下计算机网络 传输层

自顶向下计算机网络学习 传输层 一、概述和传输层服务1.1 传输层提供的服务1.2传输层和网络层的关系1.3 传输层协议可靠的、保序的传输&#xff1a;TCP不可靠、不保序的传输&#xff1a;UDP 二、多路复用与解复用2.1 什么是复用与解复用2.2 面向连接(TCP)的多路复用与分解2.3 无…

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

自顶向下计算机网络学习 应用层 一、应用层协议原理1. 网络应用的体系结构1.1 客户-服务器&#xff08;C/S&#xff09;体系结构1.2 对等体(P2P)体系结构1.3 混合体&#xff1a;客户 - 服务器和对等体系结构 2.应用进程间的通信2.1 分布式进程需要解决的问题2.1.1 进程标识和寻…

计算机网络自顶向下方法 【第一章 计算机网络及因特网】

目录 1.1 什么是因特网1.1.1 具体构成描述1.1.2 服务描述1.1.3 网络协议 1.2 网络边缘1.2.1 接入网 1.3 网络核心1.3.1分组交换1.3.2 电路交换1.3.3 报文交换 1.4 交换网中的时延&#xff0c;丢包和吞吐量1.5 协议层次及其服务模型 1.1 什么是因特网 我们可以用两种方式描述因…

计算机网络自顶向下方法笔记01

《计算机网络自顶向下方法》学习笔记。之前学习过计算机网络微课&#xff0c;已经对计网中的很多概念都有了印象和一定的了解了&#xff0c;这时候再读自顶向下感觉比较轻松了。这本书没有涉及太多物理层的内容&#xff0c;第一章为概述。从第二章应用层开始&#xff0c;自顶向…

《计算机网络--自顶向下方法》第一章--计算机网络和英特网

1.1什么是英特网 1.1.1具体构成描述 主机&#xff08;host&#xff09;或端系统&#xff08;end system&#xff09;&#xff1a;所有与因特网相连的计算设备 路由器&#xff08;router&#xff09;&#xff1a;从一条入通信链路接收到达的分组&#xff0c;并通过一条出通信链…

计算机网络(自顶向下方法)-网络层

计算机网络&#xff08;自顶向下方法&#xff09;-网络层 4. 1 导论数据平面控制平面 4.2 路由器组成4.3 IP: Internet Protocol数据报格式分片IPv4地址子网IP 地址分类子网掩码(subnet mask)如何获得一个IP地址DHCP: Dynamic Host Configuration Protocol NAT&#xff1a;网络…

计算机网络(自顶向下)笔记

本书是自顶向下进行的, 在第一章概述计算机网络的层次结构,从第二章开始从上到下一章介绍一层(大致), 最后是移动互联网/网络安全的内容 计算机网络中的每一层都具有一定的功能, 通过层间接口向上层提供服务, 通过调用下层接口实现一定的功能. 每一层的学习方式 原理 功能向…

【计算机网络:自顶向下方法】(一)计算机网络和英特网

文章目录 1.1什么是Internet?概念internet 结构网络结构 1.2网络边缘1.3网络核心&#xff1a; 数据交换的功能电路交换分组交换分组交换: 排队延迟和丢失网络核心的关键功能电路交换和分组交换的比较电路交换分组交换 分类 1.4 接入网和物理媒体住宅接入 &#xff1a; modem接…

计算机网络重点知识整理(自顶向下)

前言 忙碌的学期结束了&#xff0c;趁自己对知识点的掌握还没有忘记&#xff0c;对计算机网络的知识点做一个整理&#xff0c;整理的侧重点在本校老师重点讲述部分&#xff0c;大家参考即可。 整理的资源来自教材&#xff08;计算机网络自顶向下&#xff09;以及PPT。 内容有误…

计算机网络(自顶向下方法)-Internet概述

计算机网络&#xff08;自顶向下方法&#xff09;-Internet概述 1.概论1.1 什么是Internet?从具体构成角度终端设备 什么是协议&#xff1f; 1.2 网络边缘1.3 网络核心电路交换分组交换数据报(datagram) 的工作原理虚电路(virtual circuit)的工作原理网络分类 1.4 接入网和物理…

计算机网络-自顶向下(学习笔记)

1. 计算机网络与互联网 1.1 什么是互联网 终端系统通过通信连接(communication links)和包交换机(packet switches)连接在一起 包交换机的两种主要类型 路由器(routers)与链路层交换机(link-layer swtiches)路由器应用于网络核心&#xff0c;链路层交换机用于接入层transmiss…

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

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

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

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

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

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

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

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

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

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

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

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

UE4 物理碰撞(C++)

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

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

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