第一章简介通信应用软件设计2课程目标了解计算机网络的基本概念。熟练掌握C语言语法和编程方法熟悉Linux操作系统以及基本的操作命令学会LinuxC程序开发一般方法熟练使用SocketAPI编写各类应用程序掌握通信协议的一般编程技巧3课程理论部分安排网络概念(2学时)Linux进程\线程编程(2学时)Linux操作系统及其命令(2学时)基本的TCP套接字(4学时)关于名称和地址族(2学时)使用UDP套接(2学时)发送和接收数据(2学时)超越基本的套接字编程(6学时)深入套接字编程(2学时)4目标了解网络以及TCP/IP协议掌握TCP、UDP和IP协议的特点掌握应用程序、Socket、TCP/IP和通信网络之间的关系。掌握IPV4地址分类的基本方法掌握在Windows和Unix/Linux中查询本机IP地址、查询网络是否接通、查询TCP/IP模块是否安装好的命令。TCP/IPSockets编程简介6网络、分组和协议(1)网路(network)由若干结点和链接这些结点的链路组成。网络中的结点可以是计算机、集线器、交换机和路由器等。主机和路由器主机是运行应用程序的计算机。主机上运行的应用程序是网络的真正“用户”。路由器也称网关(gateway),这种机器的职责是把信息从一条通信信道中继或转发到另一条通信信道。注1:IM:InstantMessageWiFi:WirelessFidelity7网络、分组和协议(2)信息的含义是指由程序构造和解释的字节序列,这些字节序列一般称为分组(packet)。分组包含网络用于控制执行其任务的控制信息,有时也包括用户数据。协议(protocol)是关于由通信程序交换的分组及其含义的约定。例如:HTTP实现一个有用的网络需要大量的协议,一般一种协议解决网络中的某一个方面,网络是分层次的,所以协议也是分层设计的。TCP/IP是一个协议镞(protocolsuite),是由很多协议组成的一个集合,主要包括IP(InternetProtocol),TCP(TransmissionControlProtocl),UDP(UserDatagramProtocol)。本课并不学习TCP/IP协议本身,而是学习如何利用TCP/IP传输数据,有关TCP/IP协议本身的学习应在计算网络课程中学习。8网络、分组和协议(3)主机、路由器、应用程序、SocketAPI之间的关系。TCPIP信道IPApp套接字信道TCPIPApp套接字主机主机路由器9网络、分组和协议(4)IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。10网络、分组和协议(5)TCP是面向连接的通信协议,通信开始建立连接,通讯时完成时要拆除连接,由于TCP是面向连接的所以只能用于点对点的通讯。TCP提供的是一种可靠的数据流服务。如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查。TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。面向连接的服务(例如Telnet、FTP、rlogin、XWindows和SMTP)需要高度的可靠性,所以它们使用了TCP。11网络、分组和协议(6)UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出丢包现象,实际应用中要求在程序员编程验证。UDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。UDP主要用于那些面向查询---应答的服务。欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手),也就是说,与UDP相关的服务面临着更大的危险。12关于地址在TCP/IP中采用IP地址和端口号两者来标示一个特点的应用程序。IP地址版本:IPV4和IPV6。IPV432bit长40亿个地址IPV6128bit长13WindowsXP中安装IPV614IPV4地址IPv4是InternetProtocolversion4(网际协议版本4)的英文简称,而中文简称为“网协版4”。现在的IP网络使用32位地址,以点分十进制表示,如192.168.0.1。地址格式为:IP地址=网络地址+主机地址或IP地址=网络地址+子网地址+主机地址。网络地址是因特网协会的ICANN(theInternetCorporationforAssignedNamesandNumbers)分配的,下有负责北美地区的InterNIC、负责欧洲地区的RIPENIC和负责亚太地区的APNIC,目的是为了保证网络地址的全球唯一性。主机地址是由各个网络的系统管理员分配。因此,网络地址的唯一性与网络内主机地址的唯一性确保了IP地址的全球唯一性。15IPV4地址(2)IP地址分为五类,A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各类可容纳的地址数目不同。A、B、C三类IP地址的特征:当将IP地址写成二进制形式时,A类地址的第一位总是0,B类地址的前两位总是10,C类地址的前三位总是110。16IPV4地址(3)A类第一位为0,网络号7位,主机号24位B类第一位为1,第二位为0,网络号为14位,主机号为16位C类第一位为1,第二位为1,第三位为0,网络号为21位,主机号为8位D类第一位为1,第二位为1,第三位为1,第四位为0,多播组号28位E类第一位为1,第二位为1,第三位为1,第四位为1,第五位为0,最后27位留为后用。17环回地址127网段的所有地址都称为环回地址,主要用来测试网络协议是否工作正常的作用。比如使用ping环回地址127.1.1.1就可以测试本地TCP/IP协议是否已正确安装。另外一个用途是当客户进程用环回地址发送报文给位于同一台机器上的服务器进程。18本机IP地址查询Windowsipconfigipconfig/allUnix/LinuxIfconfigHostname-i19端口号TCP或UDP中的端口号总是相对于Internet地址解释的。在一台主机上某个IP上的端口号只能被一个应用程序使用端口号在IPv4和IPv6中是相同的;即16位无符号的二进制数字。每个端口号的范围是1—65535之间。20关于名称•与IP地址的数字相比,名称更容易记忆。•名称解析为IP地址是由DNS(DomainNameSystem)完成的。•DNS是一种分布式数据库,DNS协议允许连接到Internet的主机使用TCP或UDP从该数据库中检索信息。•本地DNS一般用于本地名称-Internet地址映射的特定于操作系统的机制。21客户与服务器•程序是充当客户还是充当服务器决定了它使用SocketsAPI与其对应方(peer)建立通信的一般形式。•客户与服务器的区分很重要,它们的初始部分的编程模型完全不一样。客户需要知道服务器的IP地址和端口,而服务器不需要知道客户端的IP地址和端口号。•一旦客户与服务器之间建立了连接,服务器与客户之间的区别就消失了。•P2P是什么?22什么是套接字•套接字(socket)是一个抽象层,应用程序通过它来发送和接收数据•TCP/IP中的主要类型的套接字是流套接字(streamsocket)和数据报套接字(datagramsocket),前者使用TCP,后者使用UDP。•一个程序可以同时使用多个套接字。•多个程序可以同时使用同一个套接字抽象层。23作业课后习题1,2学会在VMWare上安装Linux操作系统24总结