本系列为个人对计算机网络的学习笔记,本文的主要内容是SMTP协议及其在电子邮件上的应用。
计算机网络---应用层
研发应用程序的核心是写出能够运行在不同端系统和通过网络彼此通信的程序。
application architecture
- 在C/S架构中,客户相互之间不直接通信,而是经由服务端。
在实际应用中,常常出现单独一台服务器主机跟不上其所有客户请求的情况,由此,数据中心出现了(由大量主机集中在一起组成),它常被用于创建强大的虚拟服务器。
- P2P体系结构中,应用程序在间断连接的主机之间使用直接通信,对于数据中心几乎没有依赖。它最大的特性是可自拓展,但也因高度非集中结构面临安全、可靠等方面性能的挑战。
进程通信
运行在多个端系统上的程序是如何相互通信的?
实际上,相互通信的是进程(process)而不是程序(program)。接下来重点关注的是不同端系统间进程的通信。
客户端和服务器
定义发起通信的进程为客户进程,等待联系的为服务器。
一个进程可以同时是这两个(如一些P2P的文件共享应用)
socket(套接字)
进程通过叫socket的软件接口向网络发送或接收message(报文)
- socket是同一台主机应用层与传输层之间的接口,也被称为应用程序和网络之间的API。
应用程序开发者主要针对应用层,其对于socket在传输层的控制很有限。如:
- 选择传输层协议
- 也许能设定几个传输层参数
进程寻址
需指定两样东西:
- 目标主机的ip地址
- 目标主机的端口号(是哪个进程,或者具体点说,哪个socket,去接收)
传输层协议简介(注:此处重点关注其对应用层应用程序的影响,关于传输层后面的笔记会再重点介绍)
应用程序服务要求的四大维度
可靠数据传输
其中多媒体(音视频)应用可以容忍数据丢失,可使用UDP
吞吐量
(截止《计算机网络:自顶向下方法 第七版》出版),许多媒体应用是带宽敏感的,不过可以使用自适应编码技术对数字语音或视频与当前可用带宽相匹配的速率进行编码
定时
即低延迟
安全性
数据传输过程中的加密解密
TCP服务
- 面向连接的服务
TCP的握手是为了提醒双方为大量分组的到来作准备。
之后,一条连接通道建立。
传输结束后,必须拆除该连接。
- 数据传输服务是可靠的
- 拥塞控制机制
出现阻塞时,会抑制发送进程。
TCP服务的安全性问题-SSL
TCP和UDP都没有安全加密机制,SSL(secure socket layer)是在应用层上对TCP的加强(故不是与TCP,UDP在一个层次上的)
UDP服务
- 定位:不提供不必要服务
与TCP相比:
- 无握手过程,无连接
- 不保证报文将到达接收进程,不保证报文到达顺序(即可能乱序)
- 没有拥塞控制机制
可用它选定的任何速率向下(网络层)注入数据
不过实际端到端吞吐量小于该速率可能是由于中间链路带宽受限或拥塞造成的。
注意事项
- TCP UDP本身并不提供对吞吐量和定时的保证,不过现实中可以通过一些巧妙设计实现这些要求。
- 许多防火墙被设置成阻挡UDP流量。故很多电话应用会将TCP作为备份。
应用层协议
注:应用层协议只是网络应用的一部分
(读者注:虽然我不太明白这个强调有什么意义,因为这似乎是直觉上也可以知道的)
应用层协议包含如下内容:
- 交换的报文类型(是请求的还是响应的)
- 报文的语法,字段是如何描述的;字段的语义
- 字段发送报文的时机及规则
HTTP协议(HyperText Transfer Protocol)
概况
- HTTP使用TCP作为支撑运输协议。
一旦客户向它的套接字接口发送一个请求报文,该报文就脱离了客户控制并进入TCP的控制。
- HTTP是一个无状态协议。
连接方式
HTTP默认模式是使用带流水线的持续连接。(但也能通过配置修改)
什么是持续连接?
所有请求和响应都经过相同TCP连接发送。
(读者注:意思就是一个一口气TCP承包所有,所以能连续,省去了建立一个新TCP之类的开销)
相对应地,每个请求/相应都得对应一个单独的TCP称为 非持续连接 。
在非持续连接的情况下,从服务器向客户传送一个web页面的过程发生了什么?
- HTTP客户进程在(HTTP默认)端口号80发起一个到服务器的TCP连接。
- 客户经其socket向该服务器发送一个HTTP请求报文。
- 服务器经它的socket接收报文,并从存储器中检索对象(Web页面由对象组成,此处的对象对应于URL里面提到的内容),在响应报文中封装对象,并通过socket发啊送相应报文。
- 服务器进程通知TCP断开连接。
- 待客户接收响应报文后,TCP的连接才真正关闭。
具体如下图所示:
报文格式
常用状态码
- 404 Not Found 被请求的文档不在服务器上
- 200 OK 请求成功
- 301 Moved Permanently 请求对象被永久转移,响应报文的Location一行有新的URL(客户软件会自动获取)
- 400 Bad Request 该请求无法被服务器理解
- 505 HTTP Version Not Supported
cookie
cookie技术由以下四个部分组成:
- HTTP响应报文中的cookie header line
- HTTP请求报文中的cookie header line
- 用户端系统中有一个cookie文件,由浏览器管理
- web站点后端的一个数据库
我个人理解,这就相当于,在首次发送报文的时候,web服务器为用户创建了一个标识id,此后用户访问其他站点时报文都会带上这个id,所以相当于web服务器追踪到了用户访问的其他站点信息。