该类文章整理于网上搜集的C++编程教程,通过学习该部分内容能够进一步了解计算机网络的相关知识,为自己编程水平更进一层楼。
1.ISO/OSI参考模型
OSI(Open System Interconnection)开放系统互联模型是由ISO(International Organization for Standardization)国际标准化组织定义的网络分层模型,一共7层。下面是OSI参考模型的示意图,图片来自于superjunjin的专栏。
<——–每一层单独协议———->每一层的作用的如下表所示:
层级名称 | 作用 | 传输单位 |
---|---|---|
应用层 | 提供应用程序间通信 | APDU(Application) |
表示层 | 处理数据格式,数据加密等 | PPDU(Presentation) |
会话层 | 建立,维护和管理会话 | SPDU(Session) |
传输层 | 建立端到端链接 | segment(段) |
网络层 | 寻址和路由选择 | packet(包 |
数据链路层 | 介质访问,链路管理 | frame(帧) |
物理层 | 比特流传输 | b(比特) |
*PDU(ProtocolDataUnit)
2. 对应层次及功能
物理层
物理层(Physical Layer):物理层定义了所有电子及物理设备的规范,为上层传输提供了一个物理介质,本层的数据传输单位为比特流(b),属于本层定义的规范有EIA/TIA RS-232、EIA/TIA RS-449、V 35、RJ-45等,实际使用中的设备如网卡等属于本层。
数据链路层(Data Link Layer)
数据链路层(Data Link Layer):对物理层收到的比特流进行数据成帧,提供可靠的数据传输服务,实现无差错数据传输。再数据链路层中数据的单位为帧(frame),属于本层定义的规范有SDLC,HDLC,PPP,STP,帧中继等实际使用中的设备如switch交换机属于本层。
网络层(Network Layer)
网络层负责讲各个子网之前的数据进行路由选择,分组与重组。本层中数据的传输单位为数据包(packet)。实际属于本层定义的规范有IP,IPX,RIP,OSPF,ICMP,IGMP等。实际使用中的设备如路由器属于本层。
传输层(Transport Layer)
提供可靠的数据传输服务,它检测路由器丢弃的包,然后产生一个重传的请求,能够将乱序收到的数据包重新排序。
会话层(Session Layer)
管理主机之间的会话进程,包括会话建立、终止和会话过程中的管理。
表示层(Pressentatian Layer)
表示层对网络传输的数据进行交换,使得多个主机之间传送的信息能够相互理解,包括数据的压缩,加密,格式转换等。
7.应用层(Application Layer)
应用层与应用程序界面沟通,以达至展示给用户的目的,再次常见的协议有:HTTP,HTTPS,FTP,TELNET,SSH,SSH,SMTP,POP3等。
3.TCP/IP 四层模型
TCP/IP四层模型是事实上的标准,它对OSI七层模型进行了简化。下面是与OSI模型的比较,图片来自于百度搜索。
*网络借口层又被称为链路层(Link Layer)。
TCP/IP各层中所支持的协议如下图所示,图片来自于草根老师博客(程姚根)。
局域网中两个ftp服务器通信的过程如下图所示,图片来自于C++教程网。
从上图中我们可以看到的是:
- 两个主机通信的前提是使用一样的协议。
- 在网络分层中,每一层使用不同的协议。
- 每一层不关心另一层的处理与实现。
- 内核当中已经提供了协议栈的实现。
在广域网中,数据传输需要经过很多的路由器,这时典型的TCP/IP四层模型如下图所示,图片来自于C++教程网。
3.1 对等通信的概念
对等通信是指在TCP/IP协议中,每一层之间采用相同的协议,主机与主机在通信过程中每一层屏蔽了下一层的细节,相同层级层之间的通信像是建立起了虚电路(逻辑流)。
3.2 封装(Encapsulation)的概念
封装是将数据打上对应头部,让对等方知道双方具有一样的语言,交付给下一层进行通信。封装之后对等方就能认识数据,从而能够进行一定的解析。图片来源见图片水印。
与数据封装对应的是数据的解封,也称之为数据的分用。
3.3 分用(Demultiplexing)的概念
数据的分用可以理解为将数据去头转交给对应上层的过程,过程如下图所示。
3.4 端口的概念
IP可以标识一台主机,但是不能标识这台主机上的某一个服务,这个时候就需要用到端口的概念。
1. 总所周知端口(Well Know Ports):从0到1023,这些端口由IANA分配和控制他们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:21端口为ftp服务端口。
2. 注册端口(Registered Port):从1024到49151。那些端口不收IANA控制,但由IANA登记并提供使用情况清单。他们松散地绑定于一些服务。也就是说有许多服务绑定这这些端口,这些端口通用用于许多其他目的。例如:1433 Microsoft SQL服务端口。
3. 动态或私有端口(Dynamic or Private Ports):从49152到65535。IANA不管这些端口。实际上,机器通常从1024起到分配动态端口。但也有路外:SUNde RPC端口从32768开始。