• 中科大郑烇、杨坚 《计算机网络》第二章


    1、应用层协议原理

    1.1 网络应用的体系结构:

    可能的应用架构:
    1)客户-服务器模式(C/S:client/server)
    2)对等模式(P2P:Peer To Peer)
    3)混合体:客户-服务器和对等体系结构

    1.1.1 客户-服务器模式(C/S:client/server)

    服务器端:

    • 一直运行
    • 固定IP地址和周知的端口号
    • 扩展性:服务器短的扩展性较差

    客户端:

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

    缺点:可拓展性差 达到一定能限(阈值),性能暴跌 可靠性差

    在这里插入图片描述

    1.1.2 对等模式(P2P:Peer To Peer)
    • (几乎)没有一直运行的服务器
    • 任意端系统之间可以进行通信
    • 每一个节点既是客户端又是服务器
      • 自扩展性-新peer节点带来新的
      • 服务能力,当然也带来新的服务请求

    1.2、进程通信

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

    • 在同一个主机内,使用进程间通信机制通信(操作系统定义)

    • 不同主机,通过交换报文(message)来通信

    客户端进程:发起通信的进程
    服务器进程:等待连接的进程

    注意:P2P架构的应用也 有客户端进程和服务器进程之分

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

    应用进程如何使用传输层提供的服务交换报文

    在这里插入图片描述

    1.3.1、问题1:进程标识和寻址问题(对于进程 谁发/谁收,对等层实体之间)
    • 进程为了接收报文,必须有一个标识

      • 主机:唯一的32位IP地址
      • 端口号(Port Numbers) 用来区分不同的应用进程
        所采用的的传输层协议:TCP/UDP
    • 一个进程:用IP + port 标识端节点

    • 本质上,一对主机进程之间的通信由2个端节点构成

    1.3.2、问题2:传输层-应用层提供服务是如何 (上下层间)
    • 位置:层间界面的SAP (TCP/IP :socket)
    • 形式:应用程序接口API (TCP/IP :socket API)

    传输层提供的服务-需要穿过层间的信息
    层间接口必须要携带的信息

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

    传输层实体(tcp或者udp实体)根据这些信息进行TCP报文段(UDP数据报)的封装
    源端口号,目标端口号,数据等
    将IP地址往下交给IP实体,用于封装IP数据报:源IP,目标IP

    如果Socket API(原语)每次传输报文(穿过层间),都携带如此多的信息,太繁琐易错,不便于管理
    用个代号标示通信的双方或者单方: socket
    就像OS打开文件返回的句柄一样
    对句柄的操作,就是对文件的操作
    
    • 1
    • 2
    • 3
    • 4
    1.3.2.1 TCP socket

    1、TCP服务,两个进程之间的通信需要之前建立连接,两个进程通信会持续一段时间,通信关系稳定。
    2、可以用一个整数(socket)表示两个应用实体之间的通信关系,本地标识
    3、用一个整数标识传输,穿过层间接口的信息量最小
    4、TCP socket:源IP,源端口,目标IP,目标IP,目标

    TCP socket 是一个整数(类似文件描述符)代表一个四元组(我的IP和端口号 对方的IP和端口号)
    便于管理 使得穿过层间的信息量最小
    是应用层和传输层的一个约定 本地会话的标识

    对于使用面向连接服务(TCP)的应用而言,套接字是4元组的一个具有本地意义的标识

    • 4元组: (源IP,源port,目标IP,目标port)

    • 唯一的指定了一个会话(2个进程之间的会话关系)o应用使用这个标示,与远程的应用进程通信

    • 不必在每一个报文的发送都要指定这4元组

    • 就像使用操作系统打开一个文件,OS返回一个文件句柄一样,以后使用这个文件句柄,而不是使用这个文件的目录名、文件名

    • 简单,便于管理

    在这里插入图片描述
    穿过层间接口的包括 ICI 和 SDU

    1.3.2.2 UDP socket
    1.3.3、问题3:如何使用传输层提供的服务,实现应用进程之间的报文交换,实现应用 (本层间)
    • 定义应用层协议:报文格式、解释、时序等
    • 编制程序,使用OS提供的API,调用网络基础设施提供通信服务传递报文,解析报文,实现应用时序等

    1.4 应用层协议

    定义了:运行在不同端系统上的应用进程如何相互交换报文

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

    应用协议仅仅是应用的一个组成部分
    Web应用:HTTP协议,web客户端,web服务器,HTML(超文本标记语言)

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

    1.5 应用需要传输层提供什么样的服务?

    如何描述传输层的服务?

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

    常见应用对传输服务的要求
    在这里插入图片描述
    Internet 传输层提供的服务
    实体:实行网络协议的软件模块或硬件模块(运行中的)

    TCP服务:
    可靠的传输服务
    流量控制:发送方不会淹没接受方
    拥塞控制:当网络出现拥塞时,能抑制发送方
    不能提供的服务:时间保证、最小吞吐保证和安全面向连接:要求在客户端进程和服务器进程之间建立连接

    UDP服务:
    不可靠数据传输
    不提供的服务:可靠,流量控制、拥塞控制、时间、带宽保证、建立连接

    UDP存在的必要性

    • 能够区分不同的进程,而IP服务不能
      在IP提供的主机到主机端到端功能的基础上,区分了主机的应用进程
    • 无需建立连接,省去了建立连接时间,适合事务性的应用
    • 不做可靠性的工作,例如检错重发,适合那些对实时性要求比较高而对正确性要求不高的应用
      • 因为为了实现可靠性(准确性、保序等),必须付出时间代价(检错重发〉
    • 没有拥塞控制和流量控制,应用能够按照设定的速度发送数据
      • 而在TCP上面的应用,应用发送数据的速度和主机向网络发送的实际速度是不一致的,因为有流量控制和拥塞控制

    Internet应用及其应用层协议和传输协议
    在这里插入图片描述
    安全TCP
    TCP & UDP
     都没有加密
     明文通过互联网传输 ,甚至密码

    SSL 提供安全性
     在TCP上面实现,提供加密的TCP连接
     私密性
     数据完整性
     端到端的鉴别

    SSL在应用层  应用采用SSL库,SSL 库使用TCP通信

    SSL socket API  应用通过API将明文交 给socket,SSL将其加 密在互联网上传输  详见第8章

    Https 跑在 SSL + TCP 上

    2、协议

    2.1 HTTP:超文本传输协议

    HTTP: 超文本传输协议
     Web的应用层协议
     客户/服务器模式
     客户: 请求、接收和显示 Web对象的浏览器
     服务器: 对请求进行响应, 发送对象的Web服务器
     HTTP 1.0: RFC 1945
     HTTP 1.1: RFC 206

    使用TCP

    • 客户发起一个与服务器的TCP连接(建立套接字),端口号为80
    • 服务器接受客户的TCP连接
    • 在浏览器(HTTP客户端)与Web服务器(HTTP服务器server)
    • TCP连接关闭
      HTTP是无状态的
      服务器并不维护关于客户的任何信息
    2.1.1 HTTP连接

    1、非持久HTTP
     最多只有一个对象在 TCP连接上发送
     下载多个对象需要多个TCP连接
     HTTP/1.0使用非持久连接
    在这里插入图片描述

    响应时间模型

    ① 往返时间RTT(round-trip time)
    一个小的分组从客户端到服务器,再回到客户端的时间(传输时间忽略)

    ② 响应时间:
     一个RTT用来发起TCP连接
     一个 RTT用来HTTP请求并等待HTTP响应
     文件传输时间
    总共:2个RTT + 一个对象的传输时间

    非持久HTTP的缺点:
     每个对象要2个 RTT
     操作系统必须为每个TCP连接分 配资源
     但浏览器通常打开并行TCP连接 ,以获取引用对象

    2、持久HTTP
     服务器在发送响应后,仍保持 TCP连接
     在相同客户端和服务器之间的后续请求和响应报文通过相同的连 接进行传送
     客户端在遇到一个引用对象的时 候,就可以尽快发送该对象的请求

    持久HTTP分为下面两种方式:
    ① 非流水方式的持久HTTP
     客户端只能在收到前一个响应后 才能发出新的请求
     每个引用对象花费一个RTT

    ② 流水方式的持久HTTP
     HTTP/1.1的默认模式
     客户端遇到一个引用对象就立即 产生一个请求
     所有引用(小)对象只花费一个RTT是可能的

    2.1.2 HTTP请求报文

     两种类型的HTTP报文:请求、响应
     HTTP请求报文:
    在这里插入图片描述

    HTTP请求报文:通用格式
    在这里插入图片描述

    HTTP请求方式
    1、POST方式
     网页通常包括表单输 入
     包含在实体主体 (entity body )中的 输入被提交到服务器

    2、URL方式:
     方法:GET
     输入通过请求行的 URL字段上载

    例子
    http: //www. baidu.com/s?wd=xx+yy+zzz&cl=3
    
    参数:wd,cl 参数值:XX+YY+zzz,3
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    2.1.3 HTTP响应报文

    在这里插入图片描述
    HTTP响应状态码

    位于服务器→客户端的响应报文中的首行一些状态码的例子:

    200 OK
    请求成功,请求对象包含在响应报文的后续部分

    301 Moved Permanently
    请求的对象己经被永久转移了;新的URL在响应报文的Location:首部行中指定客户端软件自动用新的URL去获取对象

    400 Bad Request
    一个通用的差错代码,表示该请求不能被服务器解读

    404 Not Found
    请求的文档在该服务上没有找到

    505 HTTP version Not supported

    2.1.4 用户-服务器状态:cookies

    Cookies:维护状态
    在这里插入图片描述
    在这里插入图片描述
    1、Cookies能带来什么:
    用户验证
    购物车
    推荐
    用户状态(web e-mail)

    2、如何维持状态:
     协议端节点:在多个事务上 ,发送端和接收端维持状态
     cookies: http报文携带状态信息

    3、Cookies与隐私:
     Cookies允许站点知道许多关于 用户的信息
     可能将它知道的东西卖给第三方
     使用重定向和cookie的搜索引 擎还能知道用户更多的信息
     如通过某个用户在大量站点 上的行为,了解其个人浏览方式的大致模式
     广告公司从站点获得信息

    2.1.5 Web缓存(代理服务器)

    目标:不访问原始服务器,就满足客户的请求

     用户设置浏览器: 通过缓存访问Web
     浏览器将所有的HTTP 请求发给缓存
     在缓存中的对象:缓存直接返回对象
     如对象不在缓存,缓存请求原始服务器,然后再将对象返回给客户端
     缓存既是客户端又是服务器
     通常缓存是由ISP安装 (大学、公司、居民区ISP)

    为什么要使用Web缓存 ?
     降低客户端的请求响应时间
     可以大大减少一个机构内 部网络与Internent接入 链路上的流量
     互联网大量采用了缓存: 可以使较弱的ICP也能够 有效提供内容

    2.2 FTP:文件传输协议

    在这里插入图片描述
     向远程主机上传输文件或从远程主机接收文件
     客户/服务器模式
     客户端:发起传输的一方
     服务器:远程主机
     ftp: RFC 959
     ftp服务器:端口号为21

    FTP: 控制连接与数据连接分开
     FTP客户端与FTP服务器通过端口21联系,并使用TCP为传输协议
     客户端通过控制连接获得身份确认
     客户端通过控制连接发送命令浏览远程目录
     收到一个文件传输命令时,服务器打开一个到客户端的数据连接
     一个文件传输完成后,服务器关闭连接

    服务器打开 第二个TCP 数据连接用来传输另一个文件(服务器主动)
     控制连接: 带外( “out of band” )传送
     FTP服务器维护用户的状态信息: 当前路径、用户帐户与控制连接对应
    有状态的协议

    FTP命令、响应
    命令样例:
     在控制连接上以ASCII文本方式传送
     USER username
     PASS password
     LIST:请服务器返回远程主 机当前目录的文件列表
     RETR filename:从远程主 机的当前目录检索文件 (gets)
     STOR filename:向远程主 机的当前目录存放文件 (puts)
    返回码样例:
     状态码和状态信息 (同HTTP)
     331 Username OK, password required
     125 data connection already open; transfer starting
     425 Can’t open data connection  452 Error writing file

    FTP协议与HTTP协议的差别
    FTP协议是有状态的,FTP协议的控制命令和数据传输分别在两个TCP上进行

    2.3 DNS

    主要功能:从域名到IP地址的转换

    2.3.1 DNS的必要性

    ​  IP地址标识主机、路由器
    ​  但IP地址不好记忆,不便人类使用(没有意义)
    ​  人类一般倾向于使用一些有意义的字符串来标识 Internet上的设备
    ​ 例如:qzheng@ustc.edu.cn
    ​ 所在的邮件服务器 www.ustc.edu.cn 所在的web服务器

     存在着“字符串”—IP地址的转换的必要性
    ​  人类用户提供要访问机器的“字符串”名称
    ​  由DNS负责转换成为二进制的网络地址

    DNS系统需要解决的问题
     问题1:如何命名设备
     用有意义的字符串:好记,便于人类使用
     解决一个平面命名的重名问题:层次化命名

     问题2:如何完成名字到IP地址的转换
     分布式的数据库维护和响应名字查询

     问题3:如何维护:增加或者删除一个域,需要在域名系统中做哪些工作

    2.3.2 DNS(Domain Name System)总体思路和目标

    DNS的主要思路
     分层的、基于域的命名机制
     若干分布式的数据库完成名字到IP地址的转换
     运行在UDP之上端口号为53的应用服务
     核心的Internet功能,但以应用层协议实现
     在网络边缘处理复杂性 (互联网最核心的功能(DNS)在边缘系统实现的)

    DNS主要目的:
     实现主机名-IP地址的转换(name/IP translate) (主要功能)
    其它目的
     主机别名到 规范名字 的转换:Host aliasing
     邮件服务器别名到邮件服务器的 正规名字 的转换:Mail server aliasing
     负载均衡:Load Distribution(分配具体的服务器提供服务)

    2.3.3 问题1:DNS名字空间

     DNS域名结构
     一个层面命名设备会有很多重名
     NDS采用层次树状结构的 命名方法
     Internet 根被划为几百个顶级域(top lever domains)
     通用的(generic) .com; .edu ; .gov ; .int ; .mil ; .net ; .org .firm ; .hsop ; .web ; .arts ; .rec ;
    国家的(countries) .cn ; .us ; .nl ; .jp
     每个(子)域下面可划分为若干子域(subdomains)
     树叶是主机

    DNS名字空间(The DNS Name Space)
    在这里插入图片描述
    从本域往上,直到树根
    中间使用“.”间隔不同的级别
    域的域名:可以用于表示一个域
    主机的域名:一个域上的一个主机

     域名的管理
     一个域管理其下的子域
    .jp 被划分为 ac.jp co.jp
    .cn 被划分为 edu.cn com.cn

    问题2:解析问题-名字服务器(Name Server)
     一个名字服务器的问题
     可靠性问题:单点故障
     扩展性问题:通信容量
     维护问题:远距离的集中式数据库

     区域(zone)
     区域的划分有区域管理者自己决定
     将DNS名字空间划分为互不相交的区域,每个区域都是 树的一部分

     名字服务器:
     每个区域都有一个名字服务器:维护着它所管辖区域的权威信息 (authoritative record)
     名字服务器允许被放置在区域之外,以保障可靠性

    名字空间划分为若干区域:Zone
    generic:通用的
    countries:国家
    在这里插入图片描述
    权威DNS服务器组织机构的DNS服务器, 提供组织机构服务器(如 Web和mail)可访问的主机和IP之间的映射
    组织机构可以选择实现自己维护或由某个服务提供商来维护

    TLD服务器
     顶级域(TLD)服务器:负责顶级域名(如com, org, net, edu和gov)和所有国家级的顶级域名(如cn, uk, fr, ca, jp )
     Network solutions 公司维护com TLD服务器
     Educause公司维护edu TLD服务器

    区域名字服务器维护资源记录
    资源记录(resource records)
    作用:维护 域名-IP地址(其它)的映射关系
    位置:Name Server的分布式数据库中
     RR格式: (domain_name, ttl, type,class,Value)
    Domain_name: 域名
    Ttl: time to live : 生存时间(权威记录,缓冲记录) 缓冲是为了性能 删除是为了一致性
    Class 类别 :对于Internet,值为IN 说明是Internet网
    Value 值:可以是数字,域名或ASCII串 对应的IP地址
    Type 类别:资源记录的类型—见下页

    DNS记录
    DNS :保存资源记录(RR)的分布式数据库
    RR 格式:(name, value, type, ttl)

    2.3.5 DNS大致工作过程

    一台设备上网必备的IP信息
    我的IP地址 我的子网掩码 我的local name serve 我的default getway(路由器)

    ​ 应用调用 解析器(resolver)
    ​ 解析器作为客户 向Name Server发出查询报文 (封装在UDP段中)
    ​ Name Server返回响应报文(name/ip)
    在这里插入图片描述
    本地名字服务器(Local Name Server)
     并不严格属于层次结构
     每个ISP (居民区的ISP、公司、大学)都有一 个本地DNS服务器
     也称为“默认名字服务器”
     当一个主机发起一个DNS查询时,查询被送到 其本地DNS服务器
     起着代理的作用,将查询转发到层次结构中

    名字服务器(Name Server)
    名字解析过程
    目标名字在Local Name Server中
    情况1:查询的名字在该区域内部
    情况2:缓存(cashing)

    当与本地名字服务器不能解析名字时,联系根名字服务器 顺着根-TLD 一直找到 权威名字服务器

    递归查询
     名字解析负担都 放在当前联络的 名字服务器上
     问题:根服务器 的负担太重
     解决: 迭代查询 (iterated queries)

    迭代查询
     主机cis.poly.edu 想知道主机 gaia.cs.umass.edu 的IP地址
     根(及各级域名)服务器返回的不是查询结果,而 是下一个NS的地址
     最后由权威名字服务器给出解析结果
     当前联络的服务器给出可以联系的服务器的名字
     我不知道这个名字,但可以向这个服务器请求

    2.3.6 DNS协议、报文

    DNS协议:查询和响应报文的报文格式相同
    在这里插入图片描述

    3、套接字编程

    1、应用进程通过SocketAPI的方式向下传输message消息;
    2、对方应用同样是通过SocketAPI的方式向上层传输message消息
    在这里插入图片描述
    2种传输层服务的socket类型:
    1)TCP:可靠地、字节流的、连接的服务
    2)UDP:不可靠(数据UDP数据报)、无连接的服务

    3.1 TCP套接字编程

    在这里插入图片描述

    服务端(1.1.1.1:80)
    socket      IP      port     IP1       port1
     8888     1.1.1.1    80
     8899     1.1.1.1    80     2.2.2.2     777
    
    客服端(2.2.2.2:777)
    socket      IP        port     IP1     port1
     2222     2.2.2.2     777    1.1.1.1    80
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1、首先服务器(1.1.1.1:80)运行socket函数,返回一个整数(8888),这个是welcomeSocket
    2、第二步建立一个bind(是第一步创建的整数)与本地的某个端口号(80)相捆绑
    3、服务端等待客户端的连接请求,如果没有客服端请求,就会阻塞
    consocket = accept WelComeSocket
    4、在客服端创建clientSocket(整数)与本地的某个端口号(777)和IP相捆绑
    5、客服端的TCP实体向服务端发送一个连接请求,此时服务端就会解除阻塞,同时服务端的TCP会返回一个应答,服务端会重新创建一个新的socket值(8899),与客服端建立连接
    6、客服端调用socketAPI将第4步创建的socket值和需要发送的值通过API发送到服务端
    服务端通过API来接收客服端的请求
    7、最后服务端处理后,通过write返回给客服端,客服端read
    最后在终端中显示服务端返回的结果
    8、最后服务端close掉,表象中的连接信息删掉

    3.2 UDP套接字编程

    在这里插入图片描述

  • 相关阅读:
    【无标题】
    01 挑战十分钟创建一个新的全栈项目
    Nautilus Chain 与 Coin98 生态达成合作,加速 Zebec 生态亚洲战略进程
    【SOA-KELM分类】基于海鸥算法优化核极限学习机分类研究(Matlab代码实现)
    短视频(批量剪辑+矩阵发布+爆款文案+无人直播)一体化营销工具
    uni-app--》基于小程序开发的电商平台项目实战(一)
    手机微信里面的文件打印步骤
    基于matlab实现的电力系统稳定性分析摆幅曲线代码
    C语言实现模拟 strcmp 字符串比较函数,实现字符串大小的比较
    关于时间日期
  • 原文地址:https://blog.csdn.net/java123456111/article/details/126852172