tcpip实验报告

合集下载

TCP(IP)组网技术实验报告模板5个

TCP(IP)组网技术实验报告模板5个

郑州轻工业学院TCP/IP组网技术实验报告学生姓名:宋苗苗专业班级: 3G软件13-02班学号: 541313140237 指导教师: 程立辉实验时间: 2016年4月21日至2016年6月9日成绩:目录实验一配置动态路由RIP (3)实验二配置静态路由 (7)实验三 Cisco VTP (13)试验四 PPP数据链路层协议 (21)实验五 Cisco EIGRP内部网关路由协议 (25)题目一配置动态路由RIP 一:实验目的1.了解掌握动态路由的相关知识;2.掌握了解RIP协议相关知识及应用;3.掌握如何用RIP协议实现动态路由的配置。

二:实验拓扑配置前拓扑图:配置后拓扑图:三:实验过程3.1路由器的基本配置3.1.1 路由器Router0的基本配置3.1.2 路由器Router1的基本配置3.1.3 路由器Router2的基本配置3.2 RIP路由协议配置3.2.1 路由器Router0的RIP路由协议配置3.2.2 路由器Router1的RIP路由协议配置3.2.3 路由器Router2的RIP路由协议配置3.3 RIP路由协议启用第二版3.4配置PC端的IP地址,如下:3.5 查看各路由器的路由表信息3.5.1 查看Router0路由表信息3.5.2 查看Router1路由表信息四:实验结果使用ping检查计算机不同网段互通情况五:实验总结通过本次实验,我了解了配置动态路由器方法和相关配置命令;掌握了路由器的RIP协议的配置方法;理解路由器连接不同类型网络的原理,而且在配置过程在需要特别注意各个路由器之间的连通性,确保其的正常联通。

遇到问题:动态路由器配置过程中对于网络IP的互通问题不是很清楚,通过查找资料,最终实现了动态路由配置。

题目二配置静态路由一:实验目的1.了解掌握静态路由的相关知识;2.掌握了解静态路由通信原理;3.掌握如何用实现静态路由的配置。

二:实验拓扑配置前拓扑图:配置后拓扑图:三:实验过程3.1路由器的基本配置3.1.1Router0的基本配置3.1.2 Router1的基本配置3.1.3 Router2的基本配置3.2为每个路由器配置静态路由3.2.1为路由器Router0配置到路由器Router1通信的静态路由3.2.2配置路由器Router1配置到路由器Router0的返回路径其余配置同上。

主要协议分析实验报告(3篇)

主要协议分析实验报告(3篇)

第1篇一、实验背景随着计算机网络技术的飞速发展,网络协议作为计算机网络通信的基础,扮演着至关重要的角色。

为了更好地理解网络协议的工作原理和功能,我们开展了主要协议分析实验。

本实验旨在通过分析常用网络协议的报文格式和工作机制,加深对网络协议的理解。

二、实验目的1. 熟悉常用网络协议的报文格式和工作机制。

2. 掌握网络协议分析工具的使用方法。

3. 培养网络故障排查和问题解决能力。

三、实验环境1. 实验设备:PC机、网线、Wireshark软件。

2. 实验网络:局域网环境,包括路由器、交换机、PC等设备。

四、实验内容本实验主要分析以下协议:1. IP协议2. TCP协议3. UDP协议4. HTTP协议5. FTP协议五、实验步骤1. IP协议分析(1)启动Wireshark软件,选择合适的抓包接口。

(2)观察并分析IP数据报的报文格式,包括版本、头部长度、服务类型、总长度、标识、标志、片偏移、生存时间、协议、头部校验和、源IP地址、目的IP地址等字段。

(3)分析IP分片和重组过程,观察TTL值的变化。

2. TCP协议分析(1)观察TCP数据报的报文格式,包括源端口号、目的端口号、序号、确认号、数据偏移、标志、窗口、校验和、紧急指针等字段。

(2)分析TCP连接建立、数据传输、连接终止的过程。

(3)观察TCP的重传机制和流量控制机制。

3. UDP协议分析(1)观察UDP数据报的报文格式,包括源端口号、目的端口号、长度、校验和等字段。

(2)分析UDP的无连接特性,观察UDP报文的传输过程。

4. HTTP协议分析(1)观察HTTP请求报文和响应报文的格式,包括请求行、头部字段、实体等。

(2)分析HTTP协议的请求方法、状态码、缓存控制等特性。

(3)观察HTTPS协议的加密传输过程。

5. FTP协议分析(1)观察FTP数据报的报文格式,包括命令、响应等。

(2)分析FTP的文件传输过程,包括数据传输模式和端口映射。

TCP_IP攻击实验_实验报告

TCP_IP攻击实验_实验报告

中南大学TCP/IP攻击实验实验报告学生学院信息科学与工程学院专业班级完成时间 2015年11月29日目录1.实验描述 (3)2.实验步骤 (3)2.1 环境搭建 (3)2.2 实验1:ARP缓存中毒 (4)2.3 实验2:ICMP重定向攻击 (6)2.4 实验3:SYN洪流攻击 (7)2.5 实验4:在telnet和ssh连接上的TCP RST攻击 (10)2.6 实验5:对视频流应用程序的TCP RST攻击 (12)2.7 实验6:ICMP盲目连接重置和源端关闭攻击 (12)2.8 实验7:TCP报文劫持 (13)3.总结 (14)TCP/IP攻击实验1.实验描述【实验背景】由于TCP/IP协议是Internet的基础协议,所以对TCP/IP协议的完善和改进是非常必要的。

TCP/IP协议从开始设计时候并没有考虑到现在网络上如此多的威胁,由此导致了许多形形色色的攻击方法,一般如果是针对协议原理的攻击(尤其DDOS),我们将无能为力。

TCP/IP攻击的常用原理有:(1)源地址欺骗(Source Address Spoofing)、IP欺骗(IP Spoofing)和DNS欺骗(DNS Spoofing);(2) 路由选择信息协议攻击(RIP Attacks);(3) 源路由选择欺骗(Source Routing Spoofing) ;(4) TCP序列号欺骗和攻击(TCP Sequence Number Spoofing and Attack)。

【实验目的】基于TCP/IP协议进行攻击实验,了解TCP/IP协议的具体机制。

2.实验步骤2.1 环境搭建这里我使用三台虚拟机做实验,其中一个用于攻击;另一个用于被攻击;第三个作为观察者使用;把三台主机放在同一个LAN中,其配置信息参照如下所示(实际在实验过程中有所改动):这里我使用的是SEED实验室已经搭建好,并且已经安装好相关的netwox工具箱和Wireshark工具箱的Ubuntu系统,与此同时三台虚拟机都需要打开FTP和Telnet服务:使用如下命令来完成上述任务Start the ftp server# servicevsftpd startStart the telnet server# serviceopenbsd-inetd start2.2 实验1:ARP缓存中毒【实验背景】ARP缓存是ARP协议的重要的一部分。

实验四TCPIP协议属性设置报告

实验四TCPIP协议属性设置报告

实验四TCPIP协议属性设置报告1.实验目的与简介TCP/IP(传输控制协议/因特网协议)是互联网使用的主要协议之一,它提供了网络通信中的可靠数据传输和连接服务。

本实验旨在通过设置TCP/IP协议的属性,来了解和掌握TCP/IP协议的一些基本特性和优化方法。

2.实验环境本实验使用Windows操作系统,并以本地局域网为实验网络环境。

实验中使用的工具主要包括网络设置界面和命令行窗口。

3.实验步骤3.1设置IP地址和子网掩码在Windows操作系统中,可以通过进入网络设置界面来设置本机的IP地址和子网掩码。

IP地址是用于区分不同计算机和其他网络设备的唯一标识,而子网掩码用于定义本地网络的范围。

3.2设置默认网关默认网关是指当计算机要向其他网络发送数据时,首先会将数据包发送到默认网关。

在网络设置界面中,可以设置默认网关的IP地址。

默认网关通常是本地局域网内连接互联网的路由器。

3.3设置DNS服务器DNS(域名系统)服务器用于将域名转换为对应的IP地址。

在网络设置界面中,可以设置DNS服务器的IP地址。

一般来说,可以使用本地路由器或者互联网服务提供商提供的DNS服务器。

3.4设置TCP/IP属性通过命令行窗口可以使用"ipconfig"命令查看当前TCP/IP属性的详细信息。

可以通过命令行窗口中的一系列命令来设置TCP/IP属性,例如设置TCP缓冲区大小、调整TCP拥塞控制算法等等。

3.5实验结果与分析设置完TCP/IP属性后,可以使用一些网络性能测试工具来评估网络连接的质量和性能。

例如可以使用Ping命令检测网络延迟和丢包率,使用速度测试工具来测试网络带宽等等。

4.实验总结与心得TCP/IP协议是互联网中最常用的通信协议之一,对于网络通信的质量和性能具有重要影响。

通过实验,我了解到TCP/IP协议的一些基本特性和连接调优方法,并且掌握了调整TCP/IP属性的操作方法。

在实验过程中,我发现通过调整TCP缓冲区大小可以提高TCP连接的传输速度,并且可以通过调整TCP的拥塞控制算法来改善网络拥塞时的传输性能。

tcpip实验报告

tcpip实验报告

实验一Linux内核通用链表的使用一、实验目的学习Linux内核通用链表的设计原理,熟练掌握Linux内核通用链表的使用。

二、实验内容1、掌握Linux通用链表的创建2、掌握通用链表添加元素、删除元素和遍历链表的方法3、掌握通用链表的查找方法三、实现原理Linux的内核源文件list.h提供了所有的链表定义,以及各类链表的操作接口和实现。

其中创建链表的方法如下:LIST_HEAD(my_list);在指定的head后插入新节点,常用于堆栈数据结构的实现list_add(structlist_head *new, structlist_head *head);在指定的head前插入新节点,常用于队列数据结构的实现list_add_tail(structlist_head *new, structlist_head *head);从链表中删除一个指定节点list_del(structlist_head *entry);根据当前链表节点指针ptr获得宿主节点指针list_entry(ptr, type, member);遍历链表list_for_each(pos, head);四、实现代码和运行结果#include <stdio.h>#include <malloc.h>#include "list.h"struct user{int id;structlist_head list;};int main(void){struct user *p;LIST_HEAD(user_queue);for (inti = 0; i< 10; i++){p = (struct user *)malloc(sizeof(struct user));p->id = i;list_add_tail(&p->list, &user_queue);}structlist_head *q;list_for_each(q, &user_queue){p = list_entry(q, struct user, list);printf("%d\n", p->id);}return 0;}#include <stdio.h>#include <malloc.h>#include "list.h"struct user{char username[20];int id;structlist_head list;};int main(void){struct user *p;LIST_HEAD(head);for (inti; i< 10; i++){p = (struct user *)malloc(sizeof(struct user)); p->id = i + 1;printf("user %2d, Please input username: ", i+1); scanf("%s", p->username);list_add_tail(&(p->list), &head);}structlist_head *tmp;list_for_each(tmp, &head){p = list_entry(tmp, struct user, list);printf("%d\t%s\n", p->id, p->username);}list_for_each(tmp, &head){p = list_entry(tmp, struct user, list);if (p->id == 5)printf("%s\n", p->username);}return 0;}实验二Linux内核通用哈希链表的使用一、实验目的学习Linux内核通用哈希链表的设计原理,熟练掌握Linux内核通用哈希链表的使用。

TCPIP实验报告

TCPIP实验报告
(4)分析HTTP协议应答报文格式。响应报文:观察该请求消息发送主机与目的主机IP地址,和自己机器的主机IP地址比较,该消息谁发给谁的。观察该消息使用的TCP端口,是否是HTTP(80)。打开并分析该消息的HTTP头部信息内容
(5)从Analyze菜单中选择“ Follow TCP Stream”,显示整个数据流。
Response: 250 Directorychanged to /
9
pwd
Response: 257 "/" is current directory.
表3-2
序号
客户端->服务器
服务器->客户端
1
Response: 220 Serv-U FTP Server v6.0 for WinSock ready...
有:If-Modified-Since: Fri,13 May 2011 01:41:12
GMT\r\n
10.服务器对第二个HTTP GET请求的响应消息中的HTTP状态代码是多少?服务器是否明确返回了文件的内容?请解释。
304 没有 通过状态码来对应操作文件命令 进而找到文件
11.你的浏览器一共发出了多少个HTTP GET请求?
实验四DNS实验
一.实验目的
1.熟悉并掌握WireShark的基本操作,了解网络协议实体间的交互以及报文交换。
2.分析DNS协议
二.实验内容
借助于网络分析议WireShark捕获HTTP、TCP、DNS报文, 分析DNS报文头结构,理解其具体意义。
实验内容1:在浏览器的地址栏中输入:
需要回答的问题
1.定位到DNS查询消息和查询响应报文,这两种报文的发送是基于2.UDP还是基于TCP的?

实验四 TCPIP

实验四 TCPIP

实习四实验报告一、实习目的1.了解网络基本配置中包含的协议、服务、客户端,以及基本参数,并了解各种协议的作用,以及安装方法;2.掌握Windows支持的网络协议及参数设置方法;3.练习并掌握简单网络命令的使用。

二、实习内容1.查看所在机器的主机名称和网络属性,包括网络基本配置中包含的协议、服务、客户端,以及有关的基本参数;2.修改网络配置参数,建立小组内的局域网;3.网络协议、服务、客户端等组件的安装和卸载方法;4.常用网络命令的使用。

三、实习步骤1. 常用网络命令的使用(1)IPConfig●命令 ipconfig/all ,显示的信息如下:Windows IP ConfigurationHost Name . . . . . . . . . . . . :Primary Dns Suffix . . . . . . . :Node Type . . . . . . . . . . . . :IP Routing Enabled. . . . . . . . :WINS Proxy Enabled. . . . . . . . :Ethernet adapter 本地连接:Connection-specific DNS Suffix . :Description . . . . : 3Com 3C920 Integrated Fast EthernetController (3C905C-TX Compatible)Physical Address. . . . . . . . . :Dhcp Enabled. . . . . . . . . . . :IP Address. . . . . . . . . . . . :Subnet Mask . . . . . . . . . . . :Default Gateway . . . . . . . . . :DNS Servers . . . . . . . . . . . :(2) ping●在命令行下键入:Ping 127.0.0.1,显示以下信息:●在命令行下键入:Ping 本机IP地址,显示信息如下:说明网络配置正常。

TCP-IP攻击实验-实验报告.docx

TCP-IP攻击实验-实验报告.docx

中南大学TCP/IP 攻击实验实验报告学生姓名学院信息科学与工程学院专业班级完成时间2015年 11 月 29 日目录1. 实验描述 (3)2. 实验步骤 (3)环境搭建 (3)实验 1:ARP缓存中毒 (3)实验 2:ICMP重定向攻击 . (4)实验 3:SYN洪流攻击 (5)实验 4:在 telnet和ssh连接上的TCP RST攻击 (6)实验5:对视频流应用程序的TCP RST 攻击 (7)实验 6:ICMP 盲目连接重置和源端关闭攻击 (7)实验 7:TCP报文劫持 (8)3. 总结 (8)TCP/IP 攻击实验1.实验描述【实验背景】由于 TCP/IP 协议是 Internet的基础协议,所以对TCP/IP 协议的完善和改进是非常必要的。

TCP/IP 协议从开始设计时候并没有考虑到现在网络上如此多的威胁, 由此导致了许多形形色色的攻击方法,一般如果是针对协议原理的攻击( 尤其 DDOS),我们将无能为力。

TCP/IP 攻击的常用原理有:(1)源地址欺骗(Source Address Spoofing)Spoofing);、 IP欺骗 (IP Spoofing)和 DNS欺骗 (DNS(2)路由选择信息协议攻击 (RIP Attacks) ;(3) 源路由选择欺骗(Source Routing Spoofing);(4) TCP 序列号欺骗和攻击(TCP Sequence Number Spoofing and Attack)。

【实验目的】基于 TCP/IP 协议进行攻击实验, 了解 TCP/IP 协议的具体机制。

2.实验步骤环境搭建这里我使用三台虚拟机做实验,其中一个用于攻击;另一个用于被攻击;第三个作为观察者使用;把三台主机放在同一个LAN中,其配置信息参照如下所示(实际在实验过程中有所改动):这里我使用的是Wireshark工具箱的SEED实验室已经搭建好,并且已经安装好相关的Ubuntu 系统,与此同时三台虚拟机都需要打开netwoxFTP 和 Telnet工具箱和服务:使用如下命令来完成上述任务Start the ftp server#servicevsftpd startStart the telnet server#serviceopenbsd-inetd start实验 1:ARP缓存中毒【实验背景】ARP缓存是 ARP协议的重要的一部分。

TCPIP协议分析_实验四__20121105

TCPIP协议分析_实验四__20121105
(5)、打开命令提示符窗口,输入ping –f –l 1472 192.19.52.143,ping操作结果(成功收到并应答,则计算出的MTU值正确),之后在MTU的基础上加2,发现ping失败,如图4-3-1.
图4-3-1
项目4-4:解释两个ICMP Echo数据包之间的差别
(1)打开跟踪教材文件Chapter04中的ping.pkt,如图4-4-1.
实验中使用Ethereal对ICMP协议数据包文件进行分析,掌握构造过滤器,并懂得测试网络允许的MTU,以及了解两个ICMP数据包之间的差别和ICMP出错消息的原因。
六、教师评语
签名:
日期:
成绩
图4-2-3
项目4-3:确定和测试你的网络ICMP协议所允许的MTU
在项目4-2的基础中,如图4-3-1:
图4-3-1
(1)、链路层的首部开销:14字节;尾部开销:4字节
(2)、IP首部开销:20字节
(3)、Echo Request数据包中的ICMP首部的开销:8字节
(4)、用总的1518减去(1)至(4)的数据算出的MTU是1472字节。
图4-4-1
(2)根据Packet#1回答相关问题,如图4-4-2.
图4-4-2
a.Packet#1中ICMP标识符数字是:0x0200
b.Packet#1中ICMP序列号:0x1100
c.Packet#1中ICMP校验和的值:0x3a5c
(3)根据Packet#2回答相关问题,如图4-4-3:
图4-4-3
《TCP/IP协议分析》实验报告
实验序号:4
实验项目名称:运用Ethernet捕获数据包,分析数据包和设置IP流量过滤器
学 号
姓 名

TCP IP实验报告

TCP IP实验报告

《TCP/IP协议》实验报告学院:机械与电子信息学院专业:计算机网络技术学号:姓名:指导教师:2018年 6 月实验一Packet Tracer 6.0的使用一、实验目的通过在Packet Tracer 6.0 添加网络设备,熟悉不同的物理设备及其连接方式,掌握使用Packet Tracer 6.0构建网络的方法,掌握捕获、查看通信信息的方法。

二、实验步骤步骤1、打开Packet Tracer 6.0,添加以下网络节点:1841路由器3台,2950-24 交换机1台,PC三台,服务器1台。

步骤2、选择合适的连接线把设备连接起来。

以太网连线时,交换机与计算机或路由器等设备之间连接用直通线,交叉线用于同种设备(路由器与路由器,交换机与交换机)之间相连或计算机与路由器之间相连。

用直通线吧PC0、PC1、Router0与Switch0的任意端口连接,Router0、Router1和Router2之间需要用交叉线连接,Server0与Router2也要用交叉线连接。

如果连线类型正确,则PC与交换机之间连线上的绿灯马上会点亮。

特别的,为配置路由器,可以用控制台连线把PC2和Router1的Console 端口连接起来,也可以连接到Router1的Auxiliary端口上,但使用方法与连接到控制口时不同。

步骤3、配置设备。

PC的配置可以直接在Packet Tracer 6.0的逻辑拓补图上单击PC图标,打开设备配置窗口,单击Desktop选项卡中的IP Configuration,完成默认网关和ID地址的设置。

依次设置3台PC和服务器0的IP地址,PC0和PC1的默认网关设为192.168.1.1,服务器0的默认网关设为192.168.4.1。

单击需要配置的路由器图标,打开设备配置窗口,单击CLI选项卡,按Enter键出现命令行提示符,然后使用如下命令配置静态路由。

Router>enable #进入特权模式Router#configure terminal #全局配置Router(config)#int f0/0 #配置接口f0/0 Router(config-if)#no shutdown #开启接口Router(config-if)#ip address 192.168.1.1 255.255.255.0随着借口no shutdown 命令的输入,接口连线上的绿灯随时变亮。

tcp ip协议实验报告

tcp ip协议实验报告

tcp ip协议实验报告《TCP/IP协议实验报告》一、实验目的本次实验旨在通过实际操作,加深对TCP/IP协议的理解,掌握其基本原理和工作机制。

二、实验环境1. 操作系统:Windows 102. 软件工具:Wireshark、Putty三、实验内容1. 使用Wireshark监测网络数据包利用Wireshark工具,实时监测网络数据包的传输过程,观察数据包的结构和传输规则,以及TCP/IP协议的工作流程。

2. 使用Putty进行远程连接通过Putty工具,进行远程连接实验,模拟TCP/IP协议在网络通信中的应用场景,了解TCP/IP协议在远程通信中的工作原理。

3. 分析网络数据包结合Wireshark抓包结果和Putty远程连接实验,分析网络数据包的传输过程,探讨TCP/IP协议的数据传输机制,包括数据封装、传输流程和错误处理等方面的内容。

四、实验结果1. 通过Wireshark监测数据包,了解了TCP/IP协议的数据包格式和传输规则,包括TCP头部、IP头部等内容。

2. 利用Putty进行远程连接,实际体验了TCP/IP协议在远程通信中的应用,加深了对TCP/IP协议工作原理的理解。

3. 分析网络数据包,深入探讨了TCP/IP协议的数据传输机制,包括数据封装、传输流程和错误处理等方面的内容。

五、实验总结通过本次实验,我们对TCP/IP协议有了更深入的了解,掌握了其基本原理和工作机制,加强了对网络通信协议的理解和应用能力。

同时,通过实际操作,我们也发现了一些问题和不足之处,为今后的学习和实践提供了一定的参考和指导。

六、参考文献1. 《TCP/IP协议详解》2. 《计算机网络》通过本次实验,我们对TCP/IP协议有了更深入的了解,掌握了其基本原理和工作机制,加强了对网络通信协议的理解和应用能力。

同时,通过实际操作,我们也发现了一些问题和不足之处,为今后的学习和实践提供了一定的参考和指导。

希望通过不断的实践和学习,能够进一步提高对TCP/IP协议的理解和运用能力,为今后的网络通信工作打下坚实的基础。

TCP-IP攻击实验-实验报告

TCP-IP攻击实验-实验报告

中南大学TCP/IP攻击实验实验报告学生姓名学院信息科学与工程学院专业班级完成时间 2015年11月29日目录1.实验描述 (3)2.实验步骤 (3)环境搭建 (3)实验1:ARP缓存中毒 (3)实验2:ICMP重定向攻击 (4)实验3:SYN洪流攻击 (5)实验4:在telnet和ssh连接上的TCP RST攻击 (6)实验5:对视频流应用程序的TCP RST 攻击 (7)实验6:ICMP盲目连接重置和源端关闭攻击 (7)实验7:TCP报文劫持 (8)3.总结 (8)TCP/IP攻击实验1.实验描述【实验背景】由于TCP/IP协议是Internet的基础协议,所以对TCP/IP协议的完善和改进是非常必要的。

TCP/IP协议从开始设计时候并没有考虑到现在网络上如此多的威胁,由此导致了许多形形色色的攻击方法,一般如果是针对协议原理的攻击(尤其DDOS),我们将无能为力。

TCP/IP攻击的常用原理有:(1)源地址欺骗(Source Address Spoofing)、IP欺骗(IP Spoofing)和DNS欺骗(DNS Spoofing);(2) 路由选择信息协议攻击(RIP Attacks);(3) 源路由选择欺骗(Source Routing Spoofing) ;(4) TCP序列号欺骗和攻击(TCP Sequence Number Spoofing and Attack)。

【实验目的】基于TCP/IP协议进行攻击实验,了解TCP/IP协议的具体机制。

2.实验步骤环境搭建这里我使用三台虚拟机做实验,其中一个用于攻击;另一个用于被攻击;第三个作为观察者使用;把三台主机放在同一个LAN中,其配置信息参照如下所示(实际在实验过程中有所改动):这里我使用的是SEED实验室已经搭建好,并且已经安装好相关的netwox工具箱和Wireshark工具箱的Ubuntu系统,与此同时三台虚拟机都需要打开FTP和Telnet服务:使用如下命令来完成上述任务Start the ftp server# servicevsftpd startStart the telnet server# serviceopenbsd-inetd start实验1:ARP缓存中毒【实验背景】ARP缓存是ARP协议的重要的一部分。

TCPIP协议分析_实验3_分析IPv4和IPv6数据包

TCPIP协议分析_实验3_分析IPv4和IPv6数据包

《TCP/IP协议分析》实验报告实验序号:3 实验项目名称:分析IPv4和IPv6 数据包20网工学号姓名专业、班实验地点指导教师实验时间2022-9-14 一、实验目的及要求,步骤和结果动手项目3-1:使用Wireshark软件查看IPv4数据包首部所需时间: 20 分钟。

项目目标:学习使用Wireshark软件查看IPv4数据包的首部。

过程描述:本项目介绍如何捕获网络上的一个数据包,选择一个特定的数据包,查看该数据包的IPv4首部。

你可以捕获自己的数据进行分析,或启动Wireshark 软件,打开从本书配套网站上下载的文件IPv4Fields.pcap,直接跳到第(8)步。

(1)启动Wireshark软件(单击“开始”,指向“所有程序”,然后单击Wireshark。

也可以单击“开始”,在“运行”对话框中输入"Wireshark", 然后单击“确定”按钮)。

(2)单击Capture菜单,然后单击Interfaces 菜单项,出现Capture Interfaces 窗口。

(3)可能会显示有多个网卡,选定一个在Packets栏显示了实时数据包的网卡,然后单击Start 按钮,出现Capturing窗口。

(4)打开一个命令提示符窗口(单击“开始”按钮,在“运行”对话框中输入cmd,然后单击“确定”按钮)。

(5) ping 本地网络中的计算机IPv4地址。

(6)在命令提示符窗口中输入exit命令并按Enter键,关闭命令提示符窗口。

(7)在Wireshark软件中,单击菜单栏上的Capture,然后单击Stop (或者单击工具栏上的Stop 图标)。

(8)在数据包列表面板(上部面板)中选择一个TCP数据包(9)在数据包详细内容面板(中部面板),展开Internet Protocol Version4, 如图所示。

(10)查看Version和Header lenght字段的值。

(11)展开Differentiated Services Field, 查看Total Length和ldentification字段的值,然后再收起它。

TCPIP实验报告

TCPIP实验报告

tcp/ip实验报告一.实验目的二.实验内容2.1实验原理如图1所示。

计算机(ie )服务器(web 服务器: apache, microsoft iis) 计算机(netscape)三、实验步骤(1)清空高速缓存中的网页(图2):在ie浏览器中,选择“工具”——“internet选项”——“常规”标签——“删除文件”按钮图2 清除ie缓存(2)清空dns高速缓存(图3):在桌面上选择“开始”——“程序”——“附件”——“命令提示符”;——输入命令行“ipconfig/flushdns”——按“回车键”执行命令。

图3 清除dns域名解析缓存(5)从analyze菜单中选择“ follow tcp stream”,显示整个数据流。

其中,web浏览器发送的数据显示为一种颜色;所有由web服务器发送的数据显示为另一种颜色。

实验报告小组成员:组长:田廷魁组员:周霄晗周深立周斌杰田力陈童张鼎撰写人:田廷魁学号:201227920316 班级:网工1201班一、实验目的二、实验学时2 学时三、实验类型验证型实验四、实验步骤该实验采用网络结构一说明:ip 地址分配规则为主机使用原有 ip,保证所有主机在同一网段内。

按照拓扑结构图连接网络,使用拓扑验证检查连接的正确性。

本试验将主机 a 和 b 作为一组,主机 c 和d 作为一组,主机e 和f 作为一组。

现仅以主机 a 和 b 为例,说明实验步骤。

练习一:页面访问1. 主机 a 清空 ie 缓存。

------------------------------------------------------------------------------------------------------- *概要* 源主机: ip地址: 192.168.0.29 目的主机: ip地址: 192.168.0.251------------------------------------------------------------------------------------------------------- *命令交互过程*------------------------------------------------------------------------------------------------------- 端口: 80 端口: 1418 【问题】b) 根据本练习的报文内容,填写下表。

tcp ip实验报告

tcp ip实验报告

tcp ip实验报告《TCP/IP实验报告》TCP/IP协议是互联网上使用最广泛的协议之一,它是一种可靠的、面向连接的协议,用于在不同计算机之间进行数据通信。

在本次实验中,我们对TCP/IP协议进行了深入的研究和实验,以期更好地理解其工作原理和应用。

实验一:TCP连接建立过程我们首先对TCP连接建立过程进行了实验。

通过Wireshark抓包工具,我们观察到在建立TCP连接时,客户端和服务器端之间进行了三次握手的过程。

这三次握手分别是客户端向服务器端发送SYN包,服务器端收到后回复SYN+ACK 包,最后客户端再回复ACK包,完成连接的建立。

通过实验,我们深入了解了TCP连接建立的过程和原理。

实验二:TCP数据传输过程在第二个实验中,我们对TCP数据传输过程进行了实验。

我们使用了一个简单的客户端和服务器端程序,通过TCP协议进行数据传输。

通过抓包工具我们观察到,在数据传输过程中,TCP协议会对数据进行分段、封装、传输和重组等操作,确保数据的可靠传输和顺序交付。

这个实验让我们更加深入地了解了TCP协议在数据传输过程中的工作原理。

实验三:TCP连接的释放过程最后,我们进行了TCP连接的释放过程实验。

我们观察到在TCP连接释放时,客户端和服务器端进行了四次挥手的过程。

这四次挥手分别是客户端向服务器端发送FIN包,服务器端收到后回复ACK包,然后服务器端再向客户端发送FIN包,最后客户端回复ACK包,完成连接的释放。

通过这个实验,我们更加深入地了解了TCP连接释放的过程和原理。

通过本次实验,我们对TCP/IP协议有了更深入的理解,我们了解了TCP连接建立、数据传输和连接释放的过程和原理,这对我们今后的网络编程和网络管理工作具有重要的指导意义。

希望通过今后的实践和学习,我们能够更好地掌握和应用TCP/IP协议,为网络通信的可靠性和稳定性做出更大的贡献。

TCPIP协议分析_实验4_分析ARP缓冲区、IPv4和IPv6的路由表和路由协议

TCPIP协议分析_实验4_分析ARP缓冲区、IPv4和IPv6的路由表和路由协议

《TCP/IP协议分析》实验报告实验序号:4 实验项目名称:分析ARP缓冲区、IPv4和IPv6的路由表和路由协议20网工学号姓名专业、班实验地点指导教师实验时间2022-09-28 一、实验目的、步骤和结果动手项目4-1:管理本地ARP缓冲区项目目标:学习如何管理本地ARP的内容。

(1)单击Start(开始)按钮,单击Run(运行),在Open(打开)文本框中输入cmd,单击OK(确定)按钮。

屏幕上显示一个命令提示符窗口。

(2)在命令提示符下,输入arp -a命令,按Enter 键,浏览本地ARP缓冲区的内容。

记录出现在ARP缓冲区中的任何项。

(3)输入arp -d命令,按Enter键,删除本地ARP缓冲区的内容。

(4)输入arp -a命令,按Enter键,再次浏览ARP缓冲区。

记录出现在你的ARP缓冲区中的新项。

此时缓冲区应该为空。

(5)输入ping ip_address命令,其中ip_address 本地网络中的一台IP主机,然后按Enter键。

(6)在ping命令运行结束后,输入arp -a命令并按Enter 键,再次查看ARP缓冲区的内容,记录出现的新项。

此时的ARP缓冲区应只有ping之后的项了,如图所示。

动手项目4-2:读取本地IPv4路由表项目描述:学习如何查看本地计算机IPv4网卡路由表。

(1)单击Start(开始)按钮,单击Run(运行)按钮,在Open(打开)文本框中输入cmd,单击OK(确定)按钮。

屏幕上显示一个命令提示符窗口。

(2)在命令提示符下,输入netsh命令,并按Enter键。

(3)在netsh提示符后面,输入interface ipv4命令,然后按Enter 键。

(4)在命令提示符下,输入show route 命令,并按Enter键,查看本地IPv4路由表,如图所示。

(5)输入exit命令并按Enter 键,然后再输入exit命令并按Enter键,关闭命令提示符窗口。

tcp ip协议实验报告

tcp ip协议实验报告

tcp ip协议实验报告TCP/IP协议实验报告一、引言TCP/IP协议是互联网的基础协议,它负责实现数据在网络中的传输。

本实验旨在通过实际操作和观察,深入了解TCP/IP协议的工作原理和相关概念。

二、实验目的1. 了解TCP/IP协议的分层结构和每一层的功能;2. 掌握TCP/IP协议的基本工作原理;3. 实践使用TCP/IP协议进行网络通信。

三、实验环境和工具1. 操作系统:Windows 10;2. 实验工具:Wireshark、Telnet、Ping。

四、实验过程和结果1. 实验一:抓包分析通过Wireshark工具抓取网络数据包,观察数据包的结构和内容。

我们发现数据包包含源IP地址、目标IP地址、端口号等信息,这些信息是实现数据传输的关键。

2. 实验二:Telnet实验使用Telnet工具模拟客户端与服务器进行通信。

我们通过输入命令和查看服务器返回的结果,了解了Telnet协议的基本工作原理。

Telnet协议使用TCP协议作为传输层协议,通过建立连接和传输数据实现远程登录和控制。

3. 实验三:Ping实验使用Ping命令测试网络连接的可达性。

Ping命令使用ICMP协议,通过向目标主机发送探测包并等待回复包,判断网络是否通畅。

我们通过Ping命令测试了本地主机和远程主机之间的网络连接情况。

五、实验总结通过本次实验,我们深入了解了TCP/IP协议的工作原理和相关概念。

TCP/IP协议采用分层结构,每一层都有特定的功能,实现了数据在网络中的可靠传输。

我们通过抓包分析、Telnet实验和Ping实验,实践了TCP/IP协议的使用,并掌握了一些常用的网络工具和命令。

六、实验心得通过本次实验,我对TCP/IP协议有了更深入的理解。

我认识到TCP/IP协议的重要性和广泛应用,它是互联网通信的基础。

同时,我也意识到网络通信的复杂性和需要不断学习和实践的重要性。

我将继续深入学习网络技术,提升自己的能力。

TCP-IP课程实验报告

TCP-IP课程实验报告

图 2-1 ARP 将网络层的逻辑地址解析为本地的硬件地址
2.1 ARP 概述
ARP 是像以太网和令牌环这样的访问共享、基于广播的网络技术所使用的协议。该协 议将节点的转发 IP 地址解析成对应的 MAC (Media Access Control——媒介访问控制) 地址。 MAC 地址也称为物理地址、硬件地址或网卡地址。解析后的 MAC 地址成为以太网或令牌 环报头中的目标 MAC 地址,IP 数据报在媒介上发送时寻到该地址。 ARP 将因特网层地址 (IP 地址)解析成网络接口层地址(MAC 地址) 。 转发 IP 地址不必与 IP 数据报的目标 IP 地址相同,每个发出的 IP 数据报经路由处理后 都变成一个接口和转发 IP 地址。对于直接在同一子网上传送的目标节点,转发 IP 地址是数 据报的目标 IP 地址。对于间接传送到远程目标节点,转发 IP 地址是转发主机所在子网上的 路由器的 IP 地址。 IP 独立于任何特定的网络接口层技术。因此,从转发的 IP 地址判断不出目的地的网络 接口层地址。例如,以太网和令牌环 MAC 地址的长度是 6 字节,IP 地址的长度是 4 字节。 MAC 地址在网卡的制造过程中就已分配好了,而 IP 地址是由网络管理员分配的。对某个具 体的 IP 节点而言,这两种地址的指定方式之间没有任何关系,因此不可能从一个地址判断 出另一个地址。ARP 是一种基于广播的请求答复协议,提供了将正在转发的 IP 地址映射为 它们相应的 MAC 地址的动态解析能力。
TCP
UDP
图 1-3 数据结构
第二章
地址解析协议(ARP)——链路层
由于不同层和驻留于这些层上的地址的复杂性, 因此必须有一种解析不同的计算机编址 策略间差异的方法。 地址解析就起了这样的作用, 并且使得端设备可以动态地找到本地的硬 件地址以便向远端主机传输数据, 或者取得必要的逻辑 IP 地址和配置参数以便加入到网络。 如果没有某种类型的地址解析方法,远端主机间就不能通信。在 IP 界,地址解析指的是将 一个协议地址转换成一个相应的物理地址或反之,例如将一个 IP 地址转换成一个以太网地

TCPIP协议分析_实验5_ICMP协议分析

TCPIP协议分析_实验5_ICMP协议分析

《TCP/IP协议分析》实验报告实验序号:5 实验项目名称:ICMP协议分析20网工学号姓名专业、班实验地点指导教师实验时间2022-10-5 一、实验目的、要求、步骤和结果动手项目5-1:在网络上使用ICMPv4 Echo请求消息ping另一个设备项目目标:往网络中的某个主机发送Echo请求消息,接收Echo应答消息,并在Wireshark 软件中捕获这个处理过程。

过程描述:本项介绍如何在Windows 命令提示符下使用ping 实用工具,测试与另一台本地计算机的连通性,使用Wireshark数据包分析器捕获ICMPv4数据包的交换。

(1)单击“开始”按钮,单击“运行”,在“打开”文本框中输入cmd,之后单击“确定”按钮。

打开一个命令提示符窗口。

(2)在命令提示符下,输入ping 命令并按Enter键,查看可用的命令行参数。

在遵循下述步骤打开Wireshark 程序的过程中,保持命令行提示符窗口为打开状态。

(3)单击“开始”按钮,将鼠标指针移动到“所有程序”上,然后单击Wireshark。

(4)在菜单栏单击Capture,然后单击Interfaces。

(5)确定活动网卡,然后单击右侧的Start按钮(可能会有多个网卡,这也没有问题)。

(6)单击任务栏上的“命令提示符”按钮切换到命令提示符窗口,或使用Alt +Tab键让命令提示符窗口处于活动状态。

(7)输入ping ip_address命令,其中ip_address是网络上另一台设备的地址。

在Wireshark跟踪缓冲区中应该有一些数据包。

(8)不要关闭命令提示符窗口。

单击任务栏上的Wireshark按钮,或使用Alt +Tab键让Wireshark 窗口处于活动状态。

(9)单击菜单栏的Capture,然后单击Stop按钮,使Wireshark停止捕获更多的数据包。

(10)滚动浏览捕获在跟踪缓冲区中的数据包。

你应该能够看到几个ICMP Echo 请求和ICMP Echo应答数据包。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《TCP/IP》实验报告姓名:学号:学院:专业:班级:指导老师:2013年6月3日实验一熟悉Linux编程环境练习1:编写一个并发程序,利用fork函数创建五个进程,让每一个进程打印出可用来分辨不同进程的信息。

#include<stdio.h>#include<unistd.h>#include<sys/wait.h>int main(){int pid, i;i = 0;while(i < 5){i++;if((pid=fork()) == 0){printf("pid:%d\n",getpid());sleep(3);break;}waitpid(pid,(int*)0,0);printf("ppid:%d\n",getpid());}return 0;}运行结果:练习2:编写一个程序,利用execve函数改变进程执行的代码。

//execve.c#include<stdio.h>#include<stdlib.h>#include<unistd.h>int main(int argc,char *argv[]){char *newargv[] = {NULL,"you","me",NULL};char *newenviron[]={NULL};if(argc != 2){fprintf(stderr,"Usage:%s <file-to-exec>\n",argv[0]);exit(EXIT_FAILURE);}newargv[0] = argv[1];execve(argv[1],newargv,newenviron);perror("execve");exit(EXIT_FAILURE);}//myecho.c#include<stdio.h>#include<stdlib.h>#include<unistd.h>int main(int argc, char *argv[]){int i;for(i = 0; i < argc; i++)printf("argv[%d]:%s\n",i,argv[i]);return 0;}运行结果:实验二实现Echo服务客户端程序(UDP)代码://client.c#include<sys/socket.h>#include<netinet/in.h>#include<netdb.h>#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<sys/types.h>#include<sys/time.h>#include<errno.h>int readable_timeo(int fd, int sec){fd_set rset;struct timeval tv;FD_ZERO(&rset);FD_SET(fd,&rset);_sec = sec;_usec = 0;return (select(fd+1,&rset,NULL,NULL,&tv)); //使用select函数实现简单超时重传}int main(int argc, char **argv){int sockfd, len, res, i;struct sockaddr_in address;char *host;struct hostent *hostinfo;struct servent *servinfo;char buf[128], buf2[128];int nsec = 20;//timeout:20sstruct timeval tpstart,tpend;double timeuse;if(argc == 1)host = "localhost";elsehost = argv[1];hostinfo = gethostbyname(host);if(!hostinfo){fprintf(stderr,"no host:%s\n",host);exit(1);}servinfo = getservbyname("echo","udp");if(!servinfo){fprintf(stderr,"no echo server!\n");exit(1);}sockfd = socket(AF_INET,SOCK_DGRAM,0);address.sin_family = AF_INET;address.sin_port = servinfo->s_port;address.sin_addr = *(struct in_addr*)*hostinfo->h_addr_list;len = sizeof(address);while(fgets(buf,128,stdin) != NULL){for(i = 0; i < 2; i++) //juse one chance to resend{if(i == 1) //resend{printf("ReSend!!!\n");gettimeofday(&tpend,NULL);timeuse=1000000*(__sec)+__usec;timeuse/=1000000;printf("resend time is %lf s\n",timeuse);}gettimeofday(&tpstart,NULL);res = sendto(sockfd,buf,strlen(buf),0,(struct sockaddr*)&address,len);if(readable_timeo(sockfd,nsec) == 0){fprintf(stderr,"socket timeout\n");continue;}res = recvfrom(sockfd,buf2,128,0,(struct sockaddr*)&address,&len);buf2[res] = 0;fputs(buf2,stdout);break; //send successfully,quit!}}close(sockfd);exit(0);}实验三循环无连接服务器Echo的实现代码://server.c#include<stdio.h>#include<unistd.h>#include<netinet/in.h>#include<arpa/inet.h>#include<sys/types.h>#include<stdlib.h>#include<signal.h>#include<string.h>#include<errno.h>#include<time.h>#define MAXLINE 128int sockfd, flag = 1;void close_action(int sig){printf("close the sockfd\n");close(sockfd);signal(SIGINT,SIG_DFL);flag = 0;}int main(){struct sockaddr_in sin,sin_cli;int type, res, opt;char mesg[MAXLINE], buf[MAXLINE];socklen_t len;struct sigaction act;struct tm *ptm;int y,m,d,h,n,s;long ts;//set the signal actionact.sa_handler = close_action;sigemptyset(&act.sa_mask);act.sa_flags = 0;memset(&sin,0,sizeof(sin));sin.sin_family = AF_INET;sin.sin_addr.s_addr = INADDR_ANY;sin.sin_port = htons(45454);sockfd = socket(AF_INET,SOCK_DGRAM,0);if(sockfd < 0){fprintf(stderr,"can't create socket %s \n",strerror(errno));exit(1);}if(bind(sockfd,(struct sockaddr*)&sin,sizeof(sin)) < 0){fprintf(stderr,"can't bind to %s port:%s\n",service,strerror(errno));exit(1);}len = sizeof(sin_cli);sigaction(SIGINT,&act,0); //Ctrl+C close the sockfdwhile(flag){printf("\n");res = recvfrom(sockfd,mesg,MAXLINE,0,(struct sockaddr*)&sin_cli,&len);mesg[res] = 0;ts = time(NULL);sprintf(buf,"%.24s\r\n",ctime(&ts));printf("%s\t",buf);printf("%s\t",inet_ntoa(sin_cli.sin_addr));sendto(sockfd,mesg,n,0,(struct sockaddr*)&sin_cli,len);}exit(0);}实验四循环的、面向连接服务器的实现//server.c#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<time.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<string.h>#define MAXSIZE 30int main(){struct sockaddr_in servaddr,cliaddr;int clilen;int connfd, listenfd;char buf[MAXSIZE];time_t now;int seconds;struct tm *ptm;int y,m,d,h,n,s;long ts;listenfd = socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(9734);servaddr.sin_addr.s_addr = htonl(INADDR_ANY);bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));listen(listenfd,5);for(;;){clilen = sizeof(cliaddr);connfd = accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);ts = time(NULL);sprintf(buf,"%.24s\r\n",ctime(&ts));write(connfd,buf,MAXSIZE);}exit(1);}//client.c#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<time.h>#include<string.h>#define MAXSIZE 30void str_daytime(int fd){char buf[MAXSIZE];int n;if((n = read(fd,buf,MAXSIZE)) <= 0){fprintf(stderr,"error");}buf[n] = 0;fputs(buf,stdout);}int main(int argc,char **argv){int sockfd;struct sockaddr_in servaddr;sockfd = socket(AF_INET,SOCK_STREAM,0);servaddr.sin_family = AF_INET;servaddr.sin_port = htons(9734);//Inet_pton(AF_INET,argv[1],&servaddr.sin_addr);servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr));str_daytime(sockfd);exit(1);}实验五循环的、面向连接服务器的实现//server.c#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<time.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<string.h>#define MAXSIZE 30int main(){struct sockaddr_in servaddr,cliaddr;int clilen,connfd, listenfd, childpidchar buf[MAXSIZE];time_t now;int seconds;struct tm *ptm;int y,m,d,h,n,s;long ts;listenfd = socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(9734);servaddr.sin_addr.s_addr = htonl(INADDR_ANY);bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));listen(listenfd,5);clilen = sizeof(cliaddr);for(;;){connfd = accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);if((childpid = fork()) == 0){close(listenfd);ts = time(NULL);sprintf(buf,"%.24s\r\n",ctime(&ts));write(connfd,buf,MAXSIZE);}close(connfd);}exit(1);}//test.c#include<stdio.h>#include<unistd.h>#include<stdlib.h>int main(){int i;for(i = 0; i < 10; i++){system("./tcpcli");printf("\n");}exit(0);}实验六单进程并发服务代码:#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<arpa/inet.h>#include<netinet/in.h>#include<sys/socket.h>#include<sys/select.h>#include<strings.h>#include<string.h>#include<time.h>#define MAXLINE 128int main(){struct sockaddr_in servaddr,cliaddr;int clilen;int connfd, listenfd, sockfd;char buf[MAXLINE];int i, maxi, maxfd, seconds, nresult, res, nread,client[FD_SETSIZE];pid_t childpid;fd_set readfds,testfds;struct tm *ptm;int y,m,d,h,n,s;time_t ts;listenfd = socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(9734);servaddr.sin_addr.s_addr = htonl(INADDR_ANY);bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));listen(listenfd,10);maxfd = listenfd;maxi = -1;for(i = 0; i < FD_SETSIZE; i++)client[i] = -1;FD_ZERO(&readfds);FD_SET(listenfd,&readfds);for(;;){testfds = readfds;nresult = select(maxfd+1,&testfds,NULL,NULL,NULL);if(FD_ISSET(listenfd,&testfds)){clilen = sizeof(cliaddr);connfd = accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);for(i = 0; i < FD_SETSIZE; i++)if(client[i] < 0){client[i] = connfd;break;}if(i == FD_SETSIZE)fprintf(stderr,"too many clients");FD_SET(connfd,&readfds);if(connfd > maxfd)maxfd = connfd;if(i > maxi)maxi = i;if(--nresult <= 0)continue;}for(i = 0; i <= maxi; i++){if((sockfd = client[i]) < 0)continue;if(FD_ISSET(sockfd,&testfds)){if((res = read(sockfd,buf,MAXLINE))== 0){close(sockfd);printf("connection closed by client\n");FD_CLR(sockfd,&readfds);client[i] = -1;}else if(res > 0){printf("supply service to client!\n");ts = time(NULL);sprintf(buf,"%.24s",ctime(&ts));write(sockfd,buf,strlen(buf));}elseprintf("error!!!!\n");if(--nresult <= 0){printf("no more readble descriptors\n");break;}}}}exit(1);}实验七并发的客户端//tcpcli.c#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include "unp.h"int main(int argc,char **argv){int i, ccount, hcount = 0, fd, maxfd = 0, n, one, sockfd;fd_set afds;char ser_ip[FD_SETSIZE][20], buf[MAXLINE];struct sockaddr_in servaddr;struct servent *servinfo;servinfo = getservbyname("daytime","tcp");servaddr.sin_family = AF_INET;servaddr.sin_port = servinfo->s_port;for(i = 1; i < argc; ++i){sockfd = socket(AF_INET,SOCK_STREAM,0);if(strcmp(argv[i],"-c") == 0){if(++i < argc && (ccount = atoi(argv[i])))continue;err_quit("tcpcli [-c] [number] [ip] ");}Inet_pton(AF_INET,argv[i],&servaddr.sin_addr);fd = connect(sockfd,(SA*)&servaddr,sizeof(servaddr));if(ioctl(sockfd,FIONBIO,(char*)&one))err_quit("can't mark socket nonblocking:%s\n",strerror(errno));if(sockfd > maxfd)maxfd = sockfd;strcpy(ser_ip[sockfd],argv[i]);++hcount;FD_SET(sockfd,&afds);}n = select(maxfd+1,&afds,NULL,NULL,NULL);for(i = 0; i <= maxfd; i++){if(FD_ISSET(i,&afds)){if((n = read(i,buf,MAXLINE)) == 0){close(sockfd);FD_CLR(i,&afds);}elseprintf("%s\t%s\n",buf,ser_ip[i]);}}exit(0);}实验八多线程服务代码:#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<time.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<string.h>#include<semaphore.h>#include<pthread.h>#define MAXSIZE 30struct share_thread{pthread_mutex_t work_mutex;int count;}shared;void *thread_func(void *arg){int connfd;char buf[MAXSIZE];struct tm *ptm;int y,m,d,h,n,s;long ts;connfd = *(int*)arg;ts = time(NULL);sprintf(buf,"%.24s\r\n",ctime(&ts));write(connfd,buf,MAXSIZE);pthread_mutex_lock(&shared.work_mutex);shared.count++;pthread_mutex_unlock(&shared.work_mutex);printf("Number of service of daytime:%d\n",shared.count);close(connfd);pthread_exit(0);}int main(){struct sockaddr_in servaddr, cliaddr;int listenfd, connfd;pthread_t serv_thread;pthread_attr_t thread_attr;int res;int clilen;shared.count = 0;res = pthread_mutex_init(&shared.work_mutex,NULL);if(res != 0){fprintf(stderr,"mutex initilization failed");exit(1);}res = pthread_attr_init(&thread_attr);if(res != 0){fprintf(stderr,"Attribute creation failed");exit(1);}res = pthread_attr_setdetachstate(&thread_attr,PTHREAD_CREATE_DETACHED);if(res != 0){fprintf(stderr,"Setting detached attribute failed");exit(1);}listenfd = socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(9734);servaddr.sin_addr.s_addr = htonl(INADDR_ANY);bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));listen(listenfd,5);for(;;){clilen = sizeof(cliaddr);connfd = accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);//wrongres = pthread_create(&serv_thread,&thread_attr,thread_func,(void*)&connfd);if(res != 0){fprintf(stderr,"create pthread failed\n");exit(1);}}exit(1);}实验九预分配进程服务器代码://server.c#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<time.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<string.h>#include<signal.h>#include<errno.h>#include<sys/wait.h>#include<pthread.h>#include<semaphore.h>#define MAXSIZE 30#define MAXCHILD 100static pthread_mutex_t work_mutex;static pid_t childpid[MAXCHILD];void child_main(int i, int listenfd){char buf[MAXSIZE];struct tm *ptm;int y,m,d,h,n,s;long ts;int connfd;int clilen;struct sockaddr_in cliaddr;clilen = sizeof(cliaddr);pthread_mutex_lock(&work_mutex); //lockconnfd = accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);pthread_mutex_unlock(&work_mutex); //unlockprintf("Now, it is the %d child to supply service for the client\n",i);ts = time(NULL);sprintf(buf,"%.24s\r\n",ctime(&ts));write(connfd,buf,MAXSIZE);close(connfd);}void sig_int(int signo){printf("\ndestroy the mutex\n");int i;for(i = 0; i < MAXCHILD; i++)kill(childpid[i],SIGTERM);while(wait(NULL) > 0);if(errno != ECHILD)fprintf(stderr,"wait error");pthread_mutex_destroy(&work_mutex);exit(0);}int main(){struct sockaddr_in servaddr, cliaddr;int listenfd, connfd;int res, i;int clilen;res = pthread_mutex_init(&work_mutex,NULL);if(res != 0){fprintf(stderr,"mutex initialization failed\n");exit(1);}listenfd = socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(9734);servaddr.sin_addr.s_addr = htonl(INADDR_ANY);bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));listen(listenfd,5);for(i = 0; i < MAXCHILD; i++){if((childpid[i] = fork()) < 0){fprintf(stderr,"fork failed");exit(1);}else if(childpid[i] == 0)child_main(i, listenfd);}signal(SIGINT,sig_int);for(;;)pause();}。

相关文档
最新文档