首先在这里再次声明一下,本系列博客内容参考北京交通大学软件学院计算机网络课程的教学资料,参考教材为英文教材:《Computer Networking- A Top-Down Approach》。编者英文水平有限,如有部分翻译不准确的地方,还请大家帮忙指正。本系列博客仅供计算机爱好者学习交流使用,未经允许禁止任何形式二改二传及任何个人或商业用途。
本章将介绍应用层的内容,应用层主要是为了提供网络功能的一个层,网络应用是计算机网络存在的理由。本章中,我们会从定义关键的应用层概念开始,然后涉及开发运行在TCP,UDP上的网络应用程序。
应用程序体系结构由应用程序研发者设计,规定了如何在各种端系统上组织应用该程序。在选择应用程序体系结构一般会从以下几种体系结构中选择:
在此体系结构中有以下几个不可或缺的元素:
元素 | 功能 | 注意 |
---|---|---|
一个总是打开的服务器 | 服务于来自许多其他称为客户的主机的请求 | 客户之间不直接通信 |
具有固定的,周知的地址(固定的IP地址) | 客户通过该地址发送分组(packet)与其联系 |
服务器:
一定是总是开着的(always on),并且有固定的IP地址(permanent IP address)
客户端:
与服务器通信,不一定总是开着的,可能会是一个动态IP,并且客户端与客户端之间并不直接通信
那么可想而知,这样的体系结构,如果客户多了,很有可能出现一台单独的服务器主机跟不上它所有的客户请求的情况,为此,配备大量主机的数据中心(DATA CENTER) 常被用于创建强大的虚拟服务器。
在这个体系结构中,应用程序在间断连接的主机之间使用直接通信,这些主机被称为对等方 。这个体系结构由于不需要服务器,所以并没有一个一直是开着的服务器,终端系统直接相互连接传输数据,并且间歇的出现IP地址更换。
P2P的优点就是它们的自扩展性(self-scalability) ,当一个新的人加入网络时,不会影响其他用户。但是它也有不足之处,就是不利于管理并且连接并不可靠。比如出现下载东西下载了一半,作为种子的那台机器下线了,那么你的下载自然就中断了
就是P2P和C-S体系结构混用,比如QQ,Skype这类通信软件,人与人之间的网络视频,或者语音电话,都是建立的P2P连接,而类似于QQ群,它就是一个C-S的模型。
在构建网络应用程序之前,需要对运行在多个端系统上的程序是如何互相通信的情况有一个基本的了解。进行通信的实际上是进程(process) 而不是程序。在两个不同的端系统上的进程,跨越计算机网络交换报文(message) 而相互通信。
我们通常将两个通信的进程之一称为客户(client),另一个称为服务器(server) 。
客户 | 服务器 | |
---|---|---|
Web | 浏览器 | Web服务器 |
P2P | 下载文件的 | 上传文件的 |
进程通过套接字(socket) 接口向网络发送报文和从网络接收报文
为了方便理解,我们还是使用熟悉的寄信的例子来举例
将进程比作为一套房子,而他的套接字可以类比于它的门。发送报文时就像是把报文推出了门(也就是套接字)给到另一个邮政基础设施(比如邮箱)中,通过一通操作,另外一方接收到了,再从门外拿进来邮件。
由于套接字是建立网络应用程序的可编程接口,因此套接字称为应用程序和网络之间的应用程序编程接口(Application Programming Interface, API)
通过API,应用程序开发者对于运输层的控制仅限于
为了向特定目的主机发送报文,接收进程需要有一个地址。为了标识该接收进程,需要定义两种信息:①主机的地址;②在目的主机中指定接收进程的标识符
在因特网中,主机由其IP地址 标识,除了知道报文发送目的地的主机地址外,发送进程还必须指定运行在接收主机上的接收套接字。目的地端口号(port number) 用于这个目的。已经给流行的一些协议分配了特定的端口号,比如web是80,邮件服务为25
开发一个应用时,必须选择一个可用的运输层协议。通过研究这些可用的运输层协议所提供的服务,选择一个最能为你的应用需求提供恰当服务的协议。就类似于,我们从一个城市到另外一个城市,是选择坐火车还是飞机。当然各有各的好处。或者类比于寄邮件,可以选择寄顺丰,也可以选择寄京东。
一个运输层协议能够为调用它的应用程序提供什么样的服务呢?从以下四个方面来分析:
由于数据在传输过程中可能会出现丢失现象,所以,如果一个协议提供了一个可以完全确保数据交付服务,就认为提供了可靠数据传输(reliable data transfer) 。
当然有些数据丢失可能被某些应用程序所容忍,即就是容忍丢失的应用(loss-tolerant application), 它们可能会选择另外一些服务
带宽敏感的应用(bandwidth-sensitive application) 具有吞吐量的要求
弹性应用(elastic application) 能够利用当时可用的带宽资源
顾名思义,有些服务可以在一定时间内完成传输,有些可能会随着网络情况而变化
运输协议能给应用程序提供一种或多种安全性服务
下图是一些常用软件对以上四种属性的要求:
因特网为应用程序提供两个运输层协议,TCP和UDP。在创建应用时,首先要决定是选择TCP还是选择UDP。
TCP服务模型包括面向连接的服务和可靠数据传输服务
TCP不提供:定时、保证最小吞吐量、安全等服务
UDP是一种不提供不必要服务的轻量级运输协议,它仅提供最小服务
不需要一定建立连接
UDP不提供:连接设置,可靠性,流量控制,拥塞控制,定时,吞吐量保证,安全等服务
那么为什么UDP不提供这么多的东西,还有人用呢?
A:因为速率快
下图为部分应用使用的传输层服务:
Web页面包含许多对象,包括HTML文件,JPEG文件,JAVA文件等等
Web页面包含基于HTML-FILE的文件
每一个对象都会被一个URL地址所标识
比如下图这个URL,前半段是主机的域名(对应主机的IP地址),后面是位于主机上的文件的路径
Web的应用层协议是超文本传输协议(HyperText Transfer Protocol,HTTP) 。
持续更新中
文章浏览阅读2.1k次。FX3 JLINK调试是一个有些麻烦的事情,经常有些莫名其妙的问题。 设置参见 c:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\doc\firmware 下的 EzUsbSuite_UG.pdf 文档。 常见问题: 1.装了多个版本的jlink,使用了未注册或不适当的版本 选择一个正确的版本。JLinkARM_V408l,JLinkA_ezusbsuite_qsg.pdf
文章浏览阅读2.6k次。** 本文仅通过用openGL+QT简单实现二进制stl文件读取显示并通过鼠标旋转缩放, 是比较入门的级别,由于个人能力有限,新手级别,所以未能施加光影灯光等操作, 未能让显示的stl文件更加真实。****效果图:**1. main.cpp```cpp#include "widget.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); _qopengl如何鼠标控制旋转
文章浏览阅读943次,点赞22次,收藏19次。以大规模预训练语言模型为基础的chatgpt成功出圈,在近几日已经给人工智能板块带来了多次涨停,这足够说明这一风口的到来。而作为曾经的风口“知识图谱”而言,如何找到其与chatgpt之间的区别,找好自身的定位显得尤为重要。形式化知识和参数化知识在表现形式上一直都是大家考虑的问题,两种技术都应该有自己的定位与价值所在。知识图谱构建往往是抽取式的,而且往往包含一系列知识冲突检测、消解过程,整个过程都能溯源。以这样的知识作为输入,能在相当程度上解决当前ChatGPT的事实谬误问题,并具有可解释性。
文章浏览阅读1.3k次。最重要的一点,一定是degbug的方式启动,不然热部署不会生效,注意,注意!_tomcat热部署
文章浏览阅读10w+次,点赞56次,收藏482次。html5 ,用css去修饰自己的个人主页代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xh..._个人主页源码
文章浏览阅读201次。开发者(KaiFaX)面向全栈工程师的开发者专注于前端、Java/Python/Go/PHP的技术社区来源:开源最前线链接:https://github.com/svenstaro/gen..._程序员怎么上班摸鱼
文章浏览阅读1.3k次。改变Block UI界面的尺寸_ug二次开发 调整 对话框大小
文章浏览阅读1.3w次,点赞18次,收藏291次。基于深度学习的股票预测数据获取数据转换LSTM模型搭建训练模型预测结果数据获取采用tushare的数据接口(不知道tushare的筒子们自行百度一下,简而言之其免费提供各类金融数据 , 助力智能投资与创新型投资。)python可以直接使用pip安装tushare!pip install tushareCollecting tushare Downloading https://files.pythonhosted.org/packages/17/76/dc6784a1c07ec040e74_基于深度学习的股票操纵识别研究python代码
文章浏览阅读2k次。【IT168 厂商动态】 近日,北京中科网威(NETPOWER)工业级防火墙通过了中国电力工业电力设备及仪表质量检验测试中心(厂站自动化及远动)测试,并成为中国首家通过电力协议访问控制专业测评的工业级防火墙生产厂商。 北京中科网威(NETPOWER)工业级防火墙专为工业及恶劣环境下的网络安全需求而设计,它采用了非X86的高可靠嵌入式处理器并采用无风扇设计,整机功耗不到22W,具备极_电力行业防火墙有哪些
文章浏览阅读206次。/*烟台大学计算机学院 作者:董玉祥 完成日期: 2017 12 3 问题描述:二叉树排序树中查找的路径 */#include #include #define MaxSize 100typedef int KeyType; //定义关键字类型typedef char InfoType;typedef struct node
文章浏览阅读775次。当时老师一定会告诉你,这个一个"warning"的报警,可以不用管它,也确实如此。不过,这条报警信息我们至少可以知道一点,就是scanf函数调用完之后是有一个返回值的,下面我们就要对scanf返回值进行详细的讨论。并给出在编程时利用scanf的返回值可以实现的一些功能。_c语言ignoring return value
文章浏览阅读9.6k次。十四五规划下,数据安全成为国家、社会发展面临的重要议题,《数据安全法》《个人信息保护法》《关键信息基础设施安全保护条例》已陆续施行。如何做好“数据安全建设”是数字时代的必答题。_数字医疗服务保障方案