计算机组成原理教学大纲

点赞:4412 浏览:14917 近期更新时间:2024-03-21 作者:网友分享原创网站原创

《计算机网络》课程设计指导书

前言

《计算机网络》课程是计算机科学与技术专业的重要专业课程之一.随着计算机网络技术的迅速发展和在当今信息社会中的广泛应用,给《计算机网络》课程的教学提出了新的更高的要求.

由于计算机网络是一门实践性较强的技术,课堂教学应该与实践环节紧密结合.将《计算机网络》课程建设成一流的课程,是近期《计算机网络》课程努力的方向.

希望同学们在使用本实验指导书及进行实验的过程中,能够帮助我们不断地发现问题,并提出建议,使《计算机网络》课程设计真正成为课堂教学的有益补充.同时也希望同学们能够充分利用实验条件,认真完成实验,从实验中得到应有的锻炼和培养.本学期授课教师为曾勇军,参与网络课教学环节的辅导教师还有黎晓军等,此外武东英,朱俊虎等教师也给予了热情的支持和帮助.

目录

一、《计算机网络》实验教学大纲4

1.1学时安排4

1.2实验内容4

1.3试验要求5

1.4验收5

二、实验一:PING程序设计(必做实验)5

2.1实验目的5

2.2实验内容6

2.3实验步骤和注意事项6

三、实验二:文件传输协议的简单设计与实现(必做实验)7

3.1实验目的7

3.2实验内容和要求7

3.3注意事项7

四、实验三:局域网截包程序设计(选做实验)8

4.1实验目的8

4.2实验内容8

4.3实验步骤和注意事项8

五、实验四:数据链路层协议的设计与实现(选做实验)8

5.1实验目的8

5.2实验内容9

5.3模拟实现环境9

5.4实验步骤和注意事项10

附录一:参考文献11

附录二:实验报告的格式12

附录三,SOCKET编程17

1,SOCKET规范概述17

2,WINDOWS环境下SOCKET基本函数18

3,RAW模式的SOCKET编程22

一、《计算机网络》实验教学大纲

1.1学时安排

本课程设计安排30个学时的上机时间,每周两次,每次150分钟.

1.2实验内容

计算机网络是现代信息社会最重要的基础设施之一.在过去十几年里得到了迅速的发展和应用.《计算机网络》课程实验的目的是为了使学生在课程学习的同时,通过在一个计算机网络环境中的实际操作,对现代计算机网络的基本功能有一个初步的了解.通过一个简单的PING程序的设计和实现,理解TCP/IP协议的工作机制和编程方法,通过实现一个文件传输协议,掌握计算机网络应用层协议的基本实现技术,同时还提供了一些选做实验以供有余力有兴趣的同学进一步提高.总之,通过上述实验环节,使学生加深了解和更好地掌握《计算机网络》课程教学大纲要求的内容.

《计算机网络》课程设计共提供了4个实验:

实验一:PING程序的设计与实现(必须做实验)

该实验的主要目的是使同学们掌握基于TCP/IP网络编程的基本方法和思路,同时进一步熟悉《计算机网络》课程中基于IP层协议的工作机制.

实验二:文件传输协议的简单设计与实现(必做实验)

文件传输是应用层中的一个主要协议,负责将主机中的文件从一台机器传送到另一台机器.文件传输协议FTP采用客户/怎么写作器的工作模式,由客户端产生操作要求,怎么写作器接收到该请求后返回响应.该实验的目的是使同学们掌握应用层协议的实现方法,加深对客户/怎么写作器的工作模式的认识.

实验三:局域网截包程序设计(选做实验)

局域网采用广播方式完成包的发送.因此任何机器发送的包,均可被局域网上的其它机器截获,只要将以太网卡设置为"混杂模式"即可.该实验的主要目的是对《计算机网络》课程的局域网以及IP等相关知识巩固和复习.

实验四:数据链路层协议的设计与实现(选做实验)

计算机网络的数据链路层协议保证通信双方在有差错的通信线路上进行无差错的数据传输,是计算机网络各层协议中通信控制功能最典型的一种协议,用于保证数据的可靠传输,进行流量控制等基本功能.


本实验实现一个数据链路层协议的数据传送部分,目的在于使学生更好地理解数据链路层协议中的"滑动窗口"技术的基本工作原理,掌握计算机网络协议的基本实现技术.

1.3试验要求

在《计算机网络》的课程实验过程中,要求学生做到:

(1)预习实验指导书有关部分,认真做好实验内容的准备,就实验可能出现的情况提前作出思考和分析.

(2)仔细观察上机和上网操作时出现的各种现象,记录主要情况,作出必要说明和分析.

(3)认真书写实验报告.实验报告包括实验目的和要求,实验环境及实验结果分析.对需编程的实验,写出程序设计说明,给出源程序框图和清单.

(4)遵守机房纪律,服从辅导教师指挥,爱护实验设备.

(5)实验课程不迟到.如有事不能出席,所缺实验一般不补.

1.4验收

实验的验收将分为两个部分:

第一部分是上机操作,包括检查程序运行和即时提问

第二部分是提交书面的实验报告

此外,针对以前教学中出现的问题,网络实验将采用阶段检查方式,每个实验都将应当在规定的时间内完成并检查通过,过期视为未完成该实验,不计成绩.以避免集中检查方式产生的诸多不良问题,希望同学们抓紧时间,合理安排,认真完成.

二、实验一:PING程序设计(必做实验)

2.1实验目的

PING程序是我们使用的比较多的用于测试网络连通性的程序.PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作.由计算机网络课程知道,ICMP是基于IP的一个协议,ICMPIP的封装之后传递.

课程设计中选取PING程序的设计,其目的是希望同学们通过PING程序的设计,能初步掌握TCP/IP网络协议的基本实现方法,对网络的实现机制有进一步的认识.

2.2实验内容

1,RAW模式的SOCKET编程

PING程序是面向用户的应用程序,该程序使用ICMP的封装机制,通过IP协议来工作.为了实现直接对IP和ICMP包进行操作,实验中使用RAW模式的SOCKET编程.

熟悉SOCKET的编程,包括基本的系统调用如SOCKET,BIND等(参考附录二),

2,具体内容

定义数据结构

需要定义好IP数据报,ICMP包等相关的数据结构

程序实现

在WINDOWS环境下实现PING程序

程序要求

在命令提示符下输入:

PINGΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ

其中ΧΧΧ为目的主机的IP地址,不要求支持域名,对是否带有开关变量也不做要求.不带开关变量时,要求返回4次响应.

返回信息的格式:

REPLYFROMΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ

REQUESTTimeOut(无法PING通的情况)

2.3实验步骤和注意事项

实验按下述步骤进行:

熟悉IP以及ICMP协议的工作机制

熟悉RAW模式的SOCKET编程

编写PING的实现程序

编译环境中需要包括SOCKET库WS2_32.lib

在模拟实现环境下调试并运行自己编写的PIN程序

保留你实现的程序在你的用户目录下,以备辅导教师检查

最后提交源程序,撰写实验报告

三、实验二:文件传输协议的简单设计与实现(必做实验)

3.1实验目的

文件传送是各种计算机网络都实现的基本功能,文件传送协议是一种最基本的应用层协议按照客户/怎么写作器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一.

本实验的目的是,学会利用已有网络环境设计并实现简单应用层协议,掌握TCP/IP网络应用程序基本的设计方法和实现技巧.

3.2实验内容和要求

1,实验内容

我们的计算机网络实验环境建立在TCP/IP网络体系结构之上.各计算机除了安装TCP/IP软件外,还安装了TCP/IP开发系统.实验室各计算机具备Windows环境中套接字socket的编程接口功能,可为用户提供全网范围的进程通信功能.本实验要求学生利用这些功能,设计和实现一个简单的文件传送协议.

2,具体要求

用socket编程接口编写两个程序,分别为客户程序(client.c)和怎么写作器程序(server.c),该程序应能实现下述命令功能:

get:取远方的一个文件

put:传给远方一个文件

pwd:显示远主当前目录

dir:列出远方当前目录

cd:改变远方当前目录

:显示你提供的命令

quit:退出返回

这此命令的具体工作方式(指给出结果的形式)可以参照FTP的相应命令,有余力的同学可以多实现几个命令.

最后,写出实验报告.

3.3注意事项

1,关于端口号(检测设用SERV_PORT来表示)的设定,原则上2000至5000都可用,为避免冲突,建议取你学号后三位数加上2000,比如学号为971234,则可定义:

#defineSERV_PORT2234

2,客户和怎么写作程序中要有相应的include文件(参考所给例子程序)

3,有些同学的server方程序支持多连接,为了不占用更多的系统资源,并发连接数限制在3个以内.

4,最后提交源程序,撰写实验报告,在实验报告中说明设计的思路

四、实验三:局域网截包程序设计(选做实验)

4.1实验目的

目前的局域网基本上都采用以广播为技术基础的以太网,任何两个节点之间的通信数据包,不仅为这两个节点的网卡所接收,也同时为处在同一以太网上的任何一个节点的网卡所截取.因此,只要接入以太网上的任一节点进行,就可以捕获发生在这个以太网上的所有数据包,对其进行解包分析,从而窃取关键信息,这就是以太网所固有的安全隐患.网上主要的免费攻击工具如SATAN,ISS,NETCAT等均将以太网作为基本的手段.

本实验实现一个局域网截包程序,目的在于使学生能更好地理解网络的工作机制(包括封包机制,协议分析等),该实验是对《计算机网络》课程一个有益的补充.

4.2实验内容

在一个局域网环境中,用C语言实现下面的基本功能:

(1)确定截包的方法:包括RAW模式SOCKET,PACKET32以及直接作为驱动程序挂在NDIS上

(2)要求截获以下包的类型并分析:以太网帧格式,IP包,ICMP包,TCP报文段,UDP报文等相关字段进行描述.

4.3实验步骤和注意事项

实验按下述步骤进行:

熟悉RAW模式的SOCKET编程

熟悉PACKET32的工作机制

熟悉WINDOWS2000环境下NDIS驱动程序的编写方法

编写基于上述某一机制的局域网截包的实现程序,

在模拟实现环境下调试并运行自己编写的协议实现程序,

如出现异常情况,在实验报告中记录并分析可能的原因

五、实验四:数据链路层协议的设计与实现(选做实验)

5.1实验目的

计算机网络的数据链路层协议保证通信双方在有差错的通信线路上进行无差错的数据传输,是计算机网络各层协议中通信控制功能最典型的一种协议.

本实验实现一个数据链路层协议的数据传送部分,目的在于使学生更好地理解数据链路层协议中的"滑动窗口"技术的基本工作原理,掌握计算机网络协议的基本实现技术.

5.2实验内容

在一个数据链路层的模拟实现环境中,用C语言实现下面两个数据链路层协议.

(1)"退回到N重发"的滑动窗口协议(参考文献[1]第四章的协议5),

(2)"选择重发"的滑动滑动窗口协议(参考文献[1]第四章的协议6),

5.3模拟实现环境

数据链路层协议位于物理层之上,网络层之下.它使用物理层提供的怎么写作,并且向网络层的分组数据传输提供可靠的怎么写作.

由于构造实际的工作环境需要系统提供支持,难度较大.因此,实现一个数据链路层协议必须要有一个模拟实现环境.在本实验中,我们仍然采用基于SOCKET的模拟通信环境.

这个模拟系统由以下几部分组成:

两个代码文件sim.c和worker.c,

一个通用的头文件mon.h,包含类型预定义,常量定义等,

协议文件使用的头文件potocol.h,包含支撑函数的函数声明等.

模拟系统使用三个进程:

main:控制整个模拟系统.

MO:协议2和协议3的发送方(machine0).

M1:协议2和协议3的接收方(machine1).

文件sim.c中包含着主程序,它首先分析命令行并且将参数保存起来,接着创建六个管道使得三个进程之间能够进行通信,所创建的文件描述字以如下方式命名:

MO和M1的通信,

w1,r1:MO到M1的帧传递

w2,r2:M1到MO的帧传递

Main和MO的通信:

W3,r3:main通知MOgo-ahead

w4,r4:MO通知main,MO已准备好

Main和M1通信:

w5,r5:main通知M1-go-ahead

w6,r6:M1通知main,M1已准备好.

模拟实现环境的源程序放置在相应的目录下,请同学们首先把这些文件拷贝到自己的用户目录下.

5.4实验步骤和注意事项

实验按下述步骤进行:

(1)熟悉已给出的数据链路层协议模拟实现环境的功能,

(2)编写两个数据链路层协议的实现程序,

(3)在模拟实现环境下调试并运行自己编写的协议实现程序,

(4)了解协议的工作轨迹,如出现异常情况,在实验报告中写出原因分析,

(5)保留你实现的数据链路层协议在你的用户目录下,以备辅导教师检查.

附录一:参考文献

端发送数据.客户程序一般用send函数向怎么写作器发送请求,而怎么写作器则通常用send函数来向客户程序发送应答.该函数的第一个参数指定发送端套接字描述符,第二个参数指明一个存放应用程序要发送数据的缓冲区,第三个参数指明实际要发送的数据的字节数,第四个参数一般置0.这里只描述同步Socket的send函数的执行流程.当调用该函数时,send先比较待发送数据的长度len和套接字s的发送缓冲区的长度,如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR,如果len小于或者等于s的发送缓冲区的长度,那么send先检查协议是否正在发送s的发送缓冲中的数据,如果是就等待协议把数据发送完,如果协议还没有开始发送s的发送缓冲中的数据或者s的发送缓冲中没有数据,那么send就比较s的发送缓冲区的剩余空间和len,如果len大于剩余空间大小send就一直等待协议把s的发送缓冲中的数据发送完,如果len小于剩余空间大小send就仅仅把buf中的数据copy到剩余空间里(注意并不是send把s的发送缓冲中的数据传到连接的另一端的,而是协议传的,send仅仅是把buf中的数据copy到s的发送缓冲区的剩余空间里).如果send函数copy数据成功,就返回实际copy的字节数,如果send在copy数据时出现错误,那么send就返回SOCKET_ERROR,如果send在等待协议传送数据时网络断开的话,那么send函数也返回SOCKET_ERROR.要注意send函数把buf中的数据成功copy到s的发送缓冲的剩余空间里后它就返回了,但是此时这些数据并不一定马上被传到连接的另一端.如果协议在后续的传送过程中出现网络错误的话,那么下一个Socket函数就会返回SOCKET_ERROR.(每一个除send外的Socket函数在执行的最开始总要先等待套接字的发送缓冲中的数据被协议传送完毕才能继续,如果在等待时出现网络错误,那么该Socket函数就返回SOCKET_ERROR)

注意:在Unix系统下,如果send在等待协议传送数据时网络断开的话,调用send的进程会接收到一个SIGPIPE信号,进程对该信号的默认处理是进程终止.

(6)recv函数

intrecv(SOCKETs,charFAR*buf,intlen,intflags),

不论是客户还是怎么写作器应用程序都用recv函数从TCP连接的另一端接收数据.该函数的第一个参数指定接收端套接字描述符,第二个参数指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据,第三个参数指明buf的长度,第四个参数一般置0.这里只描述同步Socket的recv函数的执行流程.当应用程序调用recv函数时,recv先等待s的发送缓冲中的数据被协议传送完毕,如果协议在传送s的发送缓冲中的数据时出现网络错误,那么recv函数返回SOCKET_ERROR,如果s的发送缓冲中没有数据或者数据被协议成功发送完毕后,recv先检查套接字s的接收缓冲区,如果s接收缓冲区中没有数据或者协议正在接收数据,那么recv就一直等待,只到协议把数据接收完毕.当协议把数据接收完毕,recv函数就把s的接收缓冲中的数据copy到buf中(注意协议接收到的数据可能大于buf的长度,所以在这种情况下要调用几次recv函数才能把s的接收缓冲中的数据copy完.recv函数仅仅是copy数据,真正的接收数据是协议来完成的),recv函数返回其实际copy的字节数.如果recv在copy时出错,那么它返回SOCKET_ERROR,如果recv函数在等待协议接收数据时网络中断了,那么它返回0.

计算机组成原理教学大纲参考属性评定
有关论文范文主题研究: 关于计算机网络的论文范文 大学生适用: 函授毕业论文、本科论文
相关参考文献下载数量: 42 写作解决问题: 写作参考
毕业论文开题报告: 文献综述、论文选题 职称论文适用: 论文发表、高级职称
所属大学生专业类别: 写作参考 论文题目推荐度: 优质选题

注意:在Unix系统下,如果recv函数在等待协议接收数据时网络断开了,那么调用recv的进程会接收到一个SIGPIPE信号,进程对该信号的默认处理是进程终止.

bind函数

intbind(SOCKETs,conststructsockaddrFAR*name,intnamelen),

当创建了一个Socket以后,套接字数据结构中有一个默认的IP地址和默认的端口号.一个怎么写作程序必须调用bind函数来给其绑定一个IP地址和一个特定的端口号.客户程序一般不必调用bind函数来为其Socket绑定IP地址和断口号.该函数的第一个参数指定待绑定的Socket描述符,第二个参数指定一个sockaddr结构,该结构是这样定义的:

structsockaddr{

u_shortsa_family,

charsa_data[14],

},

sa_family指定地址族,对于TCP/IP协议族的套接字,给其置AF_INET.当对TCP/IP协议族的套接字进行绑定时,我们通常使用另一个地址结构:

structsockaddr_in{

shortsin_family,

u_shortsin_port,

structin_addrsin_addr,charsin_zero[8],

},

其中sin_family置AF_INET,sin_port指明端口号,sin_addr结构体中只有一个唯一的字段s_addr,表示IP地址,该字段是一个整数,一般用函数i_addr()把字符串形式的IP地址转换成unsignedlong型的整数值后再置给s_addr.有的怎么写作器是多宿主机,至少有两个网卡,那么运行在这样的怎么写作器上的怎么写作程序在为其Socket绑定IP地址时可以把htonl(INADDR_ANY)置给s_addr,这样做的好处是不论哪个网段上的客户程序都能与该怎么写作程序通信,如果只给运行在多宿主机上的怎么写作程序的Socket绑定一个固定的IP地址,那么就只有与该IP地址处于同一个网段上的客户程序才能与该怎么写作程序通信.我们用0来填充sin_zero数组,目的是让sockaddr_in结构的大小与sockaddr结构的大小一致.下面是一个bind函数调用的例子:

structsockaddr_insaddr,

saddr.sin_family等于AF_INET,

saddr.sin_port等于htons(8888),

saddr.sin_addr.s_addr等于htonl(INADDR_ANY),

bind(ListenSocket,(structsockaddr*)&,saddr,sizeof(saddr)), listen函数

intlisten(SOCKETs,intbacklog),

怎么写作程序可以调用listen函数使其流套接字s处于监听状态.处于监听状态的流套接字s将维护一个客户连接请求队列,该队列最多容纳backlog个客户连接请求.检测如该函数执行成功,则返回0,如果执行失败,则返回SOCKET_ERROR.

accept函数

SOCKETaccept(SOCKETs,structsockaddrFAR*addr,intFAR*addrlen),

怎么写作程序调用accept函数从处于监听状态的流套接字s的客户连接请求队列中取出排在最前的一个客户请求,并且创建一个新的套接字来与客户套接字创建连接通道,如果连接成功,就返回新创建的套接字的描述符,以后与客户套接字交换数据的是新创建的套接字,如果失败就返回INVALID_SOCKET.该函数的第一个参数指定处于监听状态的流套接字,操作系统利用第二个参数来返回新创建的套接字的地址结构,操作系统利用第三个参数来返回新创建的套接字的地址结构的长度.下面是一个调用accept的例子:

structsockaddr_inServerSocketAddr,

intaddrlen,

addrlen等于sizeof(ServerSocketAddr),

ServerSocket等于accept(ListenSocket,(structsockaddr*)&,ServerSocketAddr,&,addrlen),

connect函数

intconnect(SOCKETs,conststructsockaddrFAR*name,intnamelen),

客户程序调用connect函数来使客户Sockets与监听于name所指定的计算机的特定端口上的怎么写作Socket进行连接.如果连接成功,connect返回0,如果失败则返回SOCKET_ERROR.下面是一个例子:

structsockaddr_indaddr,

memset((void*)&,daddr,0,sizeof(daddr)),

daddr.sin_family等于AF_INET,

daddr.sin_port等于htons(8888),

daddr.sin_addr.s_addr等于i_addr("133.197.22.4"),

connect(ClientSocket,(structsockaddr*)&,daddr,sizeof(daddr)),WindowsSockets是一个编程接口,它是在加州大学伯克利分校开发的套接字接口的基础上定义的.它包括了一组扩展件,以充分利用MicrosoftWindows消息驱动的特点.规范的1.1版是在1993年1月发行的,2.2.0版在1996年5月发行.Windows2000支持Winsock2.2版.在Winsock2中,支持多个传输协议的原始套接字,重叠I/O模型,怎么写作质量控制等.

这里介绍WindowsSockets的一些关于原始套接字(RawSocket)的编程.同Winsock1相比,最明显的就是支持了RawSocket套接字类型,通过原始套接字,我们可以更加自如地控制Windows下的多种协议,而且能够对网络底层的传输机制进行控制.

(1)创建一个原始套接字,并设置IP头选项.

SOCKETsock,

sock等于socket(AF_INET,SOCK_RAW,IPPROTO_IP),

或者:

s等于WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED),

这里,我们设置了SOCK_RAW标志,表示我们声明的是一个原始套接字类型.创建原始套接字后,IP头就会包含在接收的数据中,如果我们设定IP_HDRINCL选项,那么,就需要自己来构造IP头.

注意,如果设置IP_HDRINCL选项,那么必须具有administrator权限,要不就必须修改注册表:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Afd\Parameter\

修改键:DisableRawSecurity(类型为DWORD),把值修改为1.如果没有,就添加.

BOOLblnFlag等于TRUE,

setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&,blnFlag,sizeof(blnFlag),

对于原始套接字在接收数据报的时候,要注意这么几点:

如果接收的数据报中协议类型和定义的原始套接字匹配,那么,接收的所有数据就拷贝到套接字中.

如果绑定了本地地址,那么只有接收数据IP头中对应的远端地址匹配,接收的数据就拷贝到套接字中.

如果定义的是外部地址,比如使用connect(),那么,只有接收数据IP头中对应的源地址匹配,接收的数据就拷贝到套接字中.

(2)构造IP头和TCP头

这里,提供IP头和TCP头的结构: //StandardTCPflags #defineURG0x20 #defineACK0x10 #definePSH0x08 #defineRST0x04 #defineSYN0x02 #defineFIN0x01 typedefstruct_iphdr//定义IP首部 { unsignedcharh_lenver,//4位首部长度+4位IP版本号 unsignedchartos,//8位怎么写作类型TOS unsignedshorttotal_len,//16位总长度(字节) unsignedshortident,//16位标识 unsignedshortfrag_and_flags,//3位标志位 unsignedcharttl,//8位生存时间TTL unsignedcharproto,//8位协议(TCP,UDP或其他) unsignedshortchecksum,//16位IP首部校验和 unsignedintsourceIP,//32位源IP地址 unsignedintdestIP,//32位目的IP地址 }IP_HEADER, typedefstructpsd_hdr//定义TCP伪首部 { unsignedlongsaddr,//源地址 unsignedlongdaddr,//目的地址 charmbz, charptcl,//协议类型 unsignedshorttcpl,//TCP长度 }PSD_HEADER, typedefstruct_tcphdr//定义TCP首部 { USHORTth_sport,//16位源端口 USHORTth_dport,//16位目的端口 unsignedintth_seq,//32位序列号 unsignedintth_ack,//32位确认号 unsignedcharth_lenres,//4位首部长度/6位保留字 unsignedcharth_flag,//6位标志位 USHORTth_win,//16位窗口大小 USHORTth_sum,//16位校验和 USHORTth_urp,//16位紧急数据偏移量 }TCP_HEADER, TCP伪首部并不是真正存在的,只是用于计算检验和.校验和函数: USHORTchecksum(USHORT*buffer,intsize) { unsignedlongcksum等于0, while(size>,1) { cksum+等于*buffer++, size-等于sizeof(USHORT), } if(size) { cksum+等于*(UCHAR*)buffer, } cksum等于(cksum>,>,16)+(cksum&,0xffff), cksum+等于(cksum>,>,16), return(USHORT)(~cksum), }

当需要自己填充IP头部和TCP头部的时候,就同时需要自己计算他们的检验和.

(3)发送原始套接字数据报 填充这些头部稍微麻烦点,发送就相对简单多了.只需要使用sendto()就OK. sendto(sock,(char*)&,tcpHeader,sizeof(tcpHeader),0,(sockaddr*)&,addr_in,sizeof(addr_in)),

(4)接收数据

和发送原始套接字数据相比,接收就比较麻烦了.因为在WIN我们不能用recv()来接收rawsocket上的数据,这是因为,所有的IP包都是先递交给系统核心,然后再传输到用户程序,当发送一个rawssocket包的时候(比如syn),核心并不知道,也没有这个数据被发送或者连接建立的记录,因此,当远端主机回应的时候,系统核心就把这些包都全部丢掉,从而到不了应用程序上.所以,就不能简单地使用接收函数来接收这些数据报.要达到接收数据的目的,就必须采用嗅探,接收所有通过的数据包,然后进行筛选,留下符合我们需要的.可以再定义一个原始套接字,用来完成接收数据的任务,需要设置SIO_RCVALL,表示接收所有的数据.

25

多思版权所有不得复制VPN4/25/20039:05PM

zyj实验课.doc

物理通信介质

操作系统,如WINDOWS

网络通信协议怎么写作截面,如TCP/IP

网络编程截面,如WINDOWSSOCKET

应用程序N

应用程序1