网络编程 第一天 (OSI & TCP/IP分类)


一、互联网发展简史

    计算机网络是计算机技术和通信技术相结合的产物。自1946年第一台电子计算机ENIVAC问世以来,人们的计算方式也发生了根本改变。从不使用计算机,到使用计算机辅助计算,再到计算机全权计算;从多人通过终端使用一台计算机,到每人一台计算机,再到通过网络连接多台计算机……

从计算机网络的演变历史来看,计算机网络历经了4个发展阶段:

    1.具有通信功能的联机系统,即终端—线路—计算机模式

    2.具有通信功能的分时系统,即(多)终端—集中器—通信线路—计算机模式

    3.计算机网络,即多计算机互联模式

    4.国际标准化网络

真正意义上的计算机网络(互联网)出现在第三阶段,因此在这里主要介绍互联网的发展简史

现在我们每日都在使用的Internet实际上是冷战时期的产物。

    1957年10月4日,苏联发射了人类第一颗人造地球卫星Sputnik(伴侣号)。该卫星的发射直接引发了美苏之间的军备竞赛,同时也催生了互联网的发展。

    1958年,时任美国总统艾森豪威尔立即组建了国防部高级研究计划署(Defense Advanced Research Project Agency,简称ARPA),目的是为了在军备竞赛中帮助美国处在科研优势地位。

    1968年8月,ARPA提出了“资源共享网络”概念,目的在于让ARPA的所有计算机互联实现资源共享,这个网络被称为ARPAnet,中文翻译为“阿帕网”。ARPAnet也被认为是现在Internet的雏形。9月,ARPAnet被批复,10月在加州大学洛杉矶分校(UCLA)获准简历网络测量中心。

    1970年,第一份有关于ARPAnet的主机通信协议出版物正式发布。

    1971年,夏威夷大学搭建了第一个基于封包技术的无线电通讯网络。这个网络被称为ALOHAnet(夏威夷土语“你好”),包含7台计算机,横跨夏威夷的4座岛屿。ALOHAnet标志着无线局域网的诞生。

    1974年,Kahn和Vinton Cerf两人合作,正式发布了第一份TCP协议。之后的1978年,TCP协议拆分成了TCP和IP两个协议。时至今日,TCP/IP协议是世界上最大的计算机网络运行基础,是目前应用最广泛的网络通信协议。现在已经成为事实标准。

    1983年1月1日,ARPAnet正式使用TCP/IP协议。

    1985年,美国国家科学基金会(National Science Foundation,简称NSF)开始搭建NFSNET网络。NSF建立了15个超级计算机中心及国家教育科研网,并以此作为基础,将其他网络也连接起来。NSFNET逐渐取代了ARPAnet的主干地位。

    1989年,MILNET(从ARPAnet分离出的子网络)实现与NSFNET的连接,并正式更名为"Internet"。

    20世纪90年代,Internet开始进入商业化进程。1995年,NSFNET正式停止运作,Internet成了世界通行的商业互联网。

 

二、计算机网络的功能

    计算机网络是由多个独立的计算机通过通信线路和通信设备互联起来的系统,以此实现交换信息和共享资源的目的。

计算机的网络具有以下功能:

    1.数据通信。网络系统中相连的计算机能够互相传送数据信息,使相距很远的用户之间能够直接交换数据。

    2.资源共享。网络中的软件、硬件资源可以实现共享。

    3.并行与分布式处理。单个计算机的计算能力有限,使用计算机网络可以用来处理综合性的大问题。我们可以采用合适的算法,将任务分配到不同的计算机上进行分布运算与并行运算。

    4.提高系统可靠性。零散的数据、软件、硬件等资源管理起来非常麻烦,且会造成资源冗余。使用网络将资源重组可以提高资源管理分配的效率与可靠性。

    5.好的可扩充性。如果有新的用户,只需增加新的计算结点与接入网络的接口,而不必替换整个系统。由于计算机网络的可扩充性,在初始阶段可以避免较大投资,性价比更高。

 

三、计算机网络的拓扑结构

    网络拓扑结构(Topology),指的是网络中各个结点的互连方式,也就是网络链路与结点的几何布局,它描述了各个结点间的物理与逻辑位置。

常见的基本网络拓扑结构有5种:

    网状(Mesh)

    星状(Star)

    树状(Tree)

    总线型(Bus)

    环状(Ring)

1、网状拓扑

    在网状拓扑内,每一个设备与其他的设备都会有一条专线连接。

相较于其他拓扑结构,网状拓扑有以下优点:

    -设备之间数据负载由专线承担,避免共享链路中网络拥堵问题

    -良好的健壮性。当其中某个线路不可用时,整个网络不会瘫痪

    -隐私性和安全性高。每个消息都是专线传输,只有唯一的发送方与接收方

    -故障检测与故障隔离十分容易。

当然,网状拓扑也有其缺点:

    -需要的网络连接电缆数量过大。具有N个设备的网状结构需要N*(N-1)/2条物理通道,每个设备需要N-1个输入/输出端口

2、星状拓扑

    在星状拓扑中,每个设备与中央控制器相连。如果一个设备要向另一个设备发送数据,则需要先将数据发送到中央控制器,再由中央控制器将数据转发给对应设备。

相较于其他拓扑结构,星状拓扑有以下优点:

    -拓扑结构简单。每个设备只需一条电缆和一个输入/输出端口即可与其他设备建立连接

    -具有良好的健壮性。如果一条链路失效,只有连接该链路的设备受影响,其余设备不会被影响

    -便于管理,故障检测与故障隔离很容易。

当然,星状拓扑也有其缺点:

    -中央控制器是整个网络的瓶颈。如果中央控制器出现故障则整个网络会瘫痪。同时,中央控制器吞吐数据的速率也直接影响整个网络的速率。

3、树状拓扑

    树状拓扑结构可以看做是星状拓扑结构的扩展。在树状拓扑结构中,绝大多数的设备首先连接在次级控制器上,再由次级控制器连接到中央控制器上。

树状拓扑结构的优点和缺点基本与星状拓扑结构类似。但次级控制器的引入带来了另外的优点:

    -允许更多设备相连并且增加了信号在设备间的传输距离

    -允许网络隔离不同计算机的通信,以及为不同的计算机配置通信优先级

4、总线型拓扑

    总线型拓扑是由一条长电缆组成的主干和连接在上面的网络设备组成。网络节点通过引出线和分接头连接到总线电缆上。

总线型拓扑有以下优点:

    -信息传输不存在路由与转发的问题

    -易安装,主干电缆可以铺设在最有效的路径上,然后将网络结点通过各种分支引出线连接到主干上

总线型拓扑具有以下缺点:

    -故障隔离和重新配置困难,加入或移除设备需要改动或者更新主干,总线的故障会终止所有传输

    -由于信号衰减,总线的长度和连接的设备数会受到限制

5、环状拓扑

    环状拓扑结构是网络中各个设备通过一条首尾相连的通信链路连接的一个闭合环形结构。每个设备只与其两侧的两个设备之间有专用链路连接。信号在环中从一个设备到另一个设备单向传输,直至到目的地为止。

环状拓扑具有以下优点:

    -环状网络比较容易安装和配置。加入或删除一个设备只需改动两条连接线即可。

    -故障隔离比较简单,如果一个设备没有收到信号,则它可以发出一个警告,这个警告提示了故障所在的位置。

环状拓扑结构的缺点如下:

    -如果网络规模较大,会有较大的传输延迟,所以对环的最大长度和设备数量有一定的限制

    -在一个简单的环中,由于是单向传输,因此整个环中的一个故障就能使整个网络瘫痪

 

四、计算机网络的分类

    我们可以从不同的角度了解计算机网络的不同特性,不同的观察角度导致了对计算机网络不同的分类方法。

1、按作用范围分类

按照网络的作用范围分类,我们可以将其分为局域网、城域网、广域网3类。

    1.局域网(Local Area Network,简称LAN)

    局域网通常都是私有的,用于连接一个办公室、建筑物或者校园内的设备,通常范围设定在千米以内。通常情况下一个局域网只会采用一种拓扑结构。

    2.城域网(Metropolitan Area Network,简称MAN)

    城域网是将网络覆盖范围扩展到整个城市而设计的。城域网可以是单一的网络,也可以是通过将许多局域网相连而成的一个更大的网络。

    3.广域网(Wide Area Network,简称WAN)

    广域网常常横跨多个国家、地区或大洲,所覆盖的范围通常到几千千米,并且被多个机构所拥有。广域网通常利用电信部门提供的分组交换网、卫星通信信道和无线分组交换网,将分布在多个地区的计算机系统互联起来,达到资源共享的目的。

2、按通信介质分类

按通信介质分类,计算机网络可以分为有线网和无线网两大类。

    1.有线网:通常采用同轴电缆、双绞线、光纤等有形的物理介质来传输数据

    2.无线网:采用卫星、微波等无线形式来传输数据

3、按通信传播方式分类

按通信传播方式分类,计算机网络分为点对点传播网和广播传播网两类。

    1.点对点传播:以点对点的连接方式把各个计算机连接起来的网络,例如星状、树状、环状和网状。

    2.广播传播:用一个共同的传输介质把各个计算机连接起来的网络,例如总线状和以无线、微波、卫星方式传播的网络。

4、按通信速率分类

按通信速率分类,计算机网络可以分为低速网、中速网和高速网

    1.低速网:通常借助调制解调器利用电话网实现,其数据传输速率为几十Kbps

    2.中速网:通常利用传统共用数据网实现,其数据传输速率为1.4Mbps~45Mbps之间

    3.高速网:通常是专用网络(例如ATM使用的网络等),其数据传输速率为50Mbps甚至更高

5、按使用范围分类

按使用范围分类,计算机网络可以分为共用网和专用网。

    1.共用网:通常是为全社会所有人提供服务的网络

    2.专用网:为一个或几个部门所拥有,只为拥有者提供服务

6、按网络控制方式分类

按网络控制方式分类,计算机网络分为集中式网络和分布式网络。

    1.集中式网络:网络处理能力高度集中在一个或少数几个结点上,所有信息流都必须经过这些结点,这些结点是整个网络的处理控制中心。典型的例如星状拓扑和树状拓扑。

    2.分布式网络:不存在处理控制中心,网络中的各个结点均以平等地位相互协调工作和交换信息。典型的例如分组交换网、网状拓扑等。

7、按网络环境分类

    按网络控制方式分类,计算机网络可以分为部门网、企业网、校园网等。

 

五、网络分层体系结构——OSI参考模型

    计算机网络由若干个相互连接的结点构成,这些结点之间要不断进行数据交换。要进行正确的数据传输,每个结点就必须遵循一些实现约定好的规则,这些规则就是网络协议。

网络协议是在主机与主机之间、主机与通信子网之间或通信子网中各通信结点之间通信时使用的、通信双方必须遵守的、实现约定好的规则、标准或约定。一个合格的网络协议主要有以下三个要素:

    -语法要求:即数据与控制信息的结构或格式。

    -语义要求:即需要发出何种控制信息、完成何种动作、做出何种响应等,同时需要规定差错处理。

    -时序(同步)要求:即事件实现顺序的详细说明,包括速度匹配和顺序等。

当然,对于复杂的网络协议,其结构最好是层次式的。分层的协议有以下好处:

    -各结构间独立,一个层次无需知道它下面的层次如何实现,而仅仅通过层间提供的接口实现服务。

    -灵活性好。当某一层次发生变化,只要接口关系保持不变,其他层不会受到影响。

    -结构上可分隔开,各层可以采用最合适的技术实现。

    -易于实现和维护。分层结构使一个复杂的系统的实现和调试变得简单。

    -有利于标准化作业。各个层次的功能以及向其他层提供的服务都有精确说明。

    国际标准化组织(International Organization for Standardization,简称ISO)经过反复研究,制定了开放系统互连参考模型(Open Systems Interconnection Reference Model,简称OSI/RM),供设计、实现和应用各种计算机网络参考。

在OSI参考模型中,有7个层次的体系结构

//需要注意的是,OSI仅是一个理想化的模型,尚未有完整的实现,但模型本身的指导意义非常通用

    1.物理层

    物理层规定在一个结点内如何把计算机连接到介质上。规定了机械的、电气的功能。该层负责建立、保持和拆除物理链路;规定如何在此链路上传送比特流;比特如何编码,使用的电平极性,连接插头插座的插脚如何配置等。物理层传送数据单位是比特(bit)

    2.数据链路层

    数据链路层把相邻两个结点间不可靠的物理链路变成可靠无差错的逻辑链路。包括把原始比特流进行分帧、排序、设置检错、确认、重发、流量控制等功能。数据链路层传送数据单位是帧(frame),每帧包括一定数量的数据和一些必要的控制信息,在每帧的控制信息中,包括同步信息、地址信息、差错控制信息、流量控制信息等;同物理层相似,数据链路层负责建立、维护和释放数据链路

    3.网络层

    网络层连接网络中任何两个计算机结点,从一个结点上接收数据,并正确地传送到另一个结点。在网络层,传送数据单位是分组或包( packet)。网络层的主要任务是要选择合适的路由和交换结点,透明地向目的站交付发送站所发的分组或包,这里的“透明”表示收发两端好像是直接连通的。另外,网络层还要解决网络互连、拥塞控制和记账等问题

上述3层组成了所谓的通信子网,用户计算机连接到此子网上。通信子网负责把一个计算机上的数据可靠地传送到另一台计算机,但并未实现两台主机上的进程之间的通信。通信子网的主要功能是面向通信的。

    4.传输层

    传输层真正地实现了“端到端”通信,把数据可靠地从一方的用户进程或程序送到另一方的用户进程或程序。这一层的控制通常由通信两端的计算机完成,中间结点一般不提供这一层的服务,这一层的通信与通信子网无关。从这一层开始的以上各层全部是针对通信的最终的“源端-目的端”计算机进程的。传输层传送数据单位是报文(message)

    传输层向上一层提供一个可靠的端到端的服务,使上一层看不见下面几层的通信细节。正因为如此,传输层成为网络体系结构中最关键的一层。传输层的功能主要在主机内实现。而物理层、数据链路层及网络层的功能均在报文接口机中实现。传输层以上各层的功能通常在主机中实现。

    5.会话层

    会话层允许两个计算机上的用户进程建立会话连接,双方相互确认身份,协商会话连接的细节。它可管理会话是双向同时进行的,还是任何时刻只能一个方向进行。在后一种情况下,会话层控制哪一方有权发送数据。会话层还提供同步点机制。在数据流中插入同步点机制,在每次网络出现故障后可以仅仅重传最近一个同步点以后的数据,而不必从头开始。

    传输层和会话层为两台计算机上的用户进程或程序之间提供了正确传送数据的手段。

    6.表示层

    表示层主要解决用户信息的语法表示问题。表示层将数据从适合于某一系统的语法转变为适合于OSI系统内部使用的语法。具体地讲,表示层对传送的用户数据进行翻译或解释、编码和变换,使不同类型的计算机对数据信息的不同表示方法可以相互理解。另外,数据加密、解密、信息压缩等都是本层的典型功能。

    7.应用层

    应用层确定进程之间通信的性质,以满足用户的需要。它负责用户信息的语义表示,并在两个通信者之间进行语义匹配。具体地说,应用层处理用户的数据和信息由用户程序(应用程序)组成,完成用户所希望的实际任务。这一层包括最终用户普遍需要的协议,如虚拟终端协议、文件传送协议和电子邮件等。

 

六、网络分层体系结构——TCP/IP网络体系结构

1、TCP/IP网络体系结构简介

    OSI参考模型的制定具有十分重大的意义,但是由于TCP/IP协议使用时间较长,再加上简洁、实用而成为了实际上的工业标准。在实际运行的系统中采用OSI参考模型的并不多。

    TCP/IP(Transmission Control Protocol/Internet Protocol, 传输控制协议/网际协议)是世界上最大的计算机网络Internet的运行基础,是目前为止应用最广泛的网络通信协议,现在已称为企业网络的事实标准。大多数网络操作系统都以TCP/IP协议作为缺省网络协议。

    TCP/IP协议由5层构成:物理层、数据链路层、网络层、传输层和应用层,其中物理层和数据链路层有时也被合并称为“网络接口层”即称为TCP/IP四层协议。其中TCP/IP协议中的应用层大致等同于OSI参考模型的会话层、表示层和应用层的结合。

2、TCP/IP网络体系结构成员协议简介

TCP/IP是一个协议栈,包含了众多成员协议,从而构成一个整体。每一层的成员协议如下:

    1.TCP/IP的物理层和数据链路层(网络接口层)

    TCP/IP协议并未提供物理层和数据链路层的传输协议,其物理层和数据链路层的传输协议由底层提供,TCP/IP协议仅为其提供接口,并与其独立。正因如此,物理层与数据链路层有时也被合称为“网络接口层”。

    //现代Internet通常采用IEEE通信协议局域网作为网络接口层标准。有关IEEE通信协议见下

    2.TCP/IP的网络层

    TCP/IP协议的网络层主要功能是寻址、数据打包和路由选择。网络层的主要协议有:

    ARP        地址解析协议将IP地址解析为结点的物理地址,以便于物理设备(网卡)按该地址接收数据

    RARP      反向地址解析协议将物理地址解析成为IP地址

    ICMP      Internet控制消息协议,用于传送差错报文及其他控制信息。ICMP向其他结点传输的信息类型有:

            -通知目的结点不可到达

            -发送特定路由或路由器的差错状态信息

            -对可达结点状态的请求或响应信息

            -超时(生存期终止)数据报通知

    IGMP    Internet组管理协议,负责对IP组播进行管理,例如组播组的建立和删除、组成员的建立和删除等

    3.TCP/IP的传输层

    TCP/IP协议栈提供了两个传输层协议:

    TCP         传输控制协议。可靠的面向连接的传输层协议

    UDP        用户数据报协议。不可靠的面向无连接的传输层协议

    4.TCP/IP的应用层

    应用层为应用程序提供访问低层服务的能力,并定义应用程序用于交换数据的协议。应用层的协议有许多,常用的协议有:

    FTP         文件传输协议。用于交互式的文件传输。

    Telnet     虚拟终端协议。用于登录远程主机。

    NNTP     网络新闻传输协议。用于传送网络新闻消息。

    SMTP     简单邮件传输协议。用于邮件服务器之间的邮件传送。

    HTTP      超文本传输协议。用于传输Web页面文件。

    POP        邮局协议。用于从邮件服务器上取回邮件。

    DNS        域名解析服务。用于将域名解析为IP地址。

    SNMP     简单网络管理协议。用于在网络管理控制台和网络设备(路由器、网桥、集线器等)之间选择和交换网络管理信息。

 

/*******************IEEE局域网通信协议简介***************/

1980年2月IEEE成立了802局域网标准委员会,开始负责局域网标准化的工作。目前在局域网中的通信协议都是基于该委员会制定的标准。

IEEE将数据链路层划分为两个子层:逻辑链路控制(LLC)和媒体访问控制(MAC)。IEEE制定的有关局域网的标准有很多,主要的有:

//IEEE标准与OSI参考模型关系

    802.1    解决局域网和城域网(MAN)中网络互联问题。该标准是局域网中的网络互联基准标准。

    802.2    将数据链路层分成LLC子层和MAC子层。

        LLC子层    包含了数据帧中和终端用户相关的部分:逻辑地址、控制信息和数据

        MAC子层    解决共享介质的竞争问题。包含了将数据从一个地方传送到另一个地方必须的同步、标记、流量和差错控制的规范,以及下一个站点的物理地址。

    802.7    宽带传输标准

    802.8    光纤网标准

    802.11    无线局域网访问控制及物理层规范

        a    工作于5.2GHz,传输速率54Mbit/s

        b    工作于2.4GHz,传输速率11Mbit/s

        g    工作于2.4GHz,传输速率11Mbit/s(2003年对b的补充规定)

        n    传输速率改善,支出多入多出技术(MIMO),标准速度300Mbit/s,最高速度600Mbit/s

//Wifi出现于1999年,是由Wifi联盟(当时还未称为Wifi联盟)雇佣当时的商标咨询公司Interband替他们对"IEEE 802.11b direct sequence"起的一个更加简洁有吸引力的名字,并同时设计了Wifi的Logo。因此Wifi是遵循802.11b标准的一种通信技术,同时也是一个商标。

/*******************IEEE局域网通信协议简介end************/

 

七、服务原语(选学)

服务原语是引用服务的工具,N+1层实体通过使用N层服务原语向N层实体请求某个N层服务。对服务的引用通常是要使用服务原语来实现。常见的4中服务原语类型为:

    请求原语(request):    由N+1层实体向N层实体发出,要求这个N层实体向它提供指定的N层服务。

    指示原语(indication):由N层实体向N+1层实体发出,通知N+1层实体某个特定的N层服务已经开始。

    响应原语(response): 由N+1层实体向N层实体发出,表示对这个N层实体送来的指示原语的响应。

    证实原语(confirm):   由N层实体向N+1层实体发出,表示请求的N层服务已经完成。


一、TCP协议

    TCP提供了一种可靠的面向连接字节流传输层服务。面向连接是指两个使用TCP的应用在彼此交换数据之前必须先建立一个TCP连接(类似打电话)。TCP只能应用于双方进行通信,而广播与组播不能使用TCP协议。

    TCP协议适用于对传输质量要求较高,以及传输大量数据的通信。在需要可靠数据传输的场合通常使用TCP协议。

1、TCP报头格式

TCP数据封装在一个IP数据报中,TCP报头有其固定格式,如果不计可选项字段,通常为20个字节。

//TCP报头格式

报文内的具体字段的含义如下:

    1.源端口号 与 目的端口号:

        每个TCP段都包含源端和目的端的端口号,用于定位接收和发送应用进程数据。端口号是由本地操作系统分配的,在主机内部是唯一的。部分为TCP应用程序连接的保留端口如下:

        HTTP        80

        Telnet        23

        FTP            20,21

        NetBIOS会话    139

        HTTPS        443

    2.序号:

        序号用来标识从TCP发送端向TCP接收端发送的数据字节流的第一个字节的序号。在TCP传送的流中,每一个字节为一个序号。

        例如,当前报文的序号为300,当前报文的数据共100字节,则下一个期望报文段的序号应为400。序号确保TCP传输的有序性。

        序号为32位无符号整数,计数范围为0~2^31-1,当达到最大数值后又从0开始。

    3.确认序号:

        确认序号用来标识希望收到的下一个数据报的序号。只有当标志位ACK为1时,确认序号才有效。

    4.TCP报头长度:

        TCP报头长度给出当前的报头中32位字的数目。使用该字段是因为TCP报头有可选项,因此报头长度不固定。若无可选项字段,该字段数值为5。

    5.预留:

        未使用的预留6位,为未来扩充TCP报头标志位预留空间,一般值为0。

    6.标志位:

        在TCP报头中有6个标志位,每个标志位的含义如下:

            URG        紧急指针有效

            ACK        ACK为1时表示确认序号有效;ACK为0时则确认序号被忽略

            PSH        PSH为1时表示该报文段应立即递交给应用程序而不是在缓冲区排队等待

            RST        重建TCP连接标志,用于当主机崩溃等未知原因而出现错误连接时重建TCP连接

            SYN        同步序号,用于发起一个TCP连接

            FIN        FIN为1时表示发送端已没有数据传输,此时会关闭TCP连接

    7.窗口大小:

        接收端用于告知发送端该接收端的缓冲区大小,以此控制发送速率,从而达到流量控制。

    8.校验和:

        该字段用于对发送数据进行数据校验,这是一个强制性字段,一定是由发送端计算并存储,并由接收端进行验证。

    9.紧急指针:

        只有URG标志位为1时紧急指针字段才有效。紧急指针是一个正的偏移量,与序号字段的值相加表示紧急数据最后一个字节的序号。

2、TCP连接的建立——三次握手

TCP是一个面向连接的可靠传输协议,通信双方在发送数据前必须建立一个TCP连接。为了建立一个TCP连接,通常需要三步操作:

    第一步:主机A发送SYN包(SYN=j)到主机B,并进入SYN_SEND状态,等待主机B确认。

    第二步:主机B收到SYN包,必须确认主机A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),并进入SYN_RECV状态,等待主机A确认。

    第三步:主机A收到主机B的SYN包,向主机B发送确认包ACK(ACK=k+1)。此包发送完毕,主机A和B完成三次握手。

三段操作的报文传递完成了一个TCP连接的建立,这个过程被称为“三次握手”。

3、TCP连接的释放——四次挥手

建立一个TCP连接需要三次握手,但是释放一个TCP连接需要四次挥手,这是由于TCP连接的半关闭(half-close)特性造成的。释放一个TCP连接通常需要四步操作:

    第一步:主机A发送FIN包(FIN=j)到主机B,并关闭自身的应用程序,等待主机B确认。

    第二步:主机B收到FIN包,回复确认包ACK(ACK=j+1)。此时主机A无法再向主机B传送数据。

    第三步:主机B发送FIN包(FIN=k)到主机A,并关闭自身的应用程序,等待主机A确认。

    第四步:主机A收到FIN包,回复确认包ACK(ACK=k+1)。此时主机B无法再向主机A传送数据。至此TCP连接释放。

    

二、UDP协议

    与TCP不同,传输层的另一种协议UDP是一个简单的面向数据包的传输层协议。与TCP协议最大的不同在于UDP是一种不可靠传输协议,即它发送数据到IP层的数据报,但不保证这些数据报到达其目的地。

    由于UDP通信之前无需建立一个连接,因此UDP应用要比TCP应用更加简单,效率上比TCP也更加高效。

    UDP数据封装在一个IP数据报中,UDP报头有其固定格式,如果不计可选项字段,通常为8个字节。

//UDP报头格式

报文内的具体字段的含义如下:

    1.源端口号 与 目的端口号:

    端口号标识出发送进程和接收进程。部分为UDP应用程序连接的保留端口如下:

        NetBIOS名称服务    137

        SNMP            161

        DNS                53

        RIP路由选择协议    521

    2.UDP长度:

    以字节为单位的UPD数据和UDP报头之和,最小值为8。该UDP长度是冗余的,IP数据报含有其总长度。

    3.UPD校验和:

    覆盖UDP报头和UDP数据,用于数据校验。

 

/*************TCP与UDP协议的选用建议****************/

1.数据可靠性

对数据可靠性要求高时,必须选择TCP协议;而对数据可靠性要求并不高时,可以选择UDP协议。

2.实时性

由于TCP协议中存在三次握手、四次挥手、重传数据等保证数据可靠的手段,因此使用TCP协议会有较大的延迟。若对数据实时性要求较高,则应选用UDP协议。

3.网络可靠性

在网络状况不是很好时,需选用TCP协议保证数据传输稳定;而在网络状况很好的情况下,应选择UDP协议减少网络负荷。

/*************TCP与UDP协议的选用建议end*************/

 

三、套接字(socket)

    1982年,BSD(Berkeley Software Distribution,伯克利软件套件)引入了套接字机制。套接字初期作为进程间通信的一种手段。1986年,伯克利扩展了socket的接口,使之与TCP/IP协议匹配,因此套接字成为了现在的操作系统内主流的网络通信手段。

//socket为何会被翻译为“套接字”已无从考证。socket的原始含义是硬件上的插座。伯克利将socket的概念引入进程间通信,可能是想表达进程通信像插插座一样,一方“插入”,一方“被插入”。1984年,socket的概念引入国内,自此开始socket被翻译为“套接字”。至于为何译者将socket翻译为套接字已是一个未解之谜。

套接字(socket)是一种特殊的I/O接口,在代码内体现为特殊的文件描述符。socket是一种常见的进程间通信的手段,不仅可以实现本地进程间通信,更可以配合TCP/IP协议实现网络通信。

在OSI体系结构中套接字位于会话层与传输层之间的位置,在TCP/IP体系结构中套接字位于应用层与传输层之间的位置,每一个套接字都由{协议、地址、端口}三部分来表示。

套接字的类型主要有三种:

    1.流式套接字(SOCK_STREAM)

    流式套接字提供可靠的、面向连接的通信流,保证数据传输可靠性和有序性。TCP通信使用该类型套接字。

    2.数据报套接字(SOCK_DGRAM)

    数据报套接字提供不可靠的、无连接的通信流,数据通过相互独立的报文进行传输,是无序的并且不保证可靠传输。UDP通信使用该类型套接字。

    3.原始套接字(SOCK_RAW)

    原始套接字允许对底层协议(IP或ICMP等)进行直接访问,虽然功能强大但使用不便。

有关于套接字编程我们会在后续课程详细讲解。

 

四、网际协议(IP)、域名解析(DNS)与子网掩码

    网际协议(Internet Protocol,简称IP协议)是TCP/IP协议栈中的核心协议,所有的TCP、UDP、ICMP、IGMP数据都是以IP数据报格式传输。IP协议向高层提供不可靠、无连接的数据报通信,因此任何寻求可靠通信的服务必须由IP协议的上层协议提供。

    网际协议目前有两个版本:IPv4(32位无符号数/4位点分十进制数)和IPv6(128位无符号数/8位冒分十六进制数)两种。由于IPv6目前并未大规模普及,因此在本课中,若未特殊说明,网际协议通常指IPv4版本。

//由于IPv4的编码长度限制,当代IPv4即将使用殆尽,因此IPv6在未来将取代IPv4成为新的网际协议标准。IPv6的数量有2^128(大约3.4*10^38)之多,号称“可以为地球上每一粒沙子编上一个IP地址”。

1、IP地址分类

网络中每一台独立主机的每个接口必须拥有一个唯一的Internet地址,称为IP地址。IP地址为32位无符号整数,通常用点分十进制数表示。

IP地址按照层次结构通常划分为A~E五类。

//IP地址分类

    1.A类

    保留给政府机构,范围1.0.0.0~126.0.0.0。A类地址的第一位为网络号,其他三位为主机号。

    其中127.xxx.xxx.xxx保留,用作本地环回。

    2.B类

    分配给中/大型公司,范围128.0.0.0~191.255.0.0。B类地址的第一位和第二位为网络号,其他两位为主机号。

    其中169.254.xxx.xxx保留,表示的是当前计算机使用DHCP模式但无法获得IP地址(即报错用IP地址)。

    3.C类

    分配给任何需要的人,范围192.0.0.0~223.255.255.0。C类地址的第一位、第二位、第三位为网络号,第四位为主机号;或者第一位和第二位为网络号,第三位为子网号,第四位为主机号。

    其中192.168.xxx.xxx表示私有地址。

    4.D类

    D类地址通常用于多播,不分网络号和主机号,范围224.0.0.0~239.255.255.255。

    5.E类(未采用)

    E类地址不分网络号和主机号,范围240.0.0.0~247.255.255.254。

2、IPv4报文格式

IP报头有其固定格式,如果不计可选项字段,通常为20个字节。

报文内的具体字段的含义如下:

    1.版本号:

    目前的IP版本号为4,因此也被称为IPv4。随着Internet的发展,未来将会采用新版本IPv6。

    2.报头长度:

    报头长度指报头占用多少个32位字,若未包含任何可选项,则该字段值为5,即报头长度为20字节。

    3.服务类型(Type of Service,TOS):

    服务类型字段包含一个3位的优先权子字段,4位TOS子字段和1位未使用位(该位必须为0)。格式为:

        PPP DTRC 0

        其中:

            PPP    包的优先级。优先级的分类如下:

                000    普通(routine)

                001    优先(priority)

                010    立即(immediate)

                011    闪电式(flash)

                100    超闪电式(flash override)

                101    紧急(critic/ecp)

                110    互联网控制(Internet control)

                111    网络控制(Network control)

            D    最小延迟。0为普通,1为尽量小

            T    最大吞吐量。0为普通,1为尽量大

            R    最高可靠性。0为普通,1为尽量大

            M    最小费用。0为普通,1为尽量小

            //不同网络应用建议的TOS值

    4.总长度:

    总长度字段是指整个IP数据报的长度,以字节为单位。利用IP报头长度字段和总长度字段就可以计算IP数据报中数据部分的起始位置。由于该字段长度为16位,因此IP数据报的最大长度为65536(2^16)字节。若数据报需要分段发送,则该字段长度也随着变化。

    5.标识:

    一个数据报在传输时可能分割成小段以适应不同网络帧的大小。标识字段在分段中使用,当数据报被分段时,同一数据报的每个分段将在这个字段使用一个相同的序列号来识别。

    6.标志:

    第一位未使用。

    第二位为DF位,该位置1表示不要分段。

    第三位为MF位,该位置1表示分段后还有其余分段。除了最后一个分段将该位置0外,其余分段必须将该位置1。该位可以用于标识所有分段是否都已到达。

    7.分段偏移:

    分段偏移说明该分段在数据报中的位置,以8字节为单位。偏移量为1则表示字节号为8,偏移量为2则表示字节号为16,以此类推。

    例如,路由器将一个长度为4000字节的报文分为3段,其中第一段为1400字节,第二段为1400字节,第三段为1200字节。则第一段偏移量值为0,第二段偏移量值为175,第三段偏移量值为350。

    8.生存时间(Time-To-Live,TTL)

    该字段设置了数据报可经过的最多路由器的数量。生存时间的初始值由源主机设置,通常为32或64,每次经过一个路由器处理它的值就减1。当该字段为0时认为该数据报“不新鲜”(即可能不是最新数据),该数据报被丢弃,并发送ICMP报文通知源主机重新发送。

    9.协议:

    该字段对数据报进行分类,根据它的值可以确定是哪个协议向IP发送数据报。常见的值为

        TCP        6

        UDP        17

        ICMP    1

    10.报头校验和:

    该字段用于对IP报头的数据进行校验。它并不对后面的数据进行校验,因为ICMP、IGMP、TCP、UDP协议都有各自的校验字段。

    11.源IP地址 和 目的IP地址:

    每个数据报都包含源IP地址和目的IP地址,长度都为32位。

3、域名解析服务(DNS)

Internet上每个主机使用IP地址作为唯一的标识,但是在实际应用中IP地址并不方便记忆,因此我们可以使用字母组合代替数字以便于记忆。例如:

www.baidu.com <----> 180.97.33.107

www.bilibili.com <----> 58.222.35.202

这种层次化的主机名称为域名(dimain name)。

域名空间可以分为顶级域名、二级域名、三级域名等,不同的域名空间功能如下:

//域名空间划分

    顶级域名(一级域名):国家代码或域名属性

    二级域名:该主机/服务器的名字

    三级域名:该主机/服务器的次级目录的名字

4、子网掩码

    子网掩码是一个32位无符号数,其为1的位表示网络号或子网号,为0的位表示主机号。子网掩码必须搭配IP地址使用,通过子网掩码和IP地址,主机就可以判断数据报的目的地址为:本子网的主机、本网络的其他子网中的主机,还是其他网络上的主机。

    通过子网掩码,我们还可以知道IP地址为A类、B类、C类哪一类。

 

五、端口

    在TCP报头内和UDP报头内,我们都指定了端口。IP地址表示该数据报应发送到哪个主机,而端口号表示该数据报应转交给哪个进程来处理。端口号代表了该主机内的某个套接字,当一个套接字创建完毕后,应将该套接字和某个固定的IP和固定的端口号绑定,这样才能实现端到端的通信。

端口号的范围为1~65535,通常有以下几种:

    1~255        众所周知的端口号

    256~1023    Unix系统占用的端口号

    1024~49151    已登记端口号

    49152~65535    动态或私有端口号

TCP协议的端口号和UDP服务的端口号互相独立,互不影响。

 

六、字节序

字节序指的是计算机中多字节整型数据的存储格式,通常有大端序和小端序两种。

//大端序与小端序的名称来源于《格利佛游记》,主人公在小人国时发现该国因为水煮蛋该从大端(Big-End)剥开还是小端(Little-End)剥开分为两派而引发激烈的战争。1980年,Danny Cohen在自己的论文中第一次引用了该两个词。

    大端序(Big-Endian):高地址存储数据低位,低地址存储数据高位

    小端序(Little-Endian):高地址存储数据高位,低地址存储数据低位

通常情况下,网络通信中使用大端序传输数据,而操作系统内通常使用小端序存储数据。

由于在网络通信中,发送方和接收方可能使用不同的字节序,因此为了保证数据的正确性,二者在通信前必须统一字节序。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值