当前位置:
首页 > 教材教辅 > 大学 > Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

本站仅展示书籍部分内容

如有任何咨询

请加微信10090337咨询

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

书名:Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

推荐语:

作者:郑阿奇编

出版社:电子工业出版社

出版时间:2013-06-01

书籍编号:30467376

ISBN:9787121205316

正文语种:中文

字数:80518

版次:1

所属分类:教材教辅-大学

全书内容:

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载







前言


我们生活在信息时代,计算机和网络是这个时代的产物和标志。打开计算机上网,用户接触到各种各样的网络应用软件,如即时通信、文件下载、Web应用、电子邮件……网络应用软件(又称为网络编程)自然成为焦点。


Visual C++6.0仍然是目前最流行的软件开发和教学平台。本书以Visual C++6.0作为平台,介绍 Visual C++网络编程,具有如下特色。


(1)通过典型网络应用实例,由表及里、深入浅出地介绍网络编程。


(2)在介绍编程的同时适当地介绍相关网络知识并详细给出网络环境配置、搭建步骤,使读者能够很方便地开发本书实例。


(3)在本书程序之间实现互操作,如客户端和服务器对接、接入第三方程序、程序之间整合集成为套件等,使书中每个例子不再是孤立的实体,而是整个互联网世界的一分子。


(4)联系实际,将书中开发实例与当下流行的网络软件产品进行比较,指出它们在基本原理上的相通之处,以及书中原型程序的局限性和完善改进的方向,从而激发读者从事实际应用性网络编程开发的热情。


本书从崭新的视角透视网络程序,用形象生动的语言介绍网络编程,软件与自然事物相类比,程序与网络环境相依存,编程技巧与探索实验并重,技术原理与哲理感悟交织,读者只要学过C++语言,懂一点计算机和网络的基本知识,就可以顺利地学习本书。普通高校计算机及相关专业本专科学生可以将本书作为学习网络编程的教材或参考书。同时,我们期待本书能够成为广大计算机爱好者、网络爱好者、编程爱好者、软件发烧友和计算机网络DIY玩家的好朋友,为他们中的更多人成为高手打好基础。


本书提供同步教学课件和网络应用实例的所有源代码文件,网址为www.hxedu.com.cn。


本书由南京师范大学郑阿奇主编,参加本书编写的还有梁敬东、顾韵华、王洪元、刘启芬、丁有和、曹弋、徐文胜、殷红先、张为民、姜乃松、彭作民、高茜、陈冬霞、钱晓军、朱毅华、时跃华、周何骏、赵青松、周淑琴、陈金辉、李含光、王一莉、徐斌、王志瑞、孙德荣、周怡明、刘博宇、郑进、刘毅、刘有春等。


由于作者水平有限,不当之处在所难免,恳请读者批评指正。


作者E-mail:easybooks@163.com。


编 者


2013年3月


第1章 开发平台和网络编程基础知识



1.1 Visual C++6.0开发平台


Microsoft Visual C++(简称Visual C++、MSVC、VC++或VC),是微软公司的C++开发工具,具有集成开发环境,可提供编辑编译C、C++等语言。VC++整合了便利的排错工具,特别是整合了视窗应用编程接口(Windows API)、三维动画DirectX API等。初学VC入门的最佳环境是Visual C++6.0。


下面以编写一个简单的演示程序为例,使读者初步熟悉Visual C++6.0环境下VC编程开发的基本操作。



1.1.1 创建Visual C++6.0项目工程


选择菜单命令“文件”→“新建”,弹出如图1.1所示的“新建”对话框。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.1“新建”对话框

在“工程”选项卡左边的列表中选中“MFC AppWizard[exe]”,在右边“工程名称”栏填写项目名为“GetIPAndPort”(我们即将做的这个软件是用来演示程序如何获得用户输入的IP和端口号的——这也是几乎所有网络程序都具有的功能,所以取这个名字)。


单击“确定”按钮,弹出“MFC应用程序向导”对话框(如图1.2所示),接下来将在这个对话框的指引下轻松完成创建VC工程的工作。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.2“MFC应用程序向导”对话框

选中“基本对话框”单选按钮(这个程序很简单,不用文档),单击“下一步”按钮。


接下来的“步骤2”和“步骤3”界面(如图1.3所示)都采用系统默认设置,连续单击“下一步”跳过。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.3“步骤2”和“步骤3”默认设置

最后一步出现的是“生成的类”,读者稍经留意就可以看到,系统已经自动为程序建立了两个类——CGetIPAndPortApp和CGetIPAndPortDlg(如图1.4所示)。其中,CGetIPAndPortApp类代表应用程序本身,CGetIPAndPortDlg代表程序的主界面对话框。细心的读者可能会发现,这两个看似冗长的类名中间部分“GetIPAndPort”就是我们刚才取的工程名!没错,以后大家就会发现一个规律:VC在一开始创建工程时都会默认生成两个类,名称形如CXXXApp和CXXXDlg(其中“XXX”部分就是用户指定的工程名),这样的命名法则是为了方便用户理清程序的类结构。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.4 生成的类

单击“完成”按钮,出现如图1.5所示的信息窗口,其中显示用户要创建的这个工程的信息。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.5“新建工程信息”窗口

单击“确定”按钮,一个VC工程就创建完成了。



1.1.2 Visual C++6.0可视化设计


开发环境工作区主界面将呈现的模样如图1.6所示。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.6 开发环境工作区主界面

主工作区大致分为三部分,最左边是供用户浏览程序结构的,包括多个选项卡界面,常用的是ClassView(类视图)、ResourceView(资源视图)和FileView(文件视图),如图1.7所示。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.7 三个常用的视图

类视图用树状结构展示了工程中所有C++类及其层次结构,可通过“查看”→“建立类向导”,在“MFC ClassWizard”窗口中设置对应的类,包括为其添加新的事件消息,重写某些方法的实现代码等。


资源视图分类列出了程序的所有资源,其中常用的是Dialog资源,这种资源是每一个具有GUI的程序都有的,双击资源ID号可以打开对应的界面设计工作区,就可以设计程序的图形界面了。


文件视图以树形目录结构列出了程序中包含的所有代码文件,VC将它们分成三大类:头文件(.h)、源文件(.cpp)和资源文件。头文件主要是对程序中用到的各种变量、常量、函数和类进行定义和声明;源文件是程序的主体部分,是各个函数、类的具体实现代码;资源文件定义程序运行要用到的各种资源,如图片、动画、声音和视频等,这对于一些功能丰富的软件(如多媒体类应用)是必不可少的。


VC在创建工程时默认会生成两个类(本例是CGetIPAndPortApp和CGetIPAndPortDlg),图1.7文件视图中的头文件GetIPAndPort.h和源文件GetIPAndPort.cpp对应CGetIPAndPortApp类,它们共同构成了该类的源代码实现;同理,GetIPAndPortDlg.h和GetIPAndPortDlg.cpp对应CGetIPAndPortDlg类,从类视图中也可以看到这两个类。


除此之外,读者会发现类视图里多了一个CAboutDlg类,它是VC自动创建的,称为“关于GetIPAndPort”对话框,用于显示程序的版本信息。


在本例的三个类中,CAboutDlg类和CGetIPAndPortDlg类都有各自的对话框界面资源。资源视图中Dialog目录下有它们的ID号(对应分别是IDD_ABOUTBOX和IDD_GETIPANDPORT_DIALOG),双击ID号可以打开其对话框的界面设计工作区,如图1.8所示。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.8“关于GetIPAndPort”对话框的设计工作区

工作区中显示的是“关于GetIPAndPort”对话框的默认界面,读者可以在此基础上自己设计或重新布局。


类视图、资源视图和文件视图三者密切配合,将程序代码有机地组织成为一个结构精巧的C++项目。通过这三者可以清楚地看到程序中每个类的对应代码实体,利用C++写的类不再是抽象的代码,而是成为看得见摸得着的现实存在,这就是可视化设计的魅力!


对话框界面的设计布局如Visual Basic一样方便:开发环境界面中央就是主工作区,在这里可以打开任意多个程序文件(源文件或头文件)以及对话框界面设计工作区;只要将左边工具箱中的控件直接拖曳到工作区中就可以设计出自己想要的程序界面。VC环境下的工具箱和VB的一样,都包含了一般Windows程序通用的界面元素(按钮、文本框、静态标签、列表框、滚动条等),初学编程者一般都喜欢选择Visual Basic,用过VB的人对这些常用控件肯定再熟悉不过了,因此这里不作过多介绍。只是针对本书所介绍的网络编程,有一个控件需要特别提一下,那就是IP地址控件(如图1.9所示)。它在界面上的显示效果如图1.10所示。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.9 IP地址控件

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.10 地址控件的显示效果

稍后将会介绍这个控件的具体用法,读者会看到它是个很实用的控件。


选择工具箱中的控件布局程序界面,可以看到VC界面设计环境的使用极其方便,丝毫不比VB逊色。在布局界面的时候可以使用工具栏中提供的功能调整各个控件的大小、对齐方式,如图1.11所示。首先选择“关于”按钮控件,再选择“退出”按钮控件,然后单击开发环境左下角工具栏中的“使大小相同”按钮就可以使先选择的按钮与后选择的按钮大小一样


最终设计出的程序界面效果如图1.12所示。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.11 调整控件的大小

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.12 程序界面

在网络编程中,程序使用IP和端口来标志网络上的其他程序,以实现程序之间的通信(进程通信)。因此,获取并正确处理对方进程的IP和端口(通常由用户通过界面输入指定)就成为网络程序的通用功能。下面的小程序用来演示这个最基本的功能,不过,它只负责获取和处理IP、端口号,并不实际发起网络连接。



1.1.3 一个简单的Visual C++6.0小程序


这个程序的界面已经设计好了,但要使程序完成一定的功能,还必须为其编写代码。写代码之前,首先要定义程序中需要用到的一些变量。在VC中,很多变量都不是孤立的,而是与某个界面元素(即控件)绑定,这样用户在界面上的输入就可以很容易地传递给程序中相应的变量进行处理了。例如,为了在程序代码中获得用户输入的IP,需要为IP地址控件关联一个变量。选择“查看”→“建立类向导”命令,打开如图1.13所示的“MFC ClassWizard”对话框。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.13 打开MFC类向导对话框

切换到“Member Variables”选项卡,在“Control IDs”列表中选中“IDC_IPADDRESS1”(IP地址控件的ID号),单击“Add Variable”按钮,出现“Add Member Variable”对话框(如图1.14所示),变量命名为m_ip,变量类别设置为“Control”。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.14 添加Control型变量

“Control”表示控件变量,它是微软对实现Windows程序的图形用户界面元素的一些类(如CEdit、CButton)的总称,这些类大多是由同一个叫作窗口(CWnd)的C++类衍生过来的。CWnd及其庞大的衍生类家族封装了Windows的GUI,作为MFC的重要组成部分,是微软公司对基础C++语言的扩充,使其具有了强大的图形化界面功能。与CWnd家族中的类关联的变量即控件变量,可以通过这样的变量获取和控制它所关联控件的几乎一切的行为,从而对程序界面进行灵活的编程和定制。


而那些只是获取用户输入值的变量称为值类型(Value)变量,这种变量与我们以前学习C++语言课程时接触的那些变量差不多,所不同的只是它们都有各自关联的控件,用于获取和保存特定控件接收的用户输入。


除了Control和Value这两大类变量外,用户在编程时也可以根据需要自定义临时变量,这种变量也就是普通C++里使用的那些变量(如整型、实型、字符型等)。


下面接着添加变量,为用于接收端口号的文本框关联Value变量m_strport,如图1.15所示。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.15 添加Value型变量

右击该文本框,在如图1.16所示的“Edit属性”对话框的“样式”选项卡中勾选“数字”,之所以这样设置,是为了限定用户只能在这个文本框中输入数字形式的端口号,这样设置之后,后面运行程序时读者就会发现:如果试图输入非数字字符(中文、英文字母),文本框一概不会响应,从而杜绝了用户的非法输入。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.16 设置文本框“数字”属性

本程序还有一个文本框是用于显示程序获取的IP和端口的,为它关联Control型变量m_showIpAndPort,并且设置“只读”属性为True(作为显示信息窗口的文本框一般都设为只读模式),如图1.17所示。


至于将控件关联的变量究竟是设成为Control还是Value型,则应视具体需要而定。一般来说,如果希望对控件的行为进行某种控制,设置变量为Control型较好;如果仅想获得控件接收的用户输入值,设置为Value型也就足够了;有时候对控件的行为有较高的控制要求同时又希望能够非常方便地获取到控件的输入值,也可以对一个控件同时关联定义这两类变量。


现在,所有的变量都关联好了,界面控件也都进行了恰当的设置和布局,就剩下编码工作了。程序界面上的“获取”按钮是实现本程序功能的关键,编程工作主要就是为这个按钮添加事件处理程序。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.17 设置显示框关联变量和属性

打开“MFC ClassWizard”对话框,如图1.18所示,在“Message Maps”选项卡的“Object IDs”列选中“IDC_BUTTON1”(“获取”按钮控件的ID号),在右边“Messages”列选择“BN_CLICKED”,单击“Add Function”按钮,弹出如图1.19所示的“Add Member Function”对话框。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.18 为“获取”按钮添加事件处理函数

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.19 为事件处理程序命名

在如图1.19所示的对话框中命名这个处理程序为OnBtnShowIpAndPort。


单击“OK”按钮,在下方的“Member functions”列表中可以看到新添加的处理函数,如图1.20所示。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.20 成功添加事件处理函数

单击“Edit Code”按钮,VC自动打开需要编辑的程序代码文件GetIPAndPortDlg.cpp并定位到源文件中相应的位置,供用户添加自己的代码。以后在编译、调试程序的时候,读者也可随时通过双击程序界面上的“获取”按钮直接定位到代码编辑处。需要指出的是,事件过程OnBtnShowIpAndPort的代码必须填写在如图1.21所示中VC指定的地方,写在其他任何地方或本工程的其他代码文件中都是无效的。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.21 编辑事件处理过程代码

为“获取”按钮编写的事件过程代码如下:

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

双击“关于”按钮,为其添加事件过程,如图1.22所示。VC也会自动定位到需要添加代码处,事件处理过程函数自动命名为OnButton2,表示在单击Button2(即“关于”按钮)时执行这个事件过程。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.22 添加“关于”按钮事件过程

“关于”按钮Click事件代码如下:

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

由此可见,添加代码有两种方法:一种方法是通过“MFC ClassWizard对话框;另一种方法是直接双击该控件。所不同的是,第一种方法可以自定义事件处理程序的函数名,如本例命名“获取”按钮的单击处理过程函数名为OnBtnShowIpAndPort,这是个有意义的名字,表示单击“获取”按钮后,程序就会显示(Show)指定的“IP”和“端口(Port)”;而采用第二种方式添加的函数则使用系统自动生成的函数名,如OnButton2,虽然这个名称也有一定的意义,表示事件过程是在单击(On)第二个按钮(Button2)时发生的,但并没有直观地表示出它要完成的功能。


对于小程序的开发,这两种方法都是可行的,并没有实质区别。可是如果程序规模稍大,事件处理过程较多的时候,就要注意:由于采用第一种方法添加的函数其名称更有意义,将使得最终整个源程序的可读性很强,便于修改、维护,因此对于程序的重要功能函数应尽量使用第一种方法添加。但第二种方法也不是完全没用——对一些不重要的函数(并非程序必要的核心功能),若都采用第一种方法添加,则都要给它们取有意义的名字,势必造成命名混乱,反倒降低了程序的可读性。在实际编程中要根据具体情况灵活运用这两种方法。


至此,这个简单的VC小程序就编写完成了,下面运行这段程序。


单击工具栏上的“执行”按钮(Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载),启动程序界面如图1.23所示。


读者可以先不填写IP地址而直接单击“获取”按钮,看看会发生什么。程序弹出了如图1.24所示的提示对话框,提示用户填写IP地址。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.23 启动程序界面

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.24 提示填写IP地址

接下来填写IP地址时,我们尝试将最后一个字段填写为300(或任何其他大于255的十进数),这时会发现:IP地址控件会自动将它重置为255(因为值大于255的IP地址字段是不合法的),而且用户始终无法在IP地址控件中输入其他非数字字符(这就是使用IP地址控件的好处)。如果使用其他控件接收用户输入,用户就要自己编写代码来检查输入的合法性,IP地址控件将这种烦琐的验证过程封装起来自动完成,为编写程序带来了极大的方便。


填写完合法IP,再尝试不填端口号,单击“获取”按钮后,程序同样也会弹出消息框提示用户输入端口号,如图1.25所示。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.25 提示填写端口

在IP和端口都合法填写的情况下,单击“获取”按钮,程序就会将用户输入的网络进程地址(IP+端口)显示在下方的输出文本框中,如图1.26所示。


这样,程序就完成了对用户输入网络进程地址的获取工作。在本书以后的程序示例中,这样的操作经常会用到。在获取了进程地址后,程序就会进一步使用这个地址作为参数传递给不同的网络编程接口函数,从而完成丰富的网络功能。


单击“关于”按钮,程序弹出“关于GetIPAndPort”对话框,如图1.27所示。这是一个版本声明对话框,每一个Windows程序几乎都有这样一个对话框,用于声明版本号和版权信息。对话框上显示的内容可以根据需要进行修改和自定义,本书这个小程序暂时保持默认内容。


通过以上这个简单的小程序,读者已经初步熟悉了本书要使用的开发平台,但要进行网络编程还必须对一些基本概念有所了解,下一节就来介绍。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.26 显示运行结果

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.27“关于GetIPAndPort”对话框


1.2 网络编程基础知识



1.2.1 网络协议


网络中的计算机要做到有条不紊地交换数据,就必须遵守一些事先约定好的规则,这些规则、标准或约定就称为网络协议(Network Protocol),它主要由以下三个要素组成:


(1)语法,即数据与控制信息的结构或格式;


(2)语义,即需要发出何种控制信息,完成何种动作,以及做出何种响应;


(3)同步,即事件实现顺序的详细说明。


现今互联网广泛使用的网络协议是著名的TCP/IP,它是在20世纪60年代后期由阿帕网的研究机构美国国防部高级研究计划署(ARPA)开发的,该协议将网络功能划分为独立的四层结构,自上而下分别是应用层、传输层、网际层网络接口层,如图1.28所示。

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.28 TCP/IP体系结构

其实,TCP/IP并不是一个单独的协议,而是由一系列网络协议所组成的协议集合(协议族),这个庞大的协议家族按照图1.29所示的分层结构组织起来构成的有机整体称为网络协议栈

Visual C++ 6.0网络编程教程pdf/doc/txt格式电子书下载

图1.29 TCP/IP协议栈

下面分别介绍栈中各层的主要功能(自上而下)。


应用层(Application Layer)。


应用层在TCP/IP协议栈的第4层,即最高层,它提供面向用户的网络服务,如进行文件的传输服务和远程登录服务等。不同的用户对应用层服务的需求不同。因此,应用层定义了许多面向用户的,提供特定服务的协议。比较常用的有远程登录协议(Telnet)、文件传输协议(FTP)、超文本传输协议(HTTP)、域名系统(DNS)、简单网络管理协议(SNMP)、简单邮件传输协议(SMTP)、邮局协议(POP3)和即时通信协议(OICQ)等。由于传输层可以使用TCP,也可以使用UDP,因此,有些应用层协议是基于TCP的(如FTP和HTTP等),而有些应用层协议是基于UDP的(如SNMP和OICQ等)。


两个应用进程能够通过网络进行最基本的消息传递,但是若要实现具体的应用,还必须使这种消息传递过程按照一定的规范进行,应用层上诸多的协议正好提供了这种规范。但这些协议只能满足普通用户在一般情况下使用网络的需求,如果用户要在网络上进行一些特殊应用,如网吧管理或供某个公司内部使用的邮件系统等,由于应用层并没有提供这样的协议,这就要由用户根据自己的实际需要开发新的应用协议了。


传输层(Transport Layer)。


在应用层之下的是传输层,有的书中也称为“运输层”。在TCP/IP协议栈中,传输层处于第3层。传输层完成通常所说的两台主机之间的通信,其实质是两台主机上对应的应用进程之间的通信,也称为端到端(End to End)通信。端到端通信是在传输层两个通信实体(进程)之间进行的,就好像是在两个实体之间建立了一条逻辑通路一样,它屏蔽了IP层的路由选择和物理网络等细节。


在实际的通信中,传输层应用进程对通信质量的要求是不一样的。为了满足不同的需要,在TCP/IP协议栈中该层定义了两个不同的协议:一个是传输控制协议(TCP);另一个是用户数据报协议(UDP)。


TCP为两台主机提供了高可靠性的数据通信服务,可以将源主机的数据流无差错地传输到目标主机。当有数据要发送时,它对应用进程送来的数据进行分片,以适合于在网络层中传输;当接收到网络层传来的分组时,它要对收到的分组进行确认,还要对丢失的分组设置超时重发等,为此,TCP需要增加额外的许多开销,以便于在数据传输过程中进行一些必要的控制,确保数据的可靠传输。


UDP则为应用层提供了一种非常简单的服务,它只是将称为数据报的分组从一台主机发送到另一台主机,并不保证该数据报能够正确到达目标端,通信的可靠性必须由相应的应用程序提供。


综上所述,TCP和UDP各有特点。TCP可以确保数据传输的可靠性,但由于需要额外的开销,所以传输效率比较低;UDP虽然不能保证数据传输的可靠性,但数据传输的效率比较高。用户在开发应用程序时,可以根据实际通信情况,选用TCP或UDP进行数据传输。


网际层(Internet Layer)。


网际层在TCP/IP协议栈的第2层,也称为互联网络层(互联层)或Internet层,因该层的主要协议是IP,所以也可简称为IP层。它是TCP/IP协议栈中最重要的一层,主要功能是将源主机上的分组根据需要发送到Internet中的任何一台目标主机上。当然,在一般情况下,发送信息的源主机要知道接收信息的目标主机的“地址”。通信时,源主机与目标主机可以在同一个网络中,也可以在不同的网络中。在网际层传输的数据单位称为IP数据报,也称为IP分组。在一个由很多网络组成的Internet中,一台主机(即源主机)与不在同一个网络中的另一台主机(目标主机)通信时,可能与多条通路相连,网际层的一个重要功能就是要在这些通路中做出选择,即所谓的路由选择,它是网际层一个非常重要的功能。网际层的本质是在各种物理网络基础上,使用IP将它们互连,组成一个传输IP数据报的虚拟网络,网际层从而实现了不同网络的互连功能。但网际层提供的是一种“尽力而为”的数据报传输服务,它不能保证数据总是可靠地从源主机传输到目标主机。在TCP/IP协议栈中,网际层协议包括网际协议(IP)、Internet控制报文协议(Internet Control Message Protocol,ICMP)和Internet组管理协议(Internet Group Management Protocol,IGMP)等。


网络接口层(Host-to-network Layer)。


网络接口层处于TCP/IP协议栈的最低层,它负责将其之上的网络层所要发送出去的数据(即IP数据报)发送到其下面的物理网络,或接收由物理网络发送到该目标机的数据帧,并抽出IP数据报交给网际层。需要注意,这里所说的物理网络是指各种实际传输数据的局域网或广域网等。在TCP/IP协议栈中并没有具体定义网络接口层的内容,一般情况下,人们认为只要是在其上能够进行IP数据报传输的物理网络(如目前局域网中占主导地位的以太网,采用各种数据通信技术的电信网络——ATM、帧中继、DDN和B-ISDN等)都可以当作TCP/IP协议栈接口的网络,这就是为什么图1.29中用虚线框画出它的原因。


....

本站仅展示书籍部分内容

如有任何咨询

请加微信10090337咨询

本站仅展示书籍部分内容
如有任何咨询

请加微信10090337咨询

再显示