zoukankan      html  css  js  c++  java
  • 实验:应用层协议 学习笔记

    应用层协议

    在传输层之上,便是应用层。传输层的UDP报文和TCP报文段的数据部分就是应用层交付的数据。

    不同类型的网络应用有不同的通信规则,因此应用层协议是多种多样的,比如DNS、FTP、Telnet、SMTP、HTTP、RIP、NFS等协议都是用于解决其各自的一类问题。

    本节实验,介绍DNS、FTP、HTTP三个常用的应用层协议。

    一、DNS

    DNS (Domain Name Service 域名服务) 协议基于UDP,使用端口号53。

    由数字组成的IP地址很难记忆,所以我们上网使用网站IP地址的别名——域名。实际使用中,域名与IP地址是对应的,这种对应关系保存在DNS服务器之中。

    在浏览器中输入一个域名后,会有DNS服务器将域名解析为对应的IP地址。注意这和网络层的ARP协议的不同之处:DNS提供的是域名与IP地址的对应关系,而ARP提供的是IP地址和MAC地址的对应关系。

    DNS服务器

    DNS服务器是个分层次的系统:

    • (1)根DNS服务器 :全世界共有13台根域名服务器,编号A到M,其中大部分位于美国。

    • (2)顶级(TLD)DNS服务器 :负责如 com 、org 、edu 等顶级域名和所有国家的顶级域名(如 cn 、uk 、jp )。

    • (3)权威DNS服务器 :大型组织、大学、企业的域名解析服务。

    • (4)本地DNS服务器 :通常与我们主机最近的DNS服务器。

    而域名解析的过程,有迭代查询和递归查询两种方式:

    01

    host命令

    在linux系统中,可以用 host命令 进行DNS查询,查看一个指定域名的IP,比如要查询实验楼的IP地址:

    host www.shiyanlou.com
    

    04

    DNS报文

    主机向DNS服务器发出的查询叫做DNS报文,大致结构:

    03

    DNS问答报文的内容,都是IP和域名的对应信息,关于DNS首部和内容 各字段这里不做详细介绍。深入了解,可以先host一个域名,再使用tcpdump抓取报文并解读。

    DNS缓存和hosts文件

    刚才DNS解析查询过程的图中,共发出了8份DNS报文,这是非常消耗时间的,所以实际应用上使用 DNS缓存 :当一个DNS服务器接收到一个DNS回答后,会将其信息缓存一段时间,当再有一个对相同域名的查询时,便可直接回复。

    通过DNS缓存,其实很多查询都只需要本地DNS服务器便可完成。

    有“翻墙”爱好的同学应该知道hosts文件,其实hosts文件可以看作是一个小型的DNS服务器。

    使用命令打开hosts文件:

    sudo gedit /etc/hosts
    

    查看文件内容,可以发现里面全是IP和域名的对应记录:

    02

    在实际上网过程中,域名解析的的优先顺序是:先在DNS缓存查询,若没有找到记录,再查询hosts文件,若还是没找到记录,再向DNS服务器发出DNS查询报文。

    二、FTP

    FTP (File Transfer Protocol 文件传输协议) 基于TCP,使用端口号20(数据)和21(控制)。

    它的主要功能是减少或消除在不同操作系统下处理文件的不兼容性,以达到便捷高效的文件传输效果。

    • FTP只提供文件传输的基本服务,它采用 客户端—服务器 的方式,一个FTP服务器可同时为多个客户端提供服务。

    • 在进行文件传输时,FTP的客户端和服务器之间会建立两个TCP连接:21号端口建立控制连接,20号端口建立数据连接

    • FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。

    三、HTTP

    HTTP (HyperText Transfer Protocol 超文本传输协议) 基于TCP,使用端口号80或8080。

    每当你在浏览器里输入一个网址或点击一个链接时,浏览器就通过HTTP协议将网页信息从服务器提取再显示出来,这是现在使用频率最大的应用层协议。

    这个原理很简单:

    • 点击一个链接后,浏览器向服务器发起TCP连接;

    • 连接建立后浏览器发送HTTP请求报文,然后服务器回复响应报文;

    • 浏览器将收到的响应报文内容显示在网页上;

    • 报文收发结束,关闭TCP连接。

    HTTP报文会被传输层封装为TCP报文段,然后再被IP层封装为IP数据报。HTTP报文的结构:

    05

    可见报文分为3部分:

    • (1)开始行:用于区分是请求报文还是响应报文,请求报文中开始行叫做请求行,而响应报文中,开始行叫做状态行。在开始行的三个字段之间都用空格分开,结尾处CRLF表示回车和换行。

    • (2)首部行:用于说明浏览器、服务器或报文主体的一些信息。

    • (3)实体主体:请求报文中通常不用实体主体。

    请求报文的方法字段是对所请求对象进行的操作,而响应报文的状态码是一个3位数字,分为5类33种:

    • 1xx 表示通知信息,如收到或正在处理。

    • 2xx 表示成功接收。

    • 3xx 表示重定向。

    • 4xx 表示客户的差错,如404表示网页未找到。

    • 5xx表示服务器的差错,如常见的502 Bad Gateway。

    学习途径:实验楼

  • 相关阅读:
    IT面试技巧(2)
    mySQL学习入门教程——4.内置函数
    weight decay (权值衰减)
    c++读取文件目录
    caffe 卷积层的运算
    一个物体多个标签的问题
    python caffe 在师兄的代码上修改成自己风格的代码
    caffe 细节
    vim让一些不可见的字符显示出来吧
    python 读写文件
  • 原文地址:https://www.cnblogs.com/happyhacking/p/4389542.html
Copyright © 2011-2022 走看看