网络体系结构(network architecture):是计算机之间相互通信的层次,以及各层中的协议和层次之间接口的集合。
网络协议:是计算机网络和分布系统中互相通信的对等实体间交换信息时所必须遵守的规则的集合。
语法(syntax):包括数据格式、编码及信号电平等。
语义(semantics):包括用于协议和差错处理的控制信息。
定时(timing):包括速度匹配和排序。
1978年ISO提出了”异种机连网标准”的框架结构,这就是著名的开放系统互联基本参考模型 OSI/RM (Open Systems Interconnection Reference Modle),简称为 OSI 。
OSI参考模型用物理层、数据链路层、网络层、传输层、对话层、表示层和应用层七个层次描述网络的结构,它的规范对所有的厂商是开放的,具有指导国际网络结构和开放系统走向的作用。它直接影响总线、接口和网络的性能。常见的网络体系结构有FDDI、以太网、令牌环网和快速以太网等。从网络互连的角度看,网络体系结构的关键要素是协议和拓扑。
第一层:物理层(PhysicalLayer)
规定通信设备的机械的、电气的、功能的和规程的特性,用以建立、维护和拆除物理链路连接。具体地讲,机械特性定了网络连接时所需接插件的规格尺寸、引脚数量和排列情况等;电气特性规定了在物理连接上传输bit流时线路上信号电平的大小、阻抗匹配、传输速率距离限制等;功能特性是指对各个信号先分配确切的信号含义,即定义了DTE和DCE之间各个线路的功能;规程特性定义了利用信号线进行bit流传输的一组操作规程,是指在物理连接的建立、维护、交换信息时,DTE和DCE双方在各电路上的动作系列。
在这一层,数据的单位称为比特(bit)。物理层的主要设备:中继器、集线器、适配器。
第二层:数据链路层(DataLinkLayer)
物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(Frame)在信道上无差错的传输,并进行各电路上的动作系列。
数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
在这一层,数据的单位称为帧(frame)。
数据链路层主要设备:二层交换机、网桥。
第三层:网络层(Networklayer)
在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点,确保数据及时传送。网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,其中含有逻辑地址信息- -源站点和目的站点地址的网络地址。
如果你在谈论一个IP地址,那么你是在处理第3层的问题,这是”数据包”问题,而不是第2层的”帧”。IP是第3层问题的一部分,此外还有一些路由协议和地址解析协议(ARP)。有关路由的一切事情都在第3层处理。地址解析和路由是3层的重要目的。网络层还可以实现拥塞控制、网际互连等功能。
在这一层,数据的单位称为数据包(packet)。
网络层协议的代表包括:IP、IPX、RIP、ARP、RARP、OSPF等。
网络层主要设备:路由器
第四层:传输层(Transportlayer)
第4层的数据单元也称作处理信息的传输层(Transport layer)。但是,当你谈论TCP等具体的协议时又有特殊的叫法,TCP的数据单元称为段(segments)而UDP协议的数据单元称为”数据报(datagrams)”。这个层负责获取全部信息,因此,它必须跟踪数据单元碎片、乱序到达的数据包和其它在传输过程中可能发生的危险。第4层为上层提供端到端(最终用户到最终用户)的透明的、可靠的数据传输服务。所谓透明的传输是指在通信过程中传输层对上层屏蔽了通信传输系统的具体细节。
传输层协议的代表包括:TCP、UDP、SPX等。
第五层:会话层(Sessionlayer)
这一层也可以称为会晤层或对话层,在会话层及以上的高层次中,数据传送的单位不再另外命名,统称为报文。会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。
第六层:表示层(Presentationlayer)
这一层主要解决用户信息的语法表示问题。它将欲交换的数据从适合于某一用户的抽象语法,转换为适合于OSI系统内部使用的传送语法。即提供格式化的表示和转换数据服务。数据的压缩和解压缩, 加密和解密等工作都由表示层负责。例如图像格式的显示,就是由位于表示层的协议来支持。
第七层:应用层(Applicationlayer)
应用层为操作系统或网络应用程序提供访问网络服务的接口。
应用层协议的代表包括:Telnet、FTP、HTTP、SNMP等。
首先UDP协议是无连接,不可靠,面向数据报的。
无连接:知道对端的IP和端⼝号就直接进⾏传输, 不需要建⽴连接;
不可靠: UDP没有确认机制来确保报文的到达,没有对报文进行排序的机制,也不提供反馈信息来控制端到端报文传输的速度,所以它的传输是不可靠的。
面向数据报:不能够灵活的控制读写数据的次数和数量。
UDP常用端口:
TCP协议是面向连接的,可靠地,面向字节的。
连接管理机制:
正常情况下,TCP要经过三次握手建立连接,四次挥手断开连接。
确认应答(ACK)机制:
TCP主机A每次给主机B发送一次数据,主机B都要给主机A发送一个确认应答(每一个ACK都带有对应的确认序列号,告诉发送者我已经收到了那些数据,下一次该从哪里开始发)。
超时重传机制:
如果主机A发送给主机B的数据因为网络拥堵等原因丢包了,数据无法到达主机B。
在特定时间内,主机A没有接收到主机B发送回来的ACK,就会把数据进行重发。
滑动窗口:
因为加入了确认应答机制和超时重传机制,导致性能变差,为了提高性能,引入滑动窗口机制。
即两主机发送数据帧时,不是一帧帧的发送,而是每次发送指定窗口大小的数据帧(当然可以不满,窗口的大小取决于接收窗口和拥塞窗口中的较小值)。
TCP滑动窗口工作过程如下:
流量控制:
接收端处理数据的速度是有限的. 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送, 就会造成丢包, 继⽽引起丢包重传等等⼀系列连锁反应。
因此TCP支持根据接收端的处理能力,来决定发送端的发送速度,这个机制就叫做流量控制。
拥塞控制:
虽然TCP有了滑动窗⼝机制, 能够⾼效可靠的发送⼤量的数据. 但是如果在刚开始阶段就发送⼤量的数据, 仍然可能引发问题。
因为网络上有很多的计算机, 可能当前的网络状态就已经比较拥堵。在不清楚当前网络状态下,贸然发送大量的数据,很有可能造成严重的问题。
TCP引入慢启动机制,先发少量的数据,摸清当前的网络拥堵状态,再决定按照多大的速度传输数据。
拥塞窗口的增长速度,是指数级别的。“慢启动”只是初始时慢,但是增长速度非常快。为了不增长的那么快,因此不能使拥塞窗口单纯的加倍,此处引用一个叫做慢启动的阈值,当拥塞窗口超过这个阈值的时候,不再按照指数方式增长,而是按照线性方式增长。
延迟应答:
如果接收数据的主机⽴刻返回ACK应答, 这时候返回的窗⼝可能⽐较⼩。
但实际上可能接收端的处理端的速度很快,很快就会将发送来的数据从缓冲区消费掉,这种情况下,接收端处理远不能达到自己的极限,即使窗口再大一些也可以处理过来。
因此引入延时应答机制,接收端每次都略等一会在应答,这时候返回的窗口大小就又会变大,从而在保证了网络不拥塞的情况下尽量提高了传输效率。窗口越大,网络吞吐量就越大,传输效率就越高。
捎带应答:
在延时应答的基础上,发送端与接收端在应用层也是“一发一收”的,在这个基础上,捎带应答就是令ACK与接收端回送的消息一起回给客户端。
面向字节流:
TCP通过字节流传输,即TCP将应用程序看成是一连串的无结构的字节流。每个TCP套接口有一个发送缓冲区,如果字节流太长时,TCP会将其拆分进行发送。当字节流太短时,TCP会等待缓冲区中的字节流达到一定程度时再构成报文发送出去,TCP发给对方的数据,对方在收到数据时必须给矛确认,只有在收到对方的确认时,本方TCP才会把TCP发送缓冲区中的数据删除。
TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字(socket)或插口。
套接字用(IP地址:端口号)表示。
它是网络通信过程中端点的抽象表示,包含进行网络通信必需的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
流式套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流式套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。
流式套接字提供没有记录边界的数据流:可以是双向的字节流(应用程序是全双工:可以通过套接字同时传输和接收)。可依赖流传递有序的、不重复的数据。(“有序”指数据包按发送顺序送达。”不重复”指一个特定的数据包只能获取一次。)这能确保收到流消息,而流非常适合处理大量数据。