计算机网络学习:网络协议与标准 (未完)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络学习:网络协议与标准 (未完)相关的知识,希望对你有一定的参考价值。

最知名的网络协议就是TCP/IP协议了。事实上,TCP/IP协议是一个协议集,由很多协议组成。TCP和IP

协议是这个协议集中两个,TCP/IP协议集是用这两个协议来命名的。

TCP/IP协议集中的每一个协议涉及的功能,都用程序来实现。TCP协议和IP协议有对应的TCP程序和IP程

序。


根据TCP协议我们了解到,网络协议是一个约定,该约定规定了:

① 实现这个协议的程序要完成什么功能;

② 如何完成这个功能;

③ 实现这个功能需要的通讯的报文包的格式。


如果一个网络协议涉及了硬件的功能,通常就被叫做标准,而不再称为协议了。网络标准还需要约定硬

件的物理尺寸和电气特性。


ISO发布了注明的开放系统互联参考模型(Open System Interconnection Reference Model),简称OSI。

OSI模型详细规定了网络需要实现的功能、实现这些功能的方法、以及通讯报文包的格式。但是,没有

一个厂家遵循OSI模型来开发网络产品。不论是网络操作系统还是网络设备,不是遵循厂家自己制订的

协议(Novell公司的Novell协议,苹果公司的AppleTalk、微软公司的NetBEUI、IBM公司的SNA),就是

遵循某个政府部门制订的协议(如TCP/IP协议)。而现在TCP/IP已经占主流。


4.1 OSI模型

    技术分享

    图4.1 OSI模型的7层协议


    当需要把一个数据文件发送往另外一个主机之前,这个数据要经历这7层协议每一层的加工。例如我

    们要把一封邮件发送往服务器,当我们在Outlook中编辑完成,按发送键后,Outlook就会把我们的

    邮件交给第7层中按POP3或SMTP协议编写的程序。POP3或SMTP程序按自己的协议整理数据格式,然后

    发给下面层的某个程序。每个层(除了物理层,它是硬件电路和网线,不再加工数据)也会对数据

    格式做一些加工,还会用报头的形式增加一些信息。经过加工后的数据以帧的形式交给物理层,物

    理层的电路再以位流的形式发送数据到网络中。

    接受方的过程是相反的,物理层接收到数据后,以相反的顺序遍历OSI的所有层,使接收方收到这个

    电子邮件。接收方的主机,每一层都会阅读本层对应的报头,拆除自己层的报头把数据传送给上一

    层。


    技术分享

    图4.2 OSI模型的7层协议功能描述


4.2 TCP/IP协议

    技术分享

    图4.3 OSI模型和TCP/IP协议集模型对比

    

    TCP/IP协议是一个协议集,它由十几个协议组成。

    

    技术分享

    图4.4 TCP/IP协议集中的各个协议


    主要的TCP/IP协议有:

    . 应用层:FTP,TFTP,Http,SMTP,POP3,SNMP,DNS,Telnet

    . 传输层:TCP,UDP

    . 网络层:IP,ARP,RARP,ICMP,RIP,IGRP,OSPF

    

    4.2.1 应用层协议

          FTP:文件传输协议。用于主机间文件交换。FTP使用TCP协议进行数据传输,是一个可靠的、

               面向连接的协议。FTP支持二进制文件和ASCII协议。

          TFTP:简单的文件传输协议。它比FTP简易,是一个非面向连接的协议,使用UDP进行传输,

                因此传送速度更快。该协议多用于局域网中,交换机和路由器把自己的配置文件传

                送到主机上。

          SMTP:简单邮件传输协议。

          POP3:邮件传输协议,比SMTP更科学,本不属于TCP/IP协议集。

          Telnet:远程终端仿真协议。可以使一台主机远程登录到其他机器,成为那台远程主机的显

                  示和键盘终端。

          DNS:域名解析协议。根据域名,解析出对应的IP地址。

          SNMP:简单网络管理协议。网管工作站搜集、了解网络中交换机、路由器等设备的工作状态

                所使用的协议。

          NFS:网络文件系统协议。允许网络上的其他主机共享某台机器目录的协议。

    

    4.2.2 传输层协议

          TCP/IP协议集在传输层只有两个协议:传输控制协议(TCP)和用户数据报协议(UDP)。


          TCP协议要完成5个主要功能:

          . 端口地址寻址;

          . 连接的建立、维护与拆除;

          . 流量控制;

          . 出错重发;

          . 数据分段。


          (1) 端口地址寻址

              端口地址到底有什么用呢?当数据报到达主机后,链路层的程序会通过数据报的帧报尾

              进行CRC校验,校验合格的数据帧被去掉帧报头向上交给IP程序。IP程序去掉报头后,

              再向上把数据交给TCP程序。待TCP程序把TCP报头去掉后,它把数据交给谁呢?这时,

              TCP程序就可以通过TCP报头中由源主机指出的端口地址,了解到发送主机希望目标主机

              的什么应用程序接收这个数据报。

              因此,端口地址寻址是对应用层程序寻址


              技术分享

              图4.5 常用端口地址


              详细的端口号编排可以在TCP/IP的注释RFC1700查到。

              TCP/IP规定端口号的编排方法:

              低于255的编号:用于FTP、Http这样的公共应用层协议。

              255到1023的编号:提供给操作系统开发公司,为市场化的应用层协议编号。

              大于1023的编号:普通应用程序。

              端口号的编码范围从0到65535。从1024到49151的地址范围需要注册使用,49152到

              65535的地址范围可以自由使用。


              端口地址被源主机在数据发送前封装在其TCP报头或UDP报头中。图4.6给出了TCP报头

              的格式:

              技术分享

              图4.6 TCP报头格式


              计算机网络中约定,当一台主机向另一台主机发出连接请求时,这台发送请求的机器被

              视为客户机,而那台接受请求的机器被视为服务器。通常,客户机在给自己的程序编端

              口号时,随机使用一个大于1023的编号。例如一台主机访问WWW服务器,在其TCP报头中

              的源端口地址封装为1391,目标端口地址则需要为80,指明与Http通讯。

              

          (2) TCP连接的建立、维护与拆除

              TCP协议是一个面向连接的协议,所谓面向连接,是指一台主机需要和另外一台主机通

              讯时,需先呼叫对方,请求与对方建立连接,只有对方同意,才能开始通讯。

              所谓呼叫,就是连接的发起方发送一个“建立连接请求”的报文给对方,对方如果同

              意这个连接,就简单的发回一个“连接响应”的应答包,连接就建立起来了。

              图4.7描述了TCP建立连接的过程。

              技术分享

              图4.7 建立TCP连接


              主机A希望与主机B建立连接以交换数据,它的TCP程序首先构造一个请求连接报文包给对

              方,请求连接包的TCP报头中报文性质码标志为SYN(见图4.8),声明是一个“连接请求

              包”。主机B的TCP程序收到主机A的连接请求后,如果同意这个连接,就发回一个“确

              认连接包”,应答A主机。主机B的“确认连接包”的TCP报头中的报文性质码标志为

              ACK。

              

              技术分享

              图4.8 SYN标志位和ACK标志位

              

              SYN和ACK是TCP报头中报文性质码的连接标志位(见图4.8),建立连接时,SYN标志置

              1,ACK标志置0,表示本报文包是个同步包;确认连接包,ACK置1,SYN置1,表示本报

              文包是确认包。


              从图4.7可以看到,建立连接的第3个包,是主机A对主机B的连接确认。主机A为什么要发

              送第3个包呢?

              注:这里的第3个包是这样计算得来的:主机A连接请求包是第1个包,主机B的应答包是

                  第2个包,主机A收到主机B的应答包后再发的包(ACK=y+1)就是第3个包了。

              继续讨论为什么要发第3个包。考虑这样一种情况:主机A发送一个请求包,但这个请求

              包在传输过程中丢失主机A再重发连接请求包,第2个连接请求包到达主机B,保证了

              连接的建立。但是如果连接请求包没有丢失而只是网络慢而导致主机A超时呢?这就会

              使主机B收到两个连接请求包,使主机B误以为第2个连接请求是主机A的又一个请求。第

              3个确认包就是为防止这样的错误而设计的。这样的连接机制被称为三次握手

              从TCP程序设计的深层看,源主机发送“连接请求包”是为了触发对方主机的TCP程序开

              辟一个对应的TCP进程。你的主机可以邀请对方开辟多个TCP进程,同时进行多路通讯。

              FLOOD黑客攻击就是采用无休止的邀请对方建立连接,使对方主机开辟无数个TCP进程与

              之连接,最后耗尽对方主机资源。


              可以理解,当通讯结束时,发起连接的主机应该发送拆除连接的报文包,通知对方主机

              关闭响应的TCP进程,释放资源。拆除连接报文包的TCP报头中,报文性质码的FIN标志

              置1。

              为了防止连接双方的一侧出现故障后异常关机,而另外一方的TCP进程无休止地驻留,任

              何一方如果发现对方长时间没有通讯流量,就会拆除连接

              但是有时确实有一段时间没有流量,但还需要保持连接,就需要发送空的报文包,以维

              持这个连接。维持连接的报文包叫:keepalive。为了在一段时间内没有数据发送但还

              需要保持连接而发送keepalive包,被称为连接的维护


          (3) TCP报头中的报文序号

              TCP是将应用层交给的数据分段发送的。为了支持数据出错重发和数据段组装,TCP为

              每个数据段封装的报头中,设计了两个数据报序号字段,分别称为发送序号确认序

              号

              

              出错重发是指一旦发现有丢失的数据段,可以重发丢失的数据,以保证数据传输的完整

              性。如果数据没有分段,出错后源主机就不得不重发整个数据。为了确认丢失的数据是

              哪个数据段,报文就需要安装序号。

              

              数据分段可以使报文在网络中的传输非常灵活。一个数据的各个分段,可以选择不同的

              路径到达目标主机。由于网络中各条路径在传输速度上不一致性,有可能前面发出的数

              据段后到达,而后出发的数据段先到达。为了使目标主机能够按照正确的次序重新装配

              数据,也需要在数据段的报头中安装序号。

              

              TCP报头中的第3,4个字段分别是发送序号和确认序号。发送序号是指本数据段是第几个

              报文包,确认序号是指对方发来的下一个数据段该是第几号段。


              技术分享

              图4.9 发送序号与确认序号


          (4) PAR出错重发机制

              在网络中有两种情况会丢失数据包。如果网络设备的负荷太大,当其数据包缓冲区满的

              时候,就会丢失数据包。另外一种情况是,如果在传输中因为噪声干扰、数据碰撞或设

              备故障,数据包就会受到损坏。在接受主机的链路层接受校验时就会被丢弃。


              发送主机应发现丢失的数据段,并重发出错的数据。


              TCP使用PAR(Positive Acknowledgement and Retransmission)的出错重发方案。


              TCP程序在发送数据时,先把数据段都放到其发送窗口中,然后发送出去。然后,PAR会

              为发送窗口中每个已发送的数据段启动定时器,被对方主机确认收到的数据,将从发送

              窗口中删除。如果某数据段的定时时间到,仍然没有收到确认,PAR就会重发这个数据

              段。

              

              技术分享

              图4.10 PAR出错重发机制


              在图4.10中,发送主机的2号数据段丢失,接收主机只确认了1号数据段。发送主机从发

              送窗口中删除已确认的1号包,放入4好数据段,将2,3,4号发送出去,其中,2,3是重发

              的数据段。你会发现,尽管数据段3已经被接收主机收到,仍然被重发,这显然是一种

              浪费。但是PAR机制只能这样处理,因为只有一个确认序号字段,如果有丢失大于一个数

              据段,一个确认序号无法记录多个丢失数据包。而单独设计一个包来通知源主机也不

              行,因为这个通知包也丢失了该怎么办呢?


(未完待续...)

本文出自 “JiMoKuangXiangQu” 博客,请务必保留此出处http://4594296.blog.51cto.com/4584296/1784937

以上是关于计算机网络学习:网络协议与标准 (未完)的主要内容,如果未能解决你的问题,请参考以下文章

5G网络学习——大白话讲解PDU会话(未完待续)

计算机学习:网络寻址(未完)

计算机网络学习笔记04网络体系架构与网络协议

计算机网络学习笔记——分层模型协议服务连接模式标准化组织

5G网络学习——5G网络部署及架构详解(未完待续)

Python学习day3--网络基础之网络协议篇