因为博客迁移至www.coderyi.com,文章请看http://www.coderyi.com/archives/405 服务器
写这篇博客,主要是看了谢希仁的计算机网络那本书,计算机专业的朋友在大学期间都学过那本教材,近日重读特写这篇博客。网络
五层模型主要是结合了osi的七层和tcp/ip的四层得出,主要是物理层、数据链路层、网络层、传输层、应用层五层,下层向上层提供服务,上层向下层提供接口。做为一个iOS开发者接触比较多的就是上面两层,因此本文也主要介绍上面两层。socket
先讲一讲各层的传输单位,应用层是报文(message),报文在发送以前通常会划分红为等长的数据段,在每段前面加上一些必要的控制信息组成的首部后,就构成了一个分组(packet),也叫作包,首部也可叫包头。不管在哪一层传送的数据单元,习惯上均可以笼统地用分组来表示。tcp
传输层主要使用TCP和UDP,若是使用TCP的话,单位是报文段(segment),UDP的单位是用户数据报。在发送数据时,网络层把传输层产生的报文段或者用户数据报封装成分组或包进行传送,因为网络层使用IP协议,分组也叫作IP数据报,简称数据报。 数据链路层将网络层交下来的IP数据报组装成帧(framing),物理层单位是比特,就是0和1。spa
从通常的概念讲,讲网络互联起来要使用一些中间设备,物理层使用的中间设备叫作转发器(repeater),数据链路层使用的中间设备叫作网桥或桥接器(bridge),网络层使用的中间设备叫作路由器(router),网络层以上使用的中间设备叫作网关(gateway)。计算机网络
接下来简单介绍一下物理层,首先须要明白的是物理层不是指具体的物理设备或者信号传输的物理媒体,而是指在物理媒体之上为上一层(链路层)提供一个传输原始比特流的物理链接。这一层实现的硬件是集线器(hub),它对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把全部节点集中在以它为中心的节点上。code
数据链路层协议有许多种,可是有三个基本问题则是共同的,这三个问题就是:封装成帧、透明传输、差错检测。关于差错控制,比特在传输过程当中可能0变1,1变0,这叫作比特差错,数据链路层普遍使用了循环冗余检验CRC(Cyclic Redundancy Check)。数据链路层使用两种信道:点对点信道和广播信道,点对点协议PPP(point-to-point protocol)则是点对点信道经常使用的协议,也是该层最普遍的协议,工做在该层的硬件是网桥。orm
第三层是网络层,网络层向上层提供的是无链接的数据报服务,数据报服务的可靠通讯应该由用户主机来保证、链接的创建能够不须要、每一个分组都有终点的完整地址、分组独立选择路由进行转发,当结点出故障时,故障结点可能会丢失分组,一些路由可能会发生改变,到达终点不必定按发送顺序,端到端的差错控制和流量控制由用户主机负责。网络层不提供服务质量的承诺,IP数据报首部中的检验和字段,只检验首部是否出现差错而不检查数据部分。若是主机中的进程之间的通讯须要是可靠的,那么就由网络的主机中的运输层负责(包括差错处理、流量控制等),IP协议是该层的核心协议,IP协议的主要功能就是无链接的数据报传输、数据报路由选择和差错控制。router
第四层是传输层,它属于面向通讯的最高层,同时也是用户功能中的最底层。当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通讯时,只有主机的协议栈才有传输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。网络层是为主机之间提供逻辑通讯,而传输层为应用进程之间提供端到端的逻辑通讯。端口是应用层各协议进程与运输实体进行层间交互的一种地址,传输层的端口号分为两大类,一是服务器使用的端口号,这里又分两类,熟知端口号,也叫系统端口号,数值为0~1023,例如FTP(21)、HTTP(80)、SMTP(25)等,另外一种是登记端口号,数值在1024~49151;另外一类是客户端使用的端口号,数值在49152~65535之间。server
传输层有一个重要的功能是复用和分用,复用是指发送方不一样的应用进程可使用同一个传输层协议传送数据,而分用是指接收方的传输层在剥去报文的首部后可以把这些数据正确交付到目的进程。
传输层有两个协议,面向链接的TCP和无链接的UDP。UDP是无链接的,使用尽最大努力交付,即不可靠交付,UDP是面向报文的,UDP没有拥塞控制,所以网络出现的拥塞不会使源主机发送速率下降,UDP支持一对1、一对多、多对1、多对多的交互通讯,UDP的首部开销小。TCP是面向链接的传输层协议,TCP链接只能是一对一的,它提供可靠的交付服务,也就是说,经过TCP链接传送的数据,无差错、不丢失、不重复、而且按序到达,TCP提供全双工通讯,TCP是面向字节流的,TCP把应用程序交下来的数据块当作无结构的字节流,TCP不保证接收方应用程序收到的数据块和发送方应用程序所发出的数据块具备对应的大小关系(例如,发送方应用程序交给发送方TCP共10个数据块,但接收方的TCP可能只用4个数据块就把收到的字节流交付给了上层的应用程序,但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流彻底同样)。
TCP链接的端点叫作套接字(socket)或插口,即(IP地址:端口号),每一条TCP链接惟一地被通讯两端的两个端点(即两个套接字)所肯定。
TCP的运输链接有三个阶段,即链接创建、数据传送、链接释放。TCP链接创建的过程要使每一方可以肯定对方的存在,主动发起链接创建的应用进行叫作客户(client),被动等待链接创建的应用进程叫作服务器(server),链接创建的过程叫作三次握手,假设A为客户,B为服务器,A发送一个报文给B,B发回确认,而后A再加以确认,来回共三次。
链接的释放须要发送四个包,所以成为四次挥手。客户端或服务器均可以主动发起挥手动做。
第五层是应用层,FTP(对应应用,文件传送)、HTTP(对应应用万维网)、TELNET(远程终端接入)、SMTP(电子邮件)使用的传输层协议都是TCP,DNS(名字转换)、TFTP(文件传送)、专用协议(IP电话、流式媒体通讯)等使用的传输层协议都是UDP。
以上就是计算机网络的五层协议。