0%

计网之应用层详解

[toc]

1 DNS#

  • 全称Domain Name System, 域名系统。
  • 传输层使用UDP协议,端口为53

Q: DNS为什么要使用UDP协议呢?
A:
DNS这个东西通信模式相当固定,报文基本上一个包搞定。大多数情况一问一答就结束了。
你三次握手来回3个包呢,人家一来一回就已经结速了,这种时候搞什么TCP?有必要中间连续穿好几次数据保证可靠性么?

1.1 域名#

  • 域名由 “标号.标号.标号”组成
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rk1b92vm-1613753140851)(en-resource://database/2048:1)]

  • 标号由字母和“-”组成。

  • 标号不超过63个字符

  • 总域名(标号之和)不能超过255

  • 分为根、顶级、二级、三级
    在这里插入图片描述

  • 顶级域名分类:

    1. 国家顶级域名nTLD: 例如cn\us
    2. 通用顶级域名gTLD:例如com\net\gov
    3. 基础建设顶级域(arpa)
      4.测试顶级域
  • 域名和ip可以是多对多的关系, 即1个域名可以对应多个ip(分布式多活), 1个ip也可以被绑定成不同的域名。

1.2 域名服务器#

  • 每个域名和ip的对应关系都会存在域名服务器中。
  • DNS采用分区的方式,解决域名服务器过多的问题,每个域名服务器管理一个区。
  • 分布式部署,C/S模式
    在这里插入图片描述

1.3 域名查找机制#

1.3.1 迭代查找(最常用)#

在这里插入图片描述

  1. 查找域名时,会先根据缓存,再根据本机host文件
  2. 当本地都没有,就会启动dns域名查找机制。
  3. 迭代查找记住就是会以本地DNS服务器为关键节点, 先去根域名寻求顶级域名服务器的ip
  4. 再去顶级域名却寻二级域的位置, 最后再去权威DNS服务器查找最终位置。
  • 注意像根域名服务器的位置一般也会做缓存,所以1、2、3这几步一般也是不用重复去做的,很可能查询一个陌生的域名时,直接在本地DNS那边定位到了4那一步。

1.3.2 递归查找(很少)#

递归其实就是从根域名如果找不到, 则让根域名发起请求向顶级域名查询。
即发起请求的对象变了,这种显然会占用根域名服务器的客户端资源,明显不好。

2 FTP文件传送协议#

基于TCP传输,可靠性高。

2.1 文件上传过程#

客户端发送PASV命令
在这里插入图片描述

可以看到FTP服务器会给每个连接建立相应独立的控制进程和数据进程。

2.2 文件下载过程#

其实就是发送了PORT命令:
PORT h1,h2,h3,h4,p1,p2 (h1-h4是IP地址,p1-p2是端口号)
在这里插入图片描述

可以看到下载过程是FTP服务器向对方发起连接


  • 注意上面发起会话时,会有身份认证的过程,同时也可以配置用户权限。
  • FTP不适合在2个计算机直接进行共享读写文件(因为会进行资源占用), 只适合单次的上传和下载。

3 TFTP 简单文件传送协议#

  • 使用UDP传输
  • 支持文件传输但是无交互命令
  • 应用层报文按序编号
  • 熟知端口为69
  • 代码轻量,程序占用小
  • 传输过程类似于停止-等待协议:

单帧滑动-停止等待协议

  • 一次只发一帧,1次只收一帧,并确认占有信道后才继续
  • 发送端:收到ack确认后,才会发下一个,每个都有个定时器
  • 接收端:序号不匹配递增的话都会丢弃。

3.1 P2P文件传输#

FTP和TFTP,都可能是有人把文件存在一个集中的服务器上,大家去下载上传。

而P2P则是建立了主机和主机间的直接通信, 不需要依赖中间服务器

  • 类似于别人直接从你电脑的目录上下载文件而不是从百度网盘里下载

4 SMTP电子邮件协议#

4.1 组件构成#

4.1.1 用户代理UA(user agent)#

其实就是邮件客户端,类似于foxmail、outlook、qq邮箱等exe程序,

4.1.2 邮件服务器#

  • 功能: 发送和接收邮件,报告邮件的传送情况
  • 具备C/S工作模式: 发送邮件时是一个客户端,接收邮件时是一个服务端
  • 不同邮件提供商有自己的服务器,但是他们之间可以互相通信。

4.1.3 协议#

使用SMTP接收协议和POP读取服务完成整套邮件系统协议。

4.2 通信步骤#

4.2.1 连接建立#

  • 用户使用UA发送邮件到自己UA所属的邮件服务器
  • 服务器定期扫描,发现有新的未发送邮件
  • 向目的端服务器试图建立连接

4.2.2 邮件传送#

  1. 发送端发送MAIL命令
  2. 接收端回答“250 OK”,即准备好接收
  3. 发送端发送多个"RCPT+ 收件人"的命令, 以向对方确认是否可以接收
  4. 接收端逐一应答“250 ok”或者“550 no such user”
  5. 获得ok应答后,使用DATA命令发送邮件内容
  6. 接收端回复 354 xxx end xxx., 告知邮件接收结束

4.2.3 连接释放#

发送端发送QUIT命令
接收端返回221同意释放连接

4.2.4 POP推送给客户端UA#

注意前面3步只是完成了从发送者到 接收者所属邮件服务器的步骤,还没有到接收者本地的邮箱应用。
接收者客户端会通过POP协议定期去拉取邮件。