绪
网络应用是计算机网络存在的的理由,所以上至TCP/IP协议栈,下至双绞铜线和光纤,都是为实现网络应用提供各种服务
但是由于良好的分层模型,我们码农在应用层尽情发挥想象力的时候,除了关注应用之间的数据交互外,其他的对我们基本是透明的,大大降低了复杂度
网络应用程序体系结构
应用层常见的程序体系机构有两种
- Client/Server,即客户机/服务器体系结构,该体系结构包含一个始终运行着提供服务的服务器,以及分布在各个用户那里的客户机
- P2P,该体系结构很少依赖服务器,主要利用网络中互相平等的主机提供服务,著名的Skype、BT均便是该体系结构
我们可以做什么?
码农在开发网络应用时只需要关注应用层的协议,更底层的我们一般能够做的只是
- 选择运输层协议,TCP?UDP?
- 设定几个运输层的参数,最大缓存、最大报文长度等
关于运输层协议的选择,首先要知道的是两种协议为我们提供了什么服务?
TCP提供了
- 面向连接的服务,即在数据交互之前要先建立一个虚拟的‘连接’,这个连接是全双工的
- 可靠数据传输服务,可靠是指能够保证数据有序、完整的传输
- 拥塞控制服务,这可能对单个应用好处不大,但却能够提供整个互联网的性能
- 未提供加密服务,如果需要可以使用安全套接字实现SSL
UDP提供了
- 是一个轻量级的协议,不需要建立连接
- 不可靠的数据传输服务,不可靠是指不保证数据能付完整、有序的传输
- 也没有拥塞控制
HTTP
超文本传输协议(HyperText Transfer Protocol),它是web的核心。使用TCP作为它的支撑运输层协议。是一个无状态协议
HTTP请求报文格式
http_request.png请求报文第一行是请求行(request line),后续为首部行(header line)
请求行中请求方法一般为POST、GET、PUT、DELETE,协议版本类似HTTP/1.1
HTTP响应报文格式
http_response.png一些常见的响应码
- 200 ok 请求成功
- 301 moved permanently 请求的对象已经被永久转移了
- 400 bad request 一个通用差错代码,该请求服务器无法理解
- 404 not found 被请求的文档不在服务器
- 500 server error 服务器错误
- 505 http version is not supported 当前http版本不被支持
DNS
DNS(域名系统)的主要作用是提供主机名到IP地址的转换服务,由一个分布式的DNS数据库和查询该数据库的协议组成,基于UDP协议。DNS同时也可以提供负载均衡服务。
DNS分布式、层次数据库
- 根DNS服务器 因特网上有13个根服务器,其中大部分在北美。实际上每台服务器都是冗余的,为了提供安全性和可靠性
- 顶级域(TLD)服务器 这些服务器负责顶级域名(com、org、net、edu)和所有国家的顶级域名(uk、fr、ca等)
- 权威DNS服务器 网络上具有公共可访问主机的组织和公司必须提供公共课访问的DNS记录
P2P
P2P是除了服务器-客户端之外另一种重要的网络体系,是在网络中互相对等的两个终端之间进行通信,常见的应用为文件分发,即著名的BitTorrent协议;另一种是在对等方中组织并搜索信息;第三种是Skype,一个成功的P2P因特网电话应用。
BitTorrent
BT下载的主要原理是充分利用加入分发的各终端的网络上载流量,因为一般情况下,终端的下载流量会远远大于上载。简单来说,就是各终端均匀的下载文件的各个部分,然后再在临近的终端之间互相交换数据,既减轻服务器下载压力,又能提供终端的下载速度,实现了下载的人越多,下载速度越快的“变态”下载
网友评论