应用层协议原理
1. 概念解释
进程: 运行在端系统中的程序。
客户机和服务器: 在给定的一对进程之间的通信会话中,发起通信(即在该会话开始时与其他进程联系)的进程被标示为客户机,在会话开始时等待联系的进程是服务器。
2. 实例分析
1. 客户机/服务器体系结构
1) 客户机相互之间不直接通信。
2) 服务器具有固定的,周知的地址,称为IP地址。
2. P2P体系结构
1) P2P体系结构具有自扩展性(即作为客户机产生负载,但是作为服务器又增加了服务能力)
2) 成本有效。
3. 进程间通信
备注:有本大名鼎鼎的书叫做:UNIX网络编程卷2:进程间通信
4. 可供应用程序使用的运输服务
1) 可靠数据传输
2) 吞吐量
3) 定时
4) 安全性
5. TCP服务
1) 面向连接服务:通过握手标志客户机和服务器做好传输分组的准备,是全双工的。当应用程序结束报文发送时,必须拆除该连接。
2) 可靠数据传输服务: 进行通信的进程依靠TCP协议,无差错,按适当顺序交付发送的数据。当应用程序的一端通过套接字传送一个字节流时,它能够依靠TCP协议将相同的字节流交付给接收方的套接字,而没有字节的丢失和冗余。
6. UDP服务
UDP是一种不提供不必要服务的轻量级运输层协议,它仅提供最小服务。UDP是无连接的,因此在两个进程通信前没有握手过程。UDP协议提供的是不可靠数据传输服务,并且可能是乱序到达的。
7. 进程寻址
一个进程要与另一个进程进行通信,则需要以下信息:1) 该主机的名称或地址。2) 用来指定目的主机上接收进程的标识。(即IP和端口)
8. 应用层协议
应用层协议定义了:
1) 交换的报文类型,如请求报文和响应报文。
2) 各种报文类型的语法,如报文中的各个字段及其详细描述。
3) 字段的语义,即包含在字段中的信息的含义。
4) 进程何时,如何发送报文及对报文进行相应的规则。
WEB应用和HTTP协议
1. 概念解释
非持久连接: 当客户机/服务器交互时,每个请求/响应对是经一个单独的TCP连接发送。
持久连接: 当客户机/服务器交互时,所有的请求及相应的响应经相同的TCP连接发送。
往返时间RTT: 一个小分组从客户机到服务器再回到客户机所花费的时间。
静态文本: 页面显示的是相同的一个文档
动态页面: 页面本身包含一个程序,显示的是程序按需产生的内容。
2. 实例分析
1. HTTP概况
HTTP协议由两部分程序实现:一个客户机程序和一个服务器程序,它们运行在不同的端系统中,通过交换HTTP报文进行会话。服务器向客户机发送被请求的文件时,并不存储任何关于该客户机的状态信息。
2. 三次握手
客户机发送请求(1次握手),服务器返回确认(2次握手),客户机返回确认(3次握手),然后打开一个TCP连接,保证文件的传输。
3. HTTP报文格式
请求报文:
Get(方法) /somedir/page.html(URL) HTTP/1.1(协议)
Host:www.someschool.edu(主机)
Connection:close(非持续连接)
User-agent:Mozilla/4.0(浏览器)
Accept-language:fr(语言,这里为法语)
响应报文:HTTP/1.1(协议) 200(状态码) OK
Connection:close(非持续连接)
Date: Thu,03 jul 2003 12:00:15 GMT(文件从服务器发出时间)
Server: Apache/1.3.0( Unix)
Last-Modified: Sun,6 May 2007 09:23:24 GMT
Content-Length: 6821(数据长度)
Content-Type: text/html(数据格式)
(data data data data data...)
4. web缓存
通过web缓存器,可以在不增加带宽的情况下,降低响应时间。
5. 条件GET方法
作用:保证web缓存器上面的内容是最新的。
6. 万维网体系结构
客户端:
由统一资源定位符(URL)来实现,包括三个部分:协议,页面所在及其的DNS名字,以及唯一指向特定页面的路径。
服务端:
被设计成多线程模式:
这里为一个前端和多个处理模块(多线程模式),公用缓存。如果请求的页面不在缓存中,则从磁盘中进行读取并更新缓存。
cookie:
如图,cookie有4个组成部分:1) 在HTTP响应报文中有一个cookie首部行;2) 在HTTP请求报文中有一个cookie首部行;3)在用户段系统中保留有一个cookie文件,由用户的浏览器管理;4)在web站点有一个后端数据库。

而我在浏览器上只能找到如下的信息:
文件传输协议:FTP
1. 概念解释
2. 实例分析
1. FTP概述FTP使用两个并行的TCP连接来传输文件,一个是控制连接,一个是数据连接。控制连接用于在两个主机之间传输控制信息,如用户标识,口令,改变远程目录的命令以及"put"和"get"文件的命令。数据连接用于实际传输一个文件。
FTP命令和问答:
1) USER username
2) PASS password
3) LIST:用于请求服务器返回远程主机当前目录的所有文件列表。
4) RETR filename:用于从远处主机的当前目录检索(即get)文件。
5) STOR filename: 用于向远程主机的当前目录存放(即put)文件。
因特网中的电子邮件
1. 概念解释
2. 实例分析
1. 概述邮件发送接收的基本流程:
2. 邮件格式
RFC 5322-----internet邮件格式
MIME-----多用途internet邮件扩展
MIME可处理RFC822不支持的特性:如中文,带有重音符的语言等非ASCII能解决的难题。MIME添加的邮件头如下:
而MIME内容类型和子类型实例如下:
以下是邮件的一个例子:用户发送一个邮件,包含生日歌词和生日歌曲,并且同步播放:
3.邮件传送
可通过IMAP协议来完成。
telnet imap.qq.com 143
但是我本机上并不支持LOGIN命令的使用,导致无法进行发送和接收邮件。DNS:因特网的目录服务
1. 概念解释
DNS: 1) 一个由分层的DNS服务器实现的分布式数据库。2) 一个允许主机查询分布式数据库的应用层协议。
2. 实例分析
1. DNS使用方法
2. 域名资源记录
一条资源记录是一个五元组。格式如下:
Domain_name Time_to_live ClassTypeValue
Domain_name: 用于指出这条记录适用于哪个域。
Time_to_live: 该条记录的稳定程度(单位为秒,极稳定为一天86400,非常不稳定就一分钟60)
Class: 类别(对于internet信息,总是为IN)
Type: 记录的类型
Value: 类型相对于的值
以下表是一些重要类型:
类型 | 含义 | 值 |
SOA | 授权开始 | 本区域的参数 |
A | 主机的IPv4地址 | 32位整数 |
AAAA | 主机的IPv6地址 | 128位整数 |
MX | 邮件交换 | 优先级,愿意接受邮件的域 |
NS | 域名服务器 | 本域的服务器名字 |
CNAME | 规范名 | 域名 |
PTR | 指针 | IP地址的别名 |
SPF | 发送者的政策框架 | 邮件发送政策的文本编码 |
SRV | 服务 | 提供服务的主机 |
TXT | 文本 | 说明的ASCII文本 |
假设我们发送邮件到flits.cs.vu.nl,如果失效,则zephyr和top是第二个和第三个选择。它们对应的IP地址(130.37.20.10,130.37.20.11)为邮件存放地点(注意查看flits的信息)。而rowboat则提供IP地址(130.37.56.201),主要邮件存放处(rowboat),次要邮件存放处(zephyr)
3. DNS工作机理概述
最简单的DNS设计是因特网上只使用一个DNS服务器。这样会造成以下问题:
1) 单点故障:如果该DNS服务器崩溃,整个因特网将随之瘫痪。
2) 通信容量:单个DNS服务器不得不处理所有的DNS查询。
3) 远距离的集中式数据库:如果DNS服务器在纽约,澳大利亚的人民就惨了。
4) 维护: 单个DNS服务器不仅处理大量的数据,而且得时时更新,维护难度非常大。
所以,DNS服务器被设计成分布式数据库形式:
而DNS的查询也利用了递归查询和迭代查询:
递归查询: 服务器返回完整答案(如上图中的第一步,向本地服务器发送查询时候得到的答案)
迭代查询: 服务器返回部分答案(向根域名服务器查询等)
我们来运行一个实例,在fedora下运行dig,通过域名(我的事192。168.0.1,来查询华科网址):