【计算机网络】第2章 应用层(2022.3.16更新)

应用层

应用层协议原理

应用层网络应用体系结构有三种,老生常谈的东西

  • 客户机/服务器
  • 对等 (P2P)
  • 客户机/服务器与P2P的混合

应用层的通信,本质是两台不同主机间进程的通信,如果两个进程在同一台主机上,进程间的通信由操作系统控制;如果是不同主机的两个进程,通过网络报文进行

套接字是应用程序和网络之间的应用程序接口API ,是在网络上建立网络应用程序的可编程接口,是进程通信的接口

用户代理:是用户与网络应用程序之间的接口,如浏览器Web应用的用户代理

image-20220310105014472

套接字识别进程的话分为两步,识别网络中的哪一个主机,它用主机的地址标识,还需要识别主机中的哪一个进程, 它用端口号标识

因特网运输层给应用层提供的服务有

  • 传输控制协议TCP (面向连接)
    过程是:建立连接(握手过程),传输报文,拆除连接
    通信进程可以无差错按适当顺序交付发送的数据,当发送方和接收方之间的网络出现拥塞时,会抑制发送进程速率
  • 用户数据报协议UDP(面向无连接)
    过程:两个进程通信前没有握手过程
    不保证报文能够被接收,或收到的报文是乱序到达,发送进程可以任何速率发送数据

TCP和UPD都没有提供任何加密机制,加密层由应用程序实现,它位于应用层和传输层之间,由安全层套接字层实现(Secure Socket Layer, SSL)

下面是常见应用对应的应用层协议和传输协议

image-20220310110526458


2022/3/11更新

Web和HTTP

一,基本概念

HTTP超文本传输协议,是web的核心,它定义了报文的格式以及客户机和服务器交换报文的方式

一个web页面,就是一个文档,一个文档由若干对象组成,一个对象就是一个文件,对象比如说:HTML文件,JPEG图片等等

每个对象都能在网络中定位,通过url统一资源标识符

image-20220311161558454

客户机和服务器的交互过程,包含 创建TCP连接→交换报文→关闭TCP连接,底层是通过TCP建立的可靠连接,但是HTTP是无状态的,客户机请求多次,服务器也会响应多次
image-20220311161912759

二,HTTP连接

首先是非持续连接,基本上现在的网络中不会用,每个TCP连接只传输一个请求报文和一个响应报文,服务器返回对象后关闭,每次请求一个对象都要重新连接

TCP连接的“三次握手”过程,如下

  • 客户机发送一个TCP连接请求报文
  • 服务器回送一个TCP确认响应报文
  • 客户机向服务器发送一个包含“ HTTP请求”与“TCP确认”的报文
image-20220311162734626

非持续连接缺点:服务器负担重每个对象传输时间延长(每个对象都要两个RTT时延)

持续连接

相同客户机与服务器之间的后续请求和响应报文通过相同的连接进行传送,省去了再次建立连接的过程,不过一定时间间隔未被使用,服务器会关闭连接

持续连接包含,非流水线方式流水线方式

  • 非流水线方式:客户机只能在前一个响应接收到之后才能发出新的请求
  • 流水线方式:客户机可一个接一个连续产生请求(只要有引用就产生),即在前一个请求接收到响应之前可以产生新的请求
image-20220311163204451

http请求的报文如下

image-20220311163357379

三,用户与服务器交互:Cookie

HTTP服务器是无状态的,不保存客户信息,所以需要需要Cookie让服务器与用户相关联

  1. 在HTTP响应报文中有一个cookie 首部行
  2. 在HTTP请求报文中有一个cookie 首部行
  3. 用户主机中保留有一个 cookie 文件并由浏览器管理
  4. Web站点的后端数据库保存cookie

工作流程:

image-20220311163837427

四,Web缓存器

Web缓存器(Web cache):也叫代理服务器,它存在的意义在于加快客户机想服务器请求对象的速度,原理如下:

浏览器向缓存发送所有HTTP请求,如果在Web缓存中,就之间返回该对象,如果不在,则代理服务器替用户想原始服务器发送请求,接收后转发给客户机,和高速缓存类似,减少响应时间,减少内部和因特网的通信量

image-20220311164104168

五,条件GET方法

在使用Web缓存的时候,存放在缓存中的对象拷贝可能是旧的。即保存在起始Web服务器中的对象可能已经被修改,条件GET方法可以使得缓存的对象一直是最新状态,流程如下

  1. 客户机第一次请求时候,Web服务器回发响应报文给Web缓存器,包括对象的最后修改时间Last-modified:date1,Web缓存器记录时间并且缓存对象
  2. 客户机再次请求,缓存器检查Web服务器中的该对象是否已被修改,发送一个条件GET请求报文If-modified-since: date1
  3. 若Web服务器中的该对象未被修改,则响应报文含有304 Not Modified,并且实体为空;如果修改过,再次重新发送响应报文,携带Last-modified:date2

image-20220311165029609


2022/3/16更新

文件传输协议FTP

本地主机上的用户,向远程主机上传或者下载文件,用户通过一个FTP用户代理与FTP服务器交互

image-20220316150426410

FTP运行在TCP之上,FTP建立了两个并行的连接控制连接数据连接

  • 控制连接
    21号端口上建立,用于在两主机间传输控制信息(如用户标识、口令等),它是持续连接的:在整个用户会话期间一直保持
    image-20220316150704898
  • 数据连接
    在20端口建立,用于准确传输文件,在该数据连接上传送一个文件并关闭连接,它是非持续连接的:会话中每进行一次文件传输,都需要建立一个新的数据连接
    image-20220316150909799

FTP较HTTP来说,是带外传输,是分离控制的;还有是FTP协议是有状态,会对用户行为进行追踪,并控制会话总数

电子邮件SMTP(讨论应用层)

电子邮件系统的总体结构由三部分组成:用户代理邮件服务器简单邮件传输协议SMTP

image-20220316151518662

用户代理

即邮件阅读器,允许用户阅读、回复、发送、保存和撰写报文,用户接收和发送邮件都用通过用户代理

比如说:qq邮箱,阿里邮箱,Foxmail

image-20220316151850958

邮件服务器(mail server)

邮件服务器里面由报文队列,存储要转发的邮件报文;自身并且存储了用户的所有邮件

用户访问自己邮箱时,邮件服务器对其身份进行验证(用户名和口令),若投递失败,发送方将其保存在一个报文队列中,以后每30分钟发送一次,若几天后仍未成功,将该报文删除,并通知发送方

简单邮件传送协议SMTP

SMTP使用端口为25,并且SMTP不使用中间邮件服务器发送邮件

把一封邮件从发送邮件服务器传送到接收邮件服务器的过程: 如Alice 向 Bob发送报文
image-20220316154807356

SMTP较HTTP来说共同点和不同点

相同点:

  • 都用于从一台主机向另一台主机传送文件
  • 都是持续连接

不同点:

  • SMTP是推协议:发送邮件服务器把文件推向接收邮件服务器,其TCP连接是由要发送文件的机器发起。
  • HTTP是拉协议:用户使用HTTP从服务器拉取信息,其TCP连接是由想获取文件的机器发起。
  • SMTP对传输的数据有限制,只能传输7位ASCII码,对一些包含了非7位ASCII字符的报文或二进制数据(如图片、声音),需要按照7位ASCII码进行编码,再传送
  • HTTP数据没有该限制
  • SMTP所有报文对象放在一个报文中
  • HTTP把每个对象封装在它各自的HTTP响应报文中发送

MIME(多用途因特网邮件扩展):用于非ASCII数据传输。将非ASCII数据编码后传输,接收方再解码还原,增加新的MIME邮件首部,接收的报文还有Received字段首部行

image-20220316160356407

邮件访问协议

邮件访问协议就是取邮件的协议,因为SMTP协议只能发送邮件,取邮件有其它的协议,有POP3(第三版的邮局协议),IMAP(因特网邮件访问协议),HTTP

  • POP3
    在用户代理打开了一个到邮件服务器(服务器)端口110上的TCP连接后,身份认证后,开始工作,功能有限,取回后自动删除(这是缺陷)
  • IMAP
    在用户的PC机上运行IMAP客户程序,然后与ISP的邮件服务器上的IMAP服务器程序建立TCP连接,是联机协议(实现复杂)
  • HTTP
    用户使用浏览器收发电子邮件,发件人使用HTTP 将电子邮件报文从其浏览器发送到其邮件服务器上,然后收件人使用HTTP从其邮箱中取一个报文到浏览器。容易进行目录管理。

DNS(因特网的目录服务)

标识主机的方式有主机名ip地址,主机名容易记忆,通常需要将主机名检索出对应的ip地址,DNS提供此服务,进行主机名到IP地址的转换

DNS运行在UDP协议之上,使用53端口,DNS通常直接由其他的应用层协议 (包括HTTP、SMTP 和FTP)使用,以将用户提供的主机名解析为IP地址。用户只是间接使用

DNS工作机理概述

  1. 某个应用程序调用DNS的客户端,并指明需要被转换的主机名
  2. 用户主机上的DNS接收到后,向网络中发送一个DNS查询报文
  3. 经过若干毫秒到若干秒的时延后,用户主机上的DNS接收到一个提供所希望映射的DNS回答报文
  4. 映射结果被传递到调用DNS的应用程序

DNS设计

  • 简单设计(集中式设计)
    假设因特网上只使用一个DNS服务器,该服务器包含所有的映射
    优点:设计简单
    缺点:单点故障,通信容量,远距离请求导致延时长,维护困难
  • 分布式、分层次式设计
    为了处理扩展性问题,DNS使用了大量的DNS服务器,它们以层次方式组织,并且分布在全世界范围内
    image-20220316163348879
    • 第一层为根DNS服务器:世界上有13台,是冗余服务器,具有可靠性
    • 第二层为顶级域(TLD)DNS服务器:负责顶级域名如net、gov,以及所有国家的顶级域名如uk、fr、ca和jp
    • 第三层为权威DNS服务器:在因特网上具有公共可访问主机的组织机构用来保存将主机名映射为IP地址的DNS记录。多数大学和大公司实现和维护它们基本和辅助的权威DNS服务器
    • 本地DNS服务器,不算DNS服务器层次结构,可以起缓存代理作用,减少访问次数,提高效率,由于主机和主机名与IP地址间的映射并不是永久的,DNS服务器在一段时间后(通常设置为两天)将丢弃缓存的信息

交互过程

迭代查询
image-20220316164011885

递归查询

image-20220316164044421

DNS记录报文

资源记录是一个包含了下列字段的4元组**(Name,Value,Type,TTL)**

  • TTL决定记录生存时间

  • Name和Value的值取决于Type

    • Type=A,Name则是主机名,Value是该主机对应的IP地址。提供了标准的主机名到IP地址的映射。(relayl.bar.foo.com,145.37.93.126,A)
    • Type=NS,Name是一个域(如foo.com),Value是个知道如何获得该域中主机IP地址的权威DNS服务器主机名。该记录用于沿着查询链来路由DNS查询。 (foo.com,dns.foo.com,NS)
    • Type=CNAME,Value是别名为Name的主机对应的规范主机名。向查询的主机提供一个主机名对应的规范主机名。(foo.com,relayl.bar.foo.com,CNAME)
    • Type=MX,Value是别名为Name的邮件服务器的规范主机名。(foo.com,mail.bar.foo.com,MX)MX记录允许邮件服务器主机名具有简单的别名。

    如果服务器不是用于某主机名的权威服务器,则该服务器会有一条类型NS记录,该记录对应于包含主机名的域;还将包含一条类型A记录

    DNS报文结构

    image-20220316174342084

这里面的请求流程比较难懂,希望大伙能够自己琢磨一会,我花了2个小时才看明白/(ㄒoㄒ)/~~

例子:当请求www.liangyuanshao.top的时候

  1. 我这台主机向本地DNS服务器发请求
  2. 本地DNS服务器请求根域名服务器,根域名服务器返回dns.top的顶级域名服务器地址
  3. 本地DNS服务器请求dns.top顶级域名服务器,dns.top顶级域名服务器返回dns.liangyuanshao.top权威域名服务器的地址
  4. 本地DNS服务器请求上面dns.liangyuanshao.top权威域名服务器的地址,它返回服务器主机的ip地址
  5. DNS根据服务器把ip地址告诉我这台主机,主机建立和服务器的TCP通信

P2P 文件共享

TCP的套接字 编程

UDP的套接字 编程

构建一个 Web 服务器

小结

之后持续更新,欢迎来我的个人博客网站😊😘www.liangyuanshao.top

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小梁说代码

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值