分类:
2009-04-10 10:38:47
1. 前言:
1.1概念: 网络编程是指网络通信程序,以完成网络上不同的程序间的通讯。网络程序分为客户端和服务器两部分。服务器处理客户端的请求并将结果发送给客户端。
1.2 范围: 网络编程涉及的范围很广:
1. 所支持的通讯协议(TCP/Ip,NetBEUI,IPX/SPX) ,
2. 运行的系统(unix.linux,windows)
3.网络API(套接字API,XTI等)
4.使用的编程语言(c/c++ /java 等)
1.3本书主要以Tcp/Ip协议簇(几乎所有的操作系统都广泛的支持),unix/linux系统开发环境(喜欢开源,当然如果有必要的话,windows平台的也会相应串讲),套接字API(目前最为流行) 使用c/c++(个人喜欢底层的东西,java也学过,比c/c++容易点)。
1.4软件开发环境:我们这个环境是linux下的,建议大家去装一下linux系统(我用的是redhat9.0),网上有很多安装教程,这里就啰嗦了。
1.5开发工具:掌握vi编辑器,gcc编译器,gdb调试器。
1.6.常用的命令:ping,ifconifig,route:主要是对路由表进行操作,tcpdump:用于转储网络上的数据流
1.7适用读者:喜欢网络,喜欢编程。
1.8省略了网络基础知识,详细参考:计算机网络(第5版) 谢希仁 ,unix网络编程(Richard stevens),tcp\ip详解。
|
2.linux/unix 基础(已经学过的可以略过)
在网络编程中为了调试经常用到某些常用的命令,以查看或者修改网络配置,监听网络运行。以下介绍几种常用命令:
2.1 ping命令
--------------------------------------------------------------------------------
功能说明:检测主机。
语 法:ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]
补充说明:执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
参 数:
-d 使用Socket的SO_DEBUG功能。
-c<完成次数> 设置完成要求回应的次数。
-f 极限检测。
-i<间隔秒数> 指定收发信息的间隔时间。
-I<网络界面> 使用指定的网络界面送出数据包。
-l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
-n 只输出数值。
-p<范本样式> 设置填满数据包的范本样式。
-q 不显示指令执行过程,开头和结尾的相关信息除外。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-R 记录路由过程。
-s<数据包大小> 设置数据包的大小。
-t<存活数值> 设置存活数值TTL的大小。
-v 详细显示指令的执行过程。
实例:ping 192.168.0.1
该命令检测本机是否与“192.168.0.1”连接。如果收到远程主机的回应,则说明本机与远程主机通信状态良好,否则存在网络故障。
2.2 ifconifg 命令
作用
ifconfig用于查看和更改网络接口的地址和参数,包括IP地址、网络掩码、广播地址,使用权限是超级用户。
格式
ifconfig -interface [options] address
主要参数
-interface:指定的网络接口名,如eth0和eth1。
up:激活指定的网络接口卡。
down:关闭指定的网络接口。
broadcast address:设置接口的广播地址。
pointopoint:启用点对点方式。
address:设置指定接口设备的IP地址。
netmask address:设置接口的子网掩码。
应用说明
ifconfig是用来设置和配置网卡的命令行工具。为了手工配置网络,这是一个必须掌握的命令。使用该命令的好处是无须重新启动机器。要赋给eth0接口IP地址207.164.186.2,并且马上激活它,使用下面命令:
#fconfig eth0 210.34.6.89 netmask 255.255.255.128 broadcast 210.34.6.127
该命令的作用是设置网卡eth0的IP地址、网络掩码和网络的本地广播地址。若运行不带任何参数的ifconfig命令,这个命令将显示机器所有激活接口的信息。带有“-a”参数的命令则显示所有接口的信息,包括没有激活的接口。注意,用ifconfig命令配置的网络设备参数,机器重新启动以后将会丢失。
如果要暂停某个网络接口的工作,可以使用down参数:
#ifconfig eth0 down
2.3 netstat命令
1.作用
检查整个Linux网络状态。
2.格式
netstat [-acCeFghilMnNoprstuvVwx][-A][--ip]
3.主要参数
-a--all:显示所有连线中的Socket。
-A:列出该网络类型连线中的IP相关地址和网络类型。
-c--continuous:持续列出网络状态。
-C--cache:显示路由器配置的快取信息。
-e--extend:显示网络其它相关信息。
-F--fib:显示FIB。
-g--groups:显示多重广播功能群组组员名单。
-h--help:在线帮助。
-i--interfaces:显示网络界面信息表单。
-l--listening:显示监控中的服务器的Socket。
-M--masquerade:显示伪装的网络连线。
-n--numeric:直接使用IP地址,而不通过域名服务器。
-N--netlink--symbolic:显示网络硬件外围设备的符号连接名称。
-o--timers:显示计时器。
-p--programs:显示正在使用Socket的程序识别码和程序名称。
-r--route:显示Routing Table。
-s--statistice:显示网络工作信息统计表。
-t--tcp:显示TCP传输协议的连线状况。
-u--udp:显示UDP传输协议的连线状况。
-v--verbose:显示指令执行过程。
-V--version:显示版本信息。
-w--raw:显示RAW传输协议的连线状况。
-x--unix:和指定“-A unix”参数相同。
--ip--inet:和指定“-A inet”参数相同。
4.应用实例
netstat主要用于Linux察看自身的网络状况,如开启的端口、在为哪些用户服务,以及服务的状态等。此外,它还显示系统路由表、网络接口状态等。可以说,它是一个综合性的网络状态的察看工具。在默认情况下,netstat只显示已建立连接的端口。如果要显示处于监听状态的所有端口,使用-a参数即可:
#netstat -a
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:32768 *:* LISTEN
tcp 0 0 *:32769 *:* LISTEN
tcp 0 0 *:nfs *:* LISTEN
tcp 0 0 *:32770 *:* LISTEN
tcp 0 0 *:868 *:* LISTEN
tcp 0 0 *:617 *:* LISTEN
tcp 0 0 *:mysql *:* LISTEN
tcp 0 0 *:netbios-ssn *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 *:10000 *:* LISTEN
tcp 0 0 *:http *:* LISTEN
......
上面显示出,这台主机同时提供HTTP、FTP、NFS、MySQL等服务。
2.4 tcpdump命令
功能说明:倾倒网络传输数据。
语 法:tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]
补充说明:执行tcpdump指令可列出经过指定网络界面的数据包文件头,在Linux操作系统中,你必须是系统管理员。
参 数:
-a 尝试将网络和广播地址转换成名称。
-c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。
-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。
-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。
-e 在每列倾倒资料上显示连接层级的文件头。
-f 用数字显示网际网络地址。
-F<表达文件> 指定内含表达方式的文件。
-i<网络界面> 使用指定的网络截面送出数据包。
-l 使用标准输出列的缓冲区。
-n 不把主机的网络地址转换成名字。
-N 不列出域名。
-O 不将数据包编码最佳化。
-p 不让网络界面进入混杂模式。
-q 快速输出,仅列出少数的传输协议信息。
-r<数据包文件> 从指定的文件读取数据包数据。
-s<数据包大小> 设置每个数据包的大小。
-S 用绝对而非相对数值列出TCP关联数。
-t 在每列倾倒资料上不显示时间戳记。
-tt 在每列倾倒资料上显示未经格式化的时间戳记。
-T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。
-v 详细显示指令执行过程。
-vv 更详细显示指令执行过程。
-x 用十六进制字码列出数据包资料。
-w<数据包文件> 把数据包数据写入指定的文件。
例子: tcpdump ip host myhost
显示所有进出主机myhost 的ip包
tcpdump ip proto tcp
显示所有tcp包
Tcpdump tcp port 21
显示所有端口为21的TCP包
提示:我这里有一本《linux常用命令全集》,基本上涵盖了所有linux下的命令,一本极好的工具书。
下载地址:
补充:
网络基本配置文件
/etc/hosts: 主机名解析
/etc/hostname.leo.: 网络接口名
/etc/netmasks:: 网络掩码
/etc/inetd.conf: 服务项目定义
小结:
本季主要讲解网络编程的概念,以及网络编程的常用环境,网络API,我们以后将主要围绕着tcp/ip协议簇,套接字API为基础来讲。
Unix/linux系统具有完善的网络功能,并提供相当强大的网络命令,我我们介绍好几种常见的网络命令,这些命令对调试程序有莫大的帮助。
Vi是linux/unix系统中强大的编辑器,gcc,gdb也是常用c/c++编译器和调试器。