常见的应用层协议有哪些? 

HTTP(HyperText Transfer  Protocol):超文本传输协议
FTP(File Transfer Protocol):文件传输协议
SMTP(Simple Mail Transfer Protocol):简单邮件传输协议
Telnet:远程终端访问
应用层协议定义了什么?
 
1、交换的报文类型,例如请求报文和响应报文
2、各种报文类型的语法,如报文中的各个字段及这些字段是如何描述的
3、字段的语义,即这些字段中包含的信息的含义
4、一个进程何时以及如何发送报文,对报文进行响应的规则
有哪些可供选择的运输层协议?
TCP(Transmission Control Protocol):传输控制协议
    可靠数据传输、面向连接、拥塞控制
UDP(User Datagram Protocol):用户数据报协议
    无连接、无拥塞控制、不可靠传输(最简传输服务)
 
TCP 不安全,怎么办?
SSL(Secure Sockets Layer):安全套接字层
SSL 是对 TCP 的加强,在 TCP 的基础上,提供了额外的安全性服务,包括加密、数据完整性和端点鉴别
选择运输层协议时,有哪些参数需要关注?
可靠数据传输:确保数据完整、按一定顺序到达目的地
吞吐量:不管吞吐量波动的多么厉害,都确保随时能提供不少于所需要的吞吐量
定时:确保数据从发送端发出开始,到到达接收端为止,总时长不超过一定时间
安全性:要求数据以密文形式在因特网上传输
注:不是所有应用都要求在每一点上都达到要求,根据应用场景的不同,各个应用都有自己的侧重点
常见应用程序的服务要求如下图(来自《计算机网络 自顶向下方法》):

应用程序、网络应用、应用层协议、进程、套接字(socket)之间的关系是怎样的?
 
应用程序和进程的关系:
    应用程序 由存在于客户端和服务端的 进程对 组成
    附加:进程对之间通过进程间通信协议进行通信
进程和套接字的关系:
    进程通过一个套接字(socket)软件接口向网络发送报文和接收报文
网络应用和应用层协议的关系:
    应用层协议是网络应用的一部分
    网络应用一般由四个部分组成,客户端、服务端、定义报文结构的标准、应用层协议
    例如:
    Web 应用由 Web 浏览器、Web 服务器、文档格式标准(HTML)、应用层协议(HTTP)
    因特网电子邮件应用由 允许用户读取和生成邮件的客户程序、能容纳用户邮箱的邮件服务器、定义电子邮件报文结构的标准、定义报文如何在服务器之间以及如何在服务器和邮件客户程序之间传递的应用层协议 
应用程序和网络应用的关系?
    搞不清楚(可以认为网络应用是应用程序一种吗?)
HTTP 跟 HTML 分别管哪些部分?
 
HTTP 确保两个主体之间能顺利地传送数据,HTML 确保两个主体之间传递的数据使用的是同一套规则
举两个例子
1、两个好朋友约好第二天 8 点碰面互相聊聊最近的生活感悟,结果一个早上 8 点到了,一直也没等到人,后来沟通才知道,那个人以为说的是晚上8点。
这相当于 HTTP 这一步没做好
2、网友约见面,约好了时间、地点,都见到对方了,结果发现语言不通,其中一个不会说普通话,操着一口方言,另一个全程懵逼。
这相当于 HTML 这一步没做好
cookie?
 
HTTP 本身是无状态的协议,即服务端不会去关心某个请求是哪个客户发送过来的,它只负责接收、处理并响应请求
然而,由于一个站点通常是希望能够识别用户的,可能的原因有:
1、希望限制用户的访问
2、希望把内容与用户关联起来
cookie 技术有 4 个组件:
1、在 HTTP 响应报文中的一个 cookie 首部行(Set-cookie: )
2、在 HTTP 请求报文中的一个 cookie 首部行(cookie: )
3、在用户端系统中保留有一个 cookie 文件,并由用户的浏览器进行管理
4、位于 Web 站点后的一个后端数据库
 
 
为什么需要代理服务器?
 
这里需要回顾一下本书第 1 章的一个概念,流量强度(1.4.2 排队时延和丢包):
La/R
L 表示每个分组的比特数;a 表示分组到达队列的平均速率(a 的单位是分组/秒,即 pkt/s);R 是传输速率,即从队列中退出比特的速率(单位是 bps,即 b/s)
即,流量强度指的是队列的输入输出速率比
要解释代理服务器的作用,必须从需求开始说起
需求:在不是特别影响用户体验的情况下,最大可能节约成本
两点,一是用户体验,二是节约成本
用户体验主要在于时延的长短,影响成本的因素有流量总量和带宽大小
回到流量强度的代表式 La/R,R 即带宽,La 与流量总量有关
所以需求的节约成本方面,可以翻译成,在减少 R 或者至少是保持 R 不变的情况下,让 La/R 的值变小,L 不好控制,只能把重点放在减小 a 的值上面
先讨论流量强度(La/R)对时延影响,定性关系如下图:
可以看到,他们的关于可以用类似于指数函数或二次函数的函数来表示
即,对 La/R 微小的改动,可以对时延产生非常大的影响,而且 La/R 约接近 1,这个影响越明显
现在讨论代理服务器如何有效地减小 a 的值
每个请求在传入因特网之前,都需要过一下局域网中的代理服务器,如果所请求的资源能在代理服务器中找到且未过期,则直接从代理服务器返回,如果没有,则向因特网中发起请求
定量的描述在书中 “2.2.5 Web缓存” 这一节有详细的描述
综上,使用代理服务器的好处就很明显(如下),可以完全满足需求
流量小很多,不用过多的扩展带宽,能有效节省成本
流量强度小很多(排队时延小),且部分请求可以直接从代理服务器返回,所以用户体验也不会太差

CDN?

CDN(Content Distribution Network)即内容分发网络

摘抄百度百科的一段话:

CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。

了解了代理服务器的作用,即可知道 CDN 的作用

持续连接和非持续连接?
持续连接:所有的请求/响应对都经相同的 TCP 连接发送
非持续连接:每个请求/响应对都经独立的 TCP 连接发送
 
FTP 最特殊的地方?
相对于 HTTP,FTP 最特殊的地方在于它使用两个并行的 TCP 连接来传输数据
一条是控制连接(control connection):传输控制信息,如用户名、密码、存数据、取数据
另一条是数据连接(data connection):传输数据信息,实际发送数据
 
SMTP 与 HTTP 之间的区别?
HTTP 是拉协议,即 TCP 连接由想接收文件的机器发起,客户发请求给服务器请求文件
SMTP 是推协议,即 TCP 连接由发送文件的机器发起,用户代理发文件给邮件服务器的客户端,邮件服务器的客户端发文件给邮件服务器的服务端
SMTP 无法做到的?使用 POP3 和 IMAP 等邮件访问协议
由于个人 PC 不可能保证时时开启,故邮件服务器的服务端不可能装在个人 PC 上,它只能独立于接收方的用户代理
由于个人 PC 不是服务器,故邮件服务器的服务端不可能使用 SMTP 协议将邮件传送给接收方的用户代理
由于 SMTP 是推协议,故邮件接收方的用户代理不可能通过 SMTP 协议去邮件服务器的服务端拉取邮件
 
 
传统电子邮件协议链 SMTP、SMTP、POP3 或 IMAP  与  基于 Web 的电子邮件协议链 HTTP、SMTP、HTTP 的区别?
 
传统电子邮件 SMTP、SMTP、POP3 或 IMAP :
基于 Web 的电子邮件协议链 HTTP、SMTP、HTTP :
发送方浏览器 → --- HTTP --- → 邮件服务器的客户端 → --- SMTP --- →  邮件服务器的服务端 → --- HTTP --- → 接收方浏览器

《计算机网络 自顶向下方法》 第2章 应用层 Part1的更多相关文章

  1. 计算机网络自顶向下方法第2章-应用层(application-layer).1

    2.1 应用层协议原理 2.1.1网络应用程序体系结构 1)在客户-服务器体系结构 (client-server architecture)中,有一个总是打开的主机称为服务器,它服务于来自许多其他称为 ...

  2. 计算机网络自顶向下方法第2章-应用层(application-layer).2

    2.4 DNS:因特网的目录服务 2.4.1 DNS提供的服务 DNS的定义 实体层面看,DNS是一个由分层的DNS服务器实现的分布式数据库 协议层面看,DNS是一个使得主机能够查询分布式数据库的应用 ...

  3. 计算机网络自顶向下方法第3章-传输层 (Transport Layer).1

    3.1 概述和运输层服务 运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信(logic communication)功能. 3.1.1 运输层和网络层的关系 网络层提供了主机之间的逻辑通信,而 ...

  4. 计算机网络自顶向下方法第4章 网络层:数据平面 (Network layer)

    4.1 网络层概述  网络层主要功能为转发(将数据从路由器输入接口转移到合适的输出接口)和路由选择(端到端的路径选择),每台路由器都有一张转发表,用最长前缀匹配规则来转发. 4.1.1 转发和路由选择 ...

  5. 计算机网络自顶向下方法第3章-传输层 (Transport Layer).2

    3.5 面向连接的运输: TCP 3.5.1 TCP连接 TCP是因特网运输层的面向连接的可靠的运输协议. TCP连接提供全双工服务(full-duplex service). TCP连接是点对点的连 ...

  6. 《计算机网络 自顶向下方法》 第3章 运输层 Part1

    由于个人精力和智商有限,又喜欢想太多.钻牛角尖,导致学习系统性知识很痛苦,尝试改变学习方式,慢慢摸索 现在看到 rdt2.0,又有点看不下去 现在的想法: 要有个目标,且有截止时间(作业模式.考试模式 ...

  7. 《计算机网络 自顶向下方法》 第2章 应用层 Part2

    域名.主机名?   从范围上看: 域名的范围比主机名大 一个域名下通常有多个主机名 从组成上看: 主机名 = 服务器名(或计算机名) + 域名 举例说明: baidu.com 是百度的域名 www.b ...

  8. 《计算机网络 自顶向下方法》 第8章 计算机网络中的安全 Part2

    SSL(使 TCP 连接安全) SSL(Secure Socket Layer),即安全套接字层,是对 TCP 的强化 HTTPS 使用 SSL,而 HTTP 不使用 SSL 通过采用机密性.数据完整 ...

  9. 《计算机网络 自顶向下方法》 第3章 运输层 Part2

    待补充完善 TCP 相关基本点 1.面向连接 两个不同主机上的进程在通过 TCP 进行通信之前,必须先通过三次握手来建立 TCP 连接 2.全双工服务 即,如果一台主机上的进程 A 与另一台主机上的进 ...

随机推荐

  1. nishang的介绍与使用

    0x01前言 Nishang是一个PowerShell攻击框架,它是PowerShell攻击脚本和有效载荷的一个集合.Nishang被广泛应用于渗透测试的各个阶段,本文主要介绍如何使用Nishang的 ...

  2. phpstudy后门rce批量利用脚本

    写两个 一个批量检测的  一个交互式shell的 暂时py  图形化的qt写出来..有点问题 后门包 : GET / HTTP/1.1Host: 127.0.0.1User-Agent: Mozill ...

  3. php代码Xdebug调试使用笔记

    0x01 Xdebug简介 Xdebug是一个开放源代码的PHP程序调试器 运行流程: 0x02  Xdebug配置 日志 xdebug.trace_output_dir: 日志追踪输出目录 xdeb ...

  4. linux系统取证

    目录 0x00 查看系统信息 0x01 用户及组信息 0x02 防火墙及路由信息 0x03 查看网络.端口信息 0x04 系统运行信息查看 0x05 日志查看分析 0x00 查看系统信息 name-a ...

  5. Cocos2d-x 学习笔记(11.4) ScaleTo ScaleBy

    1. ScaleTo ScaleBy 对node进行缩放.ScaleBy是ScaleTo的子类. 1.1 成员变量 create方法 ScaleTo ScaleBy 成员变量一样: float _sc ...

  6. ‎Cocos2d-x 学习笔记(11.9) FadeTo FadeIn FadeOut

    1. 用处 FadeTo:由正常变透明,是另两个的父类,不支持reverse()方法.FadeIn:变完全不透明.FadeOut:变完全透明. 2. 使用 FadeTo: GLubyte _toOpa ...

  7. Controller层的方法访问标志与Spring装配与AspectJ切面处理

    最近在做AspectJ实现的日志模块,在spring配置中加入了<aop:aspectj-autoproxy/>,之后发现,只要有用到自定义注解的类,某些方法经MVC请求时就报空指针错误. ...

  8. composer依赖管理与laravel框架安装

    步骤有点多,生怕哪一天忘记,记录下来会好点 laravel安装有两种途径:1.直接在一些国内第三方网站,如:https://www.golaravel.com/download/ 下载压缩包来解压即可 ...

  9. opencv::自定义角点检测

    #include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespac ...

  10. shell数组(四)

    [root@ipha-dev71- exercise_shell]# cat test.sh #!/bin/bash my_array=(a b c d) echo "第一个元素为:${my ...