首页 > 网络 > 网络编程 > 网络概述,协议介绍
2018
03-07

网络概述,协议介绍

计算机网络出现的原因

网络概述,协议介绍 - 第1张  | rs232的博客

电路交换(circuit switching)

最早的计算机网络脱胎于电话通信网络,所以有必要从电话的电路交接网说起。在电话问世后不久,人们就发现要让所有的电话机都两两连接是不现实的。如下图所示,N部电话两两相连,所需要的电话线为N(N-1)/2对,这是个N平方复杂度,当N增加大时所需要电话线总数将急剧增大。于是人们意识到,要使得每一部电话能够很方便地和另一部电话通信,就应当使用电话交换机将这些电话连接起来,如图c所示。

网络概述,协议介绍 - 第2张  | rs232的博客

使用电路交换时,通信两方需要在一系列交接机之间先建立一条物理链接,如下图所示。

网络概述,协议介绍 - 第3张  | rs232的博客

这条通过交换机中继的方式连接起来的通信链接将在通信过程中一直存在,直到双方停止通信,才能释放这条专用的物理通道。使用电路交换的网络具有以下特点:

  1. 需要建立链接->使用链接->释放链接
  2. 通信过程中链接被通信双方独占
    使用电路交换来传输计算机数据时,其线路的传输效率往往很低。因为计算机数据是突发式出现在数据链路上的,线路上真正用来传送数据的时间往往不到10%甚至低于1%。已被用户占用的通信线路资源在绝大部分时间里都是空闲的。

分组交换(packet switching)

为解决电路交换效率低的问题,提出了分组交换。分组交换采用存储转发技术,在传送数据之前,把数据(称为报文message)分成几个数据段,在每个数据段前面加上一些必要的控制信息组成首部(header),就构成一个分组(packet)。分组又称为“包”,而分组的首部也可称为“包头”。

网络概述,协议介绍 - 第4张  | rs232的博客

使用分组交换传输数据的过程如下:通信节点收到分组,先暂时存储下来,再检查其首部,按照首部中的目的地址,找到合适的节点转发出去。最终所有的分组都会传送到目的结点,目的结点再根据每个分组的首部序列信息,重组报文。

网络概述,协议介绍 - 第5张  | rs232的博客

使用分组交换有如下特点:

  1. 分组交换在传递数据之前不需要占用一条端到端的通信资源,分组在哪一段链路上传送时,才占用这段链接的通信资源。分组在到达一个路由器后,先暂时存储下来,查找转发表,然后从另一条合适的链路转发出去。
  2. 通过网络协议,可以保证数据传送具有非常高的可靠性。当网络中的某些结点或链路出现故障时,在各路由器中运行的路由选择协议能够自动找到其他路径转发分组。
  3. 分组在各路由器存储转发时需要排除,这就会造成一定的时延。
  4. 分组交换的各分组必须携带一些控制信息,这造成了一定的额外开销。整个分组交换网还需要专门的管理和控制机制。

网络通信协议

计算机间的通信是非常复杂的,为了使各种不同的计算机之间可以互联,需要设计一套通用的通信规则,称为网络协议。为了减少协议设计的复杂性,早在最初的ARPANET设计时就提出了分层的方法。即每一层利用下一层提供的服务来为上一层提供服务,本层服务的实现细节对上层屏蔽。按照分层的思路国际标准化组织ISO提出了一个试图使计算机在世界范围内互连成网的标准框架,即著名的开放系统互连参考模式OSI/RM,简称为OSI参考模型。但OSI参考模型并未成功商业化,取代它的是TCP/IP通信模型。

网络概述,协议介绍 - 第6张  | rs232的博客
TCP/IP协议是事实上的计算机网络通信标准。它分为应用层、传输层、网络层、链接层四个层次,每层完成自己的任务,最终通过不同层次的处理完成数据的收发。其中应用层负责应用程序间的沟通,传输层负责传递数据,提供应用程序端到端的逻辑通信,网络层提供基本的数据封包与传送功能,链路层负责数据帧的发送和接收。以下是TCP/IP协议中常用的一些协议:

网络概述,协议介绍 - 第7张  | rs232的博客

TCP/IP主要协议介绍

TCP/IP协议分为网络层协议和传输层协议,网络层协议主要包括网际协议IP、网际控制报文协议ICMP和地址解析协议ARP。传输层协议包括传输控制协议TCP和用户数据报协议UDP。

网际协议IP

网际协议IP是TCP/IP体系中最主要的协议之一。该协议被设计成互联分组交换通信网,以形式一个网际通信环境。它负责在源主机和目的主机之间传输来自其较高层软件的称为数据报文的数据块,它在源和目的主机之间提供无连接的,不可靠的传输服务,典型功能比如IP地址就是由IP协议提供的,IP数据包中通过IP地址来区分源地址与目的地址。

  • 不可靠:IP协议不保证IP数据包能成功到达它的目的地,仅提供尽力而为的传输服务
  • 无连接:IP协议并不维护任何关于后续数据包的状态信息。每个数据包的处理是相互独立的。IP数据包可以不按顺序接收。

地址解析协议ARP

网络层使用ip地址描述计算机,但是在数据链路层上,计算机使用MAC地址来表示一台计算机,由ip地址查询MAC地址的过程即是由ARP协议来完成的。

传输控制协议TCP

TCP协议为计算机提供一种面向连接的,可靠的传输层通信协议。通信的两方往往是不同主机上的进程,且往往需要高度可靠性且面向连接的服务,比如HTTP、SSH、FTP等。TCP协议对建立网络上用户进程之间的对话负责,它确保进程之间的可靠通信,所提供的功能如下:

  • 监听输入对话建立请求(listen, accept)
  • 请求另一网络站点连接(connect)
  • 全双工可靠地发送和接收数据。TCP数据包中包含序号与确认序号,并对数据包进行排序检错,损坏的包可以被重传。
  • 适度地关闭对话

用户数据报协议UDP

UDP协议为计算机提供一种无连接的,不可靠的传输层通信协议。通信双方也位于不同的主机上,主要用于“查询-应答”的服务,如NFS、NTP、DNS等。使用UDP通信具有以下特点:

  • 发送数据之前不需要建立链接
  • 不对数据包的顺序进行检查
  • 没有错误检测和重传机制

TCP/IP通信的要素

网卡与MAC地址

网卡是计算机进行网络通信的物理接口,完成网络信号在传输介质上的调制与接收。通过网卡能够使不同计算机完成最基本的硬件连接,从而完成数据通信。网卡通过MAC地址来标识,类似于网卡的身份证号,且理论上是全球唯一的。MAC地址是一个48位的值。

IP地址

IP协议把整个因特网抽象成一个单一的网络,IP地址就是给因特网上的主机或路由器的每一个接口分配一个在全世界范围内唯一的32位标识符,称为IP地址。IP地址分为网络号和主机号两部分,按着网络号与主机号的划分数目的不同,可以对IP地址进行分类,常用的是A类、B类、C类地址,D类是多播地址,E类则为保留地址,如下:

  • A类地址:默认8位网络地址,第一位为0,范围是1.0.0.0 ~ 126.0.0.0,可用的A类网络是126个,每个网络能够 容纳1亿多个主机。
  • B类地址:默认16位网络地址,前两位为10,范围是128.0.0.0到191.255.255.255,可用的B类网络有16382个,每个网络能容纳6万多个主机。
  • C类地址:默认24位为网络地址,前两位为110,范围从192.0.0.0到223.255.255.255。C类网络可达209万余个,每个网络能容纳254个主机
  • D类地址:前4位为1110,用于多播地址。它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
  • E类地址:前5位为11110,作为保留地址,保留为今后使用

主机ID全为0的IP 地址表示网段地址,主机ID全为1的IP地址表示该网段的广播地址,子网ID不同的网络不能直接通信,如果要通信则需要借助路由器转发。
以127开头的一系统地址称为网络回环地址,比如典型的127.0.0.1.。这一系统地址不会出现在网络上,它们的主要功能是测试本机的网络配置,能ping通127.0.0.1说明本机的网上和IP协议安装都没有问题。

子网掩码

子网掩码(subnetmask)是一个32位由连续的1和0组成的地址,它的作用是指明IP地址中哪些位标识的是主机所在的子网以及哪些位标识的是主机号,它必须结合IP 地址一起使用,不能单独存在,IP地址中由子网掩码中1覆盖的连续位为子网ID,其余为主机ID。子网掩码常见的表现形式有以下两种:

  • 192.168.220.0/255.255.255.0
  • 192.168.220.0/24

端口(PORT)

TCP/IP协议采用端口来标识通信的进程,即一个系统里的多个网络进程通过端口号来区分。端口号是一个16位的整数,范围是1~65535。每一个进程都对应一个端口号,在同一系统中,一个端口号只能被一个进程所拥有,传输层通过端口号确定将数据发往哪个应用程序。TCP、UDP都有各有自独立的端口号,一个网络应用程序至少要占用一个端口号,也可以占有多个端口号。

并不是所有的端口号都可以被普通应用程序使用,有一系统知名端口号已经被分配给了特定的应用程序,一般1~1023范围内的端口号都已经被分配了,程序能使用的动态端口范围是1024~65535.常见的知名端口如下:

网络概述,协议介绍 - 第8张  | rs232的博客

协议的封装

数据在不同的协议层次上对应不同的封装,典型的TCP/IP协议封装与解包流程如下:

网络概述,协议介绍 - 第9张  | rs232的博客

链路层封装

网络概述,协议介绍 - 第10张  | rs232的博客

网络层封装

网络概述,协议介绍 - 第11张  | rs232的博客

传输层封装

UDP封装

网络概述,协议介绍 - 第12张  | rs232的博客

TCP封装

网络概述,协议介绍 - 第13张  | rs232的博客

网络应用程序开发流程

TCP编程

TCP编程是面向连接的编程,它是电话系统服务模式的抽象,每一次完整数的数据传输都要通过建立连接,使用连接,终止连接的过程,本建立连接的本质是建立一个管道进行收发数据,但是这个管道是双向的,且基本字节流的,TCP保证数据传输的可靠性。

UDP编程

UDP是面向无连接的编程,它是邮件系统服务模式的抽象,UDP发送的每个分组都携带完整的目的地址,发过程中不进行分组出错的恢复和重传,即UDP不保证数据传输的可靠性。

C/S架构

无论采用面向连接还是无连接的方式进行通信,两进程通信过程中,大多采用C/S架构,即client向server发出请求,server接收后提供相应的服务。以下是面向连接的C/S架构示意图:

网络概述,协议介绍 - 第14张  | rs232的博客

server端工作过程

  1. 打开一通信通道并告知本地主机,它愿意在一特定的端口上接收客户请求
  2. 等待客户请求到达该端口
  3. 接收客户请求,并发送应答信号,激活一个新的线程处理这个客户请求
  4. 服务完成后,关闭新线程与客户的通信链路

client工作过程

  1. 打开一通信通道并连接到服务器的特定端口
  2. 向服务器发出服务请求,等待并接收应答
  3. 根据需要继续提出请求,请求结束后关闭通道并终止通信

最后编辑:
作者:rs232
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。