总结是一次反思过程,是一种记录工作情况、回顾工作不足的重要方式,在总结写作的过程中,我们需要全面化的分析工作情况,这有利于我们的工作成长。怎么写出有效的总结呢?下面是小编为大家整理的《网络听课总结》,供大家参考借鉴,希望可以帮助到有需要的朋友。
linux 网络 笔记(听课笔记)
一网络预备知识
1. IP 主机的标识,32bit 无符号的二进制,通常用点分十进制表示
3个基本类:
A 类:最高字节高位0 1 + 3 网络号 + 主机号
0.0.0.0191.255.255.255 2^162
192.0.0.0239.255.255.255
用途:常用作组播地址
E 类:最高字节高位1111 0
240.0.0.065535
150000 //系统用的
5000124]; //填充字段
本地地址结构体 struct sockaddr_un {
sa_family_t sun_family; // 协议族
char sun_path[108];
//108字节协议地址
};// 传参
void * arg ;
通用地址结构体:
struct sockaddr {
sa_family_t sa_family; // 协议族
char sa_data[14]; //14字节协议地址
};
一创建套接字
Int socket(int domain, int type, int protocol); 功能
domain:指明所使用的协议族,通常为PF_INET/AF_INET,表示互联网协议族(TCP/IP协议族);
type:指定socket的类型:SOCK_STREAM (TCP)或SOCK_DGRAM(UDP) protocol:协议的编号通常赋值"0" 返回值
Socket()调用返回一个整型socket描述符,你可以在后面的调用使用它。
失败返回 -1 Socket接口还定义了原始Socket(SOCK_RAW),允许程序使用低层协议。 绑定端口
Int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 功能:把sockfd 绑定一个具体的端口 sockfd : 描述符
addr : 本机的结构ip的地址不允许绑定非本机IP 如:(192.168.2.10) addrlen: 告知内核ip地址大小, 必须为实际的地址大小网络为16 正确返回0 失败返回-1
udp接收数据端
Ssize_t recvfrom(int sockfd,void *buf,size_t len,int flags,struct sockaddr *src_addr,socklen_t *addrlen);) 功能接收数据 Sockfd 描述符
Buf 存放接收到的数据
Len 最多可以接收的数据大小
Flags 接收的方式(默认是阻塞,通常是0) Src_addr 获取发送端的ip地址信息
Addrlen 告知内核发送端ip地址大小(结构大小) 返回值
成功返回实际接收的数据大小
返回值如果为0
表示对方已关闭 失败返回 -1
udp发送数据端
Ssize_t sendto(int sockfd,const void *buf,size_t len,int flags,struct sockaddr *dest_addr,socklen_t addrlen); 功能:发送数据 Sockfd : 描述符
Buf: 用户需要发送的数据缓存地址 Len:用户最多发送的数据大小
Flags:发送方式(默认是阻塞,通常设为0) Dest_addr: 当前数据发送的目标主机ip地址值
Addrlen: 告知目标主机ip地址的大小(结构大小) 返回值
成功返回实际发送的数据大小 失败返回 – 1
Tcp申请三次握手(客户端)
Int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen); 实现客户端与服务器的连接 Sockfd: 套接字描述符 Addr:服务器ip结构地址
Addrlen:服务器ip结构地址大小 成功返回 0
失败返回-1 注意:再次申请,它会断开先前建立的连接,重新建立新的连接连接:获知对方存在
(Tcp)监听(服务器端)
Int listen(int sockfd, int backlog); 功能:实现对客户端请求的监听(队列机制) Sockfd: 套接字描述符
Backlog:队列的长度,一般设为5 追打可设为8 返回值:
成功返回 0,失败返回 -1
(Tcp)回复三次握手(服务器端) 功能:回复客户端握手申请,建立连接
Int accept(int sockfd,struct sockaddr *addr, socklen_t *addrlen); Sockfd: 套接字描述符
Addr: 对方(客户端)ip 地址
Addrlen:对方(客户端)ip 地址大小
成功返回非负整数(新的socket描述符)失败返回
-1
Tcp 数据接收
Ssize_t recv(int sockfd,void *buf,size_t len,int flags); 功能接收数据
Sockfd: (客户端)是套接字描述符(服务器端)是accept()的返回值 Buf: 存放接收到的数据
Len: 最多可以接收的数据大小
Fags: 发送方式(默认是阻塞,通常设为0) 成功返回实际接收的数据大小失败返回 -1; 返回值如果为0
表示对方已关闭
Tcp数据发送
Ssize_t send(int sockfd,void *buf,size_t len,int flags); 功能:发送数据
Sockfd : (客户端)是套接字描述符(服务器端)是accept()的返回值 Buf: 用户需要发送的数据缓存地址 Len:用户最多发送的数据大小
Flags:发送方式(默认是阻塞,通常设为0) 成功返回实际发送的数据大小失败返回 -1 关闭套接字 @1
Int Shutdown(int sockfd,int how) 功能:指定方式关闭套接字 Socket: 套接字描述符
How: SHUT_RD 或0 (关闭读) SHUT_WR或1(关闭写) SHUT_RDWR或2(关闭读写)相当于close() 成功返回
0 失败返回 -1 @2
Int close(int sockfd) 关闭套接字
Socket: 套接字描述符
成功返回
0 失败返回 -1
UDP 客户端创建流程
1 初始化网络地址结构体(服务器端)
struct sockaddr_in ser_addr ;
bzero(&ser_addr,sizeof(ser_addr)); ser_addr.sin_family = AF_INET; ser_addr.sin_port = htons(50001); 服务器端口号 -------网络字节序
ser_addr.sin_addr.s_addr = inet_addr("192.168.1.230") ; 服务器点分制地址-》网络字节序 2 创建数据报套接字
Int sockfd = socket(AF_INET,SOCK_DGRAM,0);(数据报套接字) 3 发送数据到服务器端 Int sento_udp = sendto(sockfd,buf,strlen(buf)+1,0,(struct sockaddr *)&ser_addr,sizeof(struct sockaddr_in));
(服务器地址) 4 接收服务器端的回复
Int recvfrom_udp = recvfrom(sockfd,buf, sizeof(buf),0,NULL,NULL); 5 关闭套接字
Close(sockfd);
UDP 服务器端创建流程
1 初始化网络地址结构体(服务器端)
struct sockaddr_in ser_addr ;
bzero(&ser_addr,sizeof(ser_addr)); ser_addr.sin_family = AF_INET; ser_addr.sin_port = htons(50001); 服务器端口号 -------网络字节序
ser_addr.sin_addr.s_addr = inet_addr("192.168.1.230") ; 服务器点分制地址-》网络字节序 2 创建数据报套接字
Int sockfd = socket(AF_INET,SOCK_DGRAM,0);(数据报套接字) 3 绑定套接字
Int bind_udp = bind(sockfd,(struct sockaddr *)&ser_addr,sizeof(struct sockaddr_in));
(服务器地址) 4 接收客户端请求
struct sockaddr_in client_addr ; size = sizeof(struct sockaddr_in) int recvfrom_udp = recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&client_addr,&size); (客户端地址) 5
回复客户端
Int sendto_udp =
sendto(sockfd,buf,recvfrom_udp,0,(struct sockaddr *)&client_addr, sizeof(struct sockaddr_in))
(客户端地址) 6 关闭套接字
Close(sockfd);
TCP 客户端创建流程
1 初始化网络地址结构体(服务器端)
struct sockaddr_in ser_addr ;
bzero(&ser_addr,sizeof(ser_addr)); ser_addr.sin_family = AF_INET; ser_addr.sin_port = htons(50001); 服务器端口号 -------网络字节序
ser_addr.sin_addr.s_addr = inet_addr("192.168.1.230") ; 服务器点分制地址-》网络字节序 2 创建流式套接字
Int sockfd = socket(AF_INET,SOCK_STREAM,0);(流式套接字) 3
申请三次握手
Int connect_tcp = connect (sockfd,( struct sockaddr *)&ser_addr,sizeof(ser_addr))
(服务器地址) 4 发送数据到服务器端
Int send_tcp = send(sockfd,buf,strlen(buf) + 1,0) 5 接收服务器端的回复
Int recv_tcp = recv (sockfd,buf,sizeof(buf),0) 6 关闭套接字
Close(sockfd);
TCP 服务器端创建流程
1 初始化网络地址结构体(服务器端)
struct sockaddr_in ser_addr ;
bzero(&ser_addr,sizeof(ser_addr)); ser_addr.sin_family = AF_INET; ser_addr.sin_port = htons(50001); 服务器端口号 -------网络字节序
ser_addr.sin_addr.s_addr = inet_addr("192.168.1.230") ; 服务器点分制地址-》网络字节序 2 创建数据报套接字
Int sockfd = socket(AF_INET,SOCK_DGRAM,0);(流式套接字) 3 绑定套接字
Int bind_tcp = bind(sockfd,(struct sockaddr *)&ser_addr,sizeof(struct sockaddr_in));
(服务器地址) 4
监听客户端请求
Int listen_tcp = listen(sockfd,5)
一般为5 最大为8 5 回复客户端的三次握手请求
struct sockaddr_in client_addr ; int len = sizeof(struct sockaddr_in);
Int connectfd = accept(sockfd,( struct sockaddr *)&client_addr,&len)
( 客户端地址) 6 接收客户端请求 7 8 Int recv_tcp = recv(connectfd,buf,sizeof(buf),0); 回复客户端
Int send_tcp = send(connectfd,buf,recv_tcp,0); 关闭套接字
Close(sockfd);
Close(connectfd); 1 .TCP CS 模型
client:
socket //创建流式套接字
|
ser_addr:(struct sockaddr_in) //目标地址结构体(服务器)
|
connect()//3次握手
|
sendto/send/write
|
recvfrom/recv/read
|
.......
|
close()/shutdown()
server:
(1)循环服务器,可以多个客户端服务,但是不能在同一时刻
ser_addr :(struct sockaddr_in)//本机的地址结构体
|
socket (流式套接字)
|
bind(使套接字具有地址属性)
|
listen(创建监听队列)
| while(1) {
accept(握手建立连接,获取对方地址) | while(1) {
recvfrom/recv/read //接收对端(客户端)信息
|
sendto/send/write //向对端回射信息
} |
..... } close
(2) 并发服务器:可以同一时刻为多个客户端服务
ser_addr :(struct sockaddr_in)//本机的地址结构体
|
socket (流式套接字,sockfd)
|
bind(使套接字具有地址属性)
|
listen(创建监听队列)
| while(1) { connectfd = accept(握手建立连接,获取对方地址)
|
pid = fork()
if(pid == 0)
{
close(sockfd);
while(1)
{
recvfrom/recv/read //接收对端(客户端)信息
|
sendto/send/write //向对端回射信息
}
} close(connectfd); | ..... } close(sockfd);
2. 分析三次握手
client
server
SYN = 1 (请求标志)
seq_no = 0(client)
第一次
------------------------------>
SYN = 1(请求标志)
ACK = 1(应答标志)
seq_no = 0(server), ack_no = 1 (==seq_no(client) + 1) 第二次<------------------------------
ACK = 1(应答标志)
seq_no = 1(ack_no(server)),ack_no = 1 ( == seq_no(server) + 1) 第三次 ------------------------------>
3.数据包分析
一帧数据(TCP) = mac头 + IP头 + TCP头 + 用户数据
ttl: 数据包每经过一个路由器,如果停留的时间小于1s,ttl 减一,当ttl 小于0时数据丢弃掉
第三天
fcntl
int fcntl(int fd, int cmd, ... /* arg */ ); 获取或改变文件描述符的属性,一般我们需要改变文件状态标志位 @1 fd : 文件描述符 @2 cmd : 对文件描述符的操作(一般可以获取或者设置当前 file status flags) (F_GETFD,F_SETFD) @3 ...... : 不定参,取决于cmd @4 成功返回值取决于 cmd
失败返回-1 例如 @1
int flag = fcntl(0,F_GETFL)
查看属性有返回值 @2 fcntl(0,F_SETFL,flag | O_NONBLOCK)
添加属性无返回值
IO的特性与接口没有关系,与描述符属性有关,调用fcntl/ioctl (可以直接把你用户的命令传递到内核,可以实现对底层驱动的控制)
一 IO 模型 (4种)
1. 阻塞IO
当资源未准备好时,程序睡眠或者等待,不浪费CPU,效率低,实现非常简单,但是它是应用最广泛的IO
read(sockfd,buf,BUFF_SIZE )/recv/recvfrom
2. 非阻塞IO
当资源未准备好时,直接返回错误码(errno),不断的轮循,浪费CPU,效率高
3. 信号驱动IO(SIGIO)
一种异步的通信机制,底层(内核)向上层(用户层)发信号(SIGIO),当资源可用时,内核向当前进程发送SIGIO信号,用户捕捉(signal)此信号,读取IO资源,如果用户不捕捉,进程会被杀死
signal(SIGIO,hander);//更安全 获取套接字的原有属性
int flag = fcntl(sockfd,F_GETFL);//O_NONBLOCK 添加异步属性,文件描述符可以被多个进程打开,此时内核不知信号发给谁 fcntl(sockfd,F_SETFL,flag | O_ASYNC); 获取当前描述符对应的默认进程号(默认为0) pid = fcntl(sockfd,F_GETOWN ); 改变描述符对应的进程号
fcntl(sockfd,F_SETOWN,getpid());
4 . IO 多路复用
可以同时对多个IO控制,哪个准备好了,执行哪个
IO 多路复用:
1. 建立一个统计表:
fd_set readfds; 2. 添加fd到表中
FD_ZERO(&readfds); //将表清空
FD_SET( fd,&readfds); //将fd 加入 readfds 3 . 监测readfds 这张表(监测已经加入表的fd),会将没有就绪的fd 清0 n = select(fd+1,&readfds,NULL,NULL,NULL); //n ==>有多少fd 就绪,此时不知道哪个就绪 4. 判断哪个fd 就绪,这张表只会保存就绪的fd
FD_ISSET(fd,&readfds) == 1
就绪
FD_ISSET(fd,&readfds) == 0
未就绪
相关函数
void FD_CLR(int fd, fd_set *set); int FD_ISSET(int fd, fd_set *set); void FD_SET(int fd, fd_set *set); void FD_ZERO(fd_set *set);
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); 注意:描述符不受限与套接字,任何描述符都行
nfds:select()函数监视的描述符数的最大值,一般取监视的描述符数的最大值+1, 其上限设置在sys/types.h中有定义 #define FD_SETSIZE 256
readfds:select()函数监视的可读描述符集合 wtitefds:select()函数监视的可写描述符集合 errnofds:select()函数监视的异常描述符集合
timeout:select()函数监视超时结束时间,取NULL表示永久等待 返回值:返回总的位数这些位对应已准备好的描述符,否则返回-1 相关宏操作:
FD_ZERO(fd_set *fdset):清空fdset与所有描述符的关系 FD_SET(int fd, d_set * fdset):建立描述符fd与fdset得关系 FD_CLR(int fd, d_set * fdset):撤销描述符fd与fdset得关系
FD_ISSET(int fd, d_set * fdset):检查与fdset联系的描述符fd是否可以读写,返回非零表示可以读写
5. select()函数实现IO多路复用的步骤 (1)清空描述符集合
(2)建立需要监视的描述符与描述符集合的关系 (3)调用select函数
(4)检查监视的描述符判断是否已经准备好 (5)对已经准备好的描述符进程IO操作
表的存放规则:
fd_set readfds; FD_ZERO(&readfds); //将表清空
FD_SET(0,&readfds); //将0 加入 readfds
FD_SET(3,&readfds); //将3 加入 readfds
FD_SET(4,&readfds); //将4 加入 readsds
表头:
|
| 1 0 0 1 1 0 ........... ………… 0
| | | | |
|
| 0 1 2 3 4 5
1023
n = select(4+1,&readfds,NULL,NULL,NULL); 检测就绪,返回就绪个数,未就绪的清零 (由于处理器的速度很快,n通常为1)
若此时0就绪:(n = 1) 表头:
|
| 1 0 0 0 0 0 ........... ………… 0
| | | | |
|
| 0 1 2 3 4 5
1023
若此时有0 和3同时就绪(n = 2) 表头:
|
| 1 0 0 1 0 0 ........... ………… 0
| | | | |
|
| 0 1 2 3 4 5
1023
判断是那个fd就序
If(FD_ISSET(fd,&readfds) == 1)
{
。。。。。。。
}
例:
int sockfd,maxfd,n; int connectfd ,fd; char buf[BUFF_SIZE];
fd_set readfds, tempfds;
maxfd = sockfd;
FD_ZERO(&readfds);
tempfds = readfds;
while(1) { tempfds = readfds; FD_SET(sockfd,&tempfds); //如:有50 client,某一时刻只有sockfd就绪
if(-1 == (n = select(maxfd + 1,&tempfds,NULL,NULL,NULL)))
exit(-1);
for(fd = 0; fd <= maxfd ; fd ++)
{
if(FD_ISSET(fd,&tempfds)) //套接字两种都有可能就绪,如果不是sockfd,那么必定是以连接的套接字
{
if(fd == sockfd) { if(-1 == (connectfd = accept(sockfd,NULL,NULL)))
exit(-1); puts("hander shake !!! ");
FD_SET(connectfd,&readfds); //将新的客户端添加至只读表
maxfd = maxfd > connectfd ? maxfd : connectfd; //时刻保证maxfd 最大
}else //不能用if(fd == connectfd) { bzero(buf,BUFF_SIZE);
if(-1 == (n = recv(fd,buf,BUFF_SIZE,0)))
exit(-1); if(n == 0) {
FD_CLR(fd,&readfds); //将退出的客户端从只读表清除 close(fd);
if(maxfd == fd) {
while(1) {
maxfd --;
if(!FD_ISSET(maxfd,&readfds)) //maxfd 是最后一个需
要监测的
continue;
else {
break;
}
}
}
}
printf("[%d] client buf:%s ",n,buf);
}
} } }
获取套接字属性信息
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
sockfd套接字描述符 level选项级别SOL_SOCKET(man 7 solcket)(通用套接字)
IPPROTO_IP
(man 7 ip)得到选项名
IPPROTO_TCP
(man 7 tcp) optname选项名
SO_BROADCAST(广播)……
optval存放获取到的选项值的缓冲区地址&n
int n; optlen存放缓冲区长度的地
&len
int len = sizeof(n) 成功返回 0
失败返回 -1
第四天
设置套接字属性信息
int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);
sockfd套接字描述符
evel选项级别SOL_SOCKET
(man 7 solcket) (通用套接字)
IPPROTO_IP
(man 7 ip)得到选项名
IPPROTO_TCP
(man 7 tcp) optname选项名
SO_BROADCAST(广播)IP_ADD_MEMBERSHIP(组播)
组播结构体:struct ip_mreqn { truct in_addr imr_multiaddr; /* 组播ip
struct in_addr imr_address; /* 服务器ip
int imr_ifindex;
/* interface index */通常为0
}; optval存放需要设置的选项值的缓冲区地址&n int n = 1(打开广播), int n = 0(关闭广播) optlen存放缓冲区长度的地址
sizeof(n) 成功返回 0
失败返回 -1
Int on = 1 setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)) 使先前进程创建的端口能重新绑定
一单播广播组播
1. 单播:接收方为一个,用户发送的包,可以到达指定的主机,一对一的通信, 数据包经过路由器或者交换机,不经过复制,需要转发
好处:服务器可以及时的为客户端响应 坏处:如果客户端的个数太大,会造成超载
host1 -------route/swith(转发)-----------> host2 2. 广播:接收方为局域网内,所有主机, 属于一对所有,数据包经过路由器或者交换机 需要经过复制,转发,不存在CS,存在发送方,和接收方,使用UDP 注意:默认不允许发送 好处:效率高
坏处:如果大量发送会造成广播风暴
广播地址:主机号为全1,如,C类私有网络:192.168.1.255 广播MAC :FF:FF:FF:FF:FF:FF
host1------------route/swith(复制,转发) ------------------->host2
|
-------->host3
|
....
|
-------->host254
udp广播发送方:默认不允许
1). 创建数据报套接字(填充地址结构体(广播IP))
2). 设置套接字属性,允许发送广播包 (setsockopt) int on = 1;
setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(int ))(设置属性)
int on ; socklen_t len ; len = sizeof(on); getsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,&len)
2). 发送数据报到广播ip
udp广播接收方:默认允许
1). 创建数据报套接字(填充地址结构体(广播ip))
2). 绑定广播地址(ip)
3). 直接接收对方ip
3. 组播
接收方为局域网多个主机,将具有相同需求的主机加入一个组,然后组内任何一个主机的包,组内所有成员都会收到,是广播的优化 优点:有针对性,相对广播可以降低网络带宽 缺点:相对单播,缺少校错机制
组播地址:D类IP 224.0.0.0 - 239.255.255.255 组播的MAC:01:00:5e:*.*.* (IP地址的低23bit)
(获取属性) host1------route(IGMP 网络组管理协议网络层)/swith(复制,转发) ------->host2
|
------------------------->host3
|
....
|
-------->host(多个<= 254)
Udp组播发送方
1). 创建数据报套接字(填充地址结构体组播ip)
2). 直接发送组播ip
Udp组播接收方
1). 创建数据报套接字(填充地址结构体组播IP)
2). 绑定组播地址(ip)
3). 设置属性,将当前主机ip加入组(IGMP) //需要路由器
struct ip_mreqn mulgroup; bzero(&mulgroup,sizeof(mulgroup)); mulgroup.imr_multiaddr.s_addr = inet_addr(组播ip);
mulgroup.imr_address.s_addr = inet_addr(本机ip); mulgroup.imr_ifindex = 0;
setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mulgroup,sizeof(mulgroup))
4). 直接接收对方ip
第五天: 说明:
网络中套接字通常是,当没有相应资源时是阻塞的,如果有资源可读,就会直接返回 网络中环境是异常复杂的,这个时候我们对异常处理,需要超时检测
一超时检测
1. 设置套接字选项
Struct timeval tv; 套接字超时属性 (结构体)
tv.tv_sec = 3; 秒
tv.tv_usec = 1000; 微秒
setsockopt(sockfd,SOL_SOCKET,SO_RCVTIMEO,&tv,sizeof(tv)) connectfd = accept(sockfd,NULL,NULL) connectfd 继承sockfd的属性(这里应用的是超时属性) if(errno == EAGAIN)continue;
2. select
//如果没有任何一个fd就绪则超时,超时返回0,每次超时之后,tv值不会重置,需要用户自己重置
struct timeval tv; tv.tv_sec = 2; tv.tv_usec = 0; n = select(sockfd + 1,&readfds,NULL,NULL,&tv)) if(n == 0) {
printf("timeout %d .... ",++count);
continue; }
3. alarm信号 //特性不会阻塞,会更新
/* function: 中断当前进程阻塞的系统调用,在哪里阻塞在哪里中断
signum: 捕捉的信号
act: 设置之后的信号属性
oldact: 获取先前默认的属性
*
int sigaction(int signum,const struct sigaction *act,struct sigaction *oldact);
struct sigaction {
void (*sa_handler)(int); //signal 的信号处理函数
void (*sa_sigaction)(int, siginfo_t *, void *); //sigaction最早的信号处理函数
sigset_t
sa_mask; //信号屏蔽码,可以屏蔽指定信号
int
sa_flags; //信号属性
void (*sa_restorer)(void); //linux 不支持
};
二 UNIX 域套接字编程
1. 本地(本机)进程间通信
2. 不经过OSI /TCP/IP 体系结构,不存在打包和拆包过程
3. 可以完全套用TCP/UDP CS 模型
练习: 实现UNIX本地进程通信
三 tftp 实现
作者:司徒敏
10.12参加了在浙江嘉兴实验小学举行的2011年全国小学科学年会,两天时间一共听了14节课,分别是《果实的结构》《呼吸》《相貌各异的我们》(2节)《动物的卵》《观察金鱼》《食物在口腔里的变化》《用显微镜观察身边的生命世界》《运动与呼吸》《蝴蝶身体结构探秘》《食物的消化》《维护生态平衡》《生的食物和熟的食物》《营养要均衡》。最后还听了路培琦老师、章鼎儿老师,还有郝京华老师的点评。不论课上得好与坏,对我都很有启发。下面想谈谈自己感受最深的几点:
一、对学生情况把握得准,教学才有效
在听的14节课中有一半的课内容中是没有实验的,这些课是《维护生态平衡》《运动与呼吸》《相貌各异的我们》(2节)《营养要均衡》《食物的消化》《呼吸》,通常没有实验的课都被认为比较难上,因为教学设计得不好就会变成老师一讲到底,或者学生上得没兴趣,但在这次年会上还是有不少的老师有勇气挑战这类型的课。尤其上得出色的是《相貌各异的我们》(李俊)《呼吸》(史加祥)《运动与呼吸》(张晓萍),这三节课是被评为这次年会的特等奖。
《相貌各异的我们》(李俊)这节课创设了一个寻找好心人的情境,从目击者提供的线索中拼出好心人的相貌,在拼图的过程中逐步带出人的相貌特征。这样的情境就像破案一样,非常吸引学生,并且拼图活动非常有趣,所以课堂气氛很活跃,学生参与度很高。这节课教学目标中的科学概念目标是“知道我们不同个体之间存在着差异,我们是世界上独一无二的个体。我们有不同的相貌特征,这些特征的不同组合造就了多种多样的生命个体。”我觉得这个目标对六年级的学生来说比较简单,可以说在未上这节课前学生已经知道“我们不同个体之间存在着差异,我们有不同的相貌特征。”所以上完整节课个人认为学生在原有水平上没有得到提高,这节课的科学概念目标应该定在“每个人看起来都不一样是因为只要我们有一个性状或相对性状不一样,我们的相貌就会不一样”。并且在课堂上学生对哪些是人的相貌特征并不是很清晰,例如学生会把“胖瘦”也当做是人的相貌特征。这节课的亮点在于情境的创设,给人耳目一新的感觉,但感觉老师在课堂上有点像是表演,不是在突出学生而是在突出自己。
《运动与呼吸》这课路培琦老师的点评是课堂上的三个活动,有阶梯性,层层推进,研究内容集中在学生感兴趣但一知半解的肺活量上很好,技术与科学探究的结合。我觉得这课的亮点是在对教材的处理上,原教材先是让学生认识了呼吸器官后,再认识“吸进去的是氧气,呼出来的是二氧化碳。呼吸实际上是进行气体交换。”最后的活动是测量肺活量。五年级的学生已经知道运动后呼吸次数增多是因为需要更多的空气,并知道“吸进去的是氧气,呼出来的是二氧化碳”,为了要让学生在原有水平上有所提升,老师把立脚点放在肺活量上,我觉得从学生实际出发对教材进行处理是很值得学习的。但我觉得这课在设计肺活量测量器这个环节花了不少时间,而这个环节我觉得不是这节课的重难点,也不是学生要掌握的,所以我觉得可以把这个环节省去。这课的最后我觉得还是要把“肺活量”与“运动”拉上关系,让学生讨论肺活量是大好还是小好,怎样增强我们的肺活量,这样对教材处理就更好了。
《呼吸》这课是我认为这次年会上得最好的一节课,老师语言幽默,引导到位,重难点突破得很好。章鼎儿老师是这样评价这节课的:上课老师对科学教学的真谛把握得很准,为什么嘴不是呼吸器官?这是本课的第一个高潮,这个问题之所以吸引孩子是因为这正是孩子提出的问题,并且老师用孩子可以理解的方式来解决问题。老师提供了一幅人体器官图,里面有消化器官、血液循环器官、呼吸器官,让学生找出哪些是呼吸器官,这是一个有挑战性的活动,能把学生的已有认知暴露出来,能产生思维的碰撞。如果老师提供的只是一幅只有呼吸器官的图,那学生只是会死记知识点而不是去理解,老师对学习主体的研究很到位。但这节课也有以老师为中心的痕迹,课的一开始老师让学生提有关呼吸的问题,老师板书有些位置留空了而不是接着学生的回答来写,就会让学生去猜测老师究竟想让我们回答什么。我在上这节课时就发现学生确实会把“嘴”当成是呼吸器官,因为学生认为嘴也可以吸气呼气。他们也会把“腹部”也当成是呼吸器官,因为学生发现呼吸时腹部会跟着胸腔一起动。史老师在纠正学生“嘴”不是呼吸器官时有三个很好的设问“既然鼻和嘴都能呼吸,为什么人还要长两个呼吸器官?”“什么时候我们才会用嘴呼吸?”“用嘴呼吸时喉会有什么感觉?鼻子呼吸时会有这种感觉吗?”这三个问题都问到关键处上去,一步步让学生知道嘴不是呼吸器官。而对于“腹不是呼吸器官”,老师就出示了横膈膜模拟教具,清晰演示给学生看当吸气时横膈膜就到腹部去了,所以吸气时腹部会胀起来。这节课可以看出老师对学生的情况把握得很准,教学策略非常有效。吸引学生的学习情境,从提高学生原有水平的角度调整教材,深入剖析学生的思维错误点能使教学更有效。
二、暴露学生的前概念,教学更有针对性
《食物的消化》《观察金鱼》《果实的结构》这三课是有关注学生的前概念,《食物的消化》《观察金鱼》先让学生画出人体的消化器官、金鱼,当展示学生画的图画时就会发现大家画得不一样,于是就产生探究问题。但课的最后老师都没有回到学生的前概念图上,我觉得如果课的最后能让学生在自己原来画的图上用不同颜色的笔标出新的认识,那学生就会清晰知道自己原来哪些认识是错误的,加深正确的认识。而《果实的结构》一课章鼎儿老师是这样评价的:让学生说出判断果实的理由这个环节设计得好,但后面的教学并没有沿着学生提出的这些理由走下去,只围绕“结构”来展开教学,教学应该顺着学生的思路走下去。所以暴露学生的前概念,顺着学生的前概念走下去,最后回归学生的前概念,我觉得这样能使教学更有针对性。
三、多媒体技术恰如其分的运用,能使教学更精彩
在这次年会中有很多课都运用了多媒体,例如《动物的卵》《观察金鱼》《蝴蝶身体结构探秘》这三课都用了视频短片来作为引入,能吸引学生对本课研究对象的注意。《用显微镜观察身边的生命世界》是用电子目镜把显微镜下的微生物显示在大屏幕上,便于学生交流自己的观察发现。《相貌各异的我们》(邱小飞)一课的最后用拼图软件让学生亲历各种性状任意组合造成人们相貌不同的过程,这个软件的使用将学生的学习活动推向高潮,学生亲眼目睹性状的微小变化造成的相貌改变,这种直观演示让本课的教学难点轻松突破。可惜老师把软件放在课的最后才出示,如果放在课中或课前可能教学效果会更好。
路培琦老师在最后的点评中提到本次的课都比较准时下课,能把大段的时间给学生活动,但有些课活动的意义、价值和目标指向性不足。生命科学这块不易搞科学探究,但本次的课能在这块作大胆尝试,借助多媒体手段、实物、模型来突破难点。郝京华老师则说到“认识世界的方式”比“掌握知识”更重要。老师可以大胆对教材进行改造、创新以适合你所教的班级。在课堂上及时捕捉瞬间信息,处理好课堂生成。根据课堂上孩子的表现来调整实际教学。对科学探究的理解不能狭窄化,科学探究有观察描述类、实验类(模拟实验、对比实验)、调查研究类。在进行教学设计时要考虑要教的是什么,知识、技能,还是什么,再根据这个来考虑教学的方法。
我觉得这次年会的课每节都有值得我去学习的地方,尤其是专家的点评更让我学到很多。没有完美的课,这才会让我们有更高的追求。
青青橙
很幸运,这次年会,我也在现场,聆听了15节课,坚守二会场的我,听到了三节特等奖中的二节,感觉特别好!
李俊老师的课,让我看到了一节最不像课的科学课。他用像主持人般富有激情的语言、创设出一环又一环的情节把全班的孩子(包括我们几百位听课的老师)都深深的吸引住了。从一开始与学生同做游戏时,看出李老师的童心与可爱,他的美妙歌喉,更是让我们佩服之至!
张老师的课《运动与呼吸》,是我看到的最舒心、最像科学课的课。不知为什么,她一上课,整个会场就静下来了,导入没几分钟,老师的淡定、学生的精彩回答、到位的实验材料、精心设计的问题……这一切,可以看出,张老师的教学经验是多么的丰富,她的沉着、冷静、淡定的教学风格更是独树一帜!
还有欣赏青海美丽的景色时学生流露出羡慕的眼神、现场烤肉时学生兴奋的表情、观察猪脑时学生的专注神情、邱老师幽默风趣的语言……这一切的一切,都在我的脑海里刻下了一席之地!
2014年12月23日听课总结与感想
人只有在比较和刺激中才能不断的成长和进步,听完了今天大武口几位老师的讲课,才觉得自己上课简直是在聊天而不是讲出来的,撇开知识点的编排不说,他们讲课的语气和节奏我只想到了一个词可以形容——振奋人心!
张老师的这节数学课,本来是我已经忘记了的知识,但经过他的讲解听的很明白,究其原因主要有这么几个方面的优点让我觉得自己必须要好好的学习:1.板书的设计。板书写的非常的明白,每一个重要步骤都不省略写出来,让学生有思考和抄笔记的时间过程,并且板书的布局也非常的好,可以很明显的区分哪些是重要内容,哪些是副板书。2.教案的书写。作为一个老教师能够把教案还写的这么的完整又整齐,真值得我们好好的去学习。3.肢体语言丰富。动作快速而有震撼力,敲击黑板这个动作也成了引起学生注意力的主要手段。4.对于重点内容强调多次。重难点的把握和要求学生注意的事项强调的很明确。
陈老师的一节物理课是讲电磁的内容,而这节课我也在之前听过其他老师讲过,内容大同小异没有多大的差别,而最让我觉得受教就是她的声音,声音太让人觉得有激情了,字正腔圆、字字如珠落地,听她讲课绝对不会出现说是因为听觉疲劳而导致人思维迟钝的现象,她的发音和语调是我最应该去学习的地方。
下午本来人容易犯困再加上感冒觉得很瞌睡,但是一进教室被常老师的那种激情澎湃的声音一下子给刺激的根本没有睡意了,让我只
1 / 2
路漫漫其修远兮,吾将上下而求索 想看看他的声音是怎样做到这么“犀利”的?还有就是他的语速很快讲课的节奏也很快这些方面恰恰都是我的弱点,我在以后的练课及上课过程中将注重练习这些方面的技能。
郝老师在很短的时间里备出一节课,由于准备仓促加上感冒声音不大得到整体的评价没有其他老师那么高,但是我在她身上看到的最多的就是真诚,不管是上课还是在平时的工作当中我一直感觉她很坦诚、勇敢,我对就是对错就是错,能够把自己的缺点改正的人最终才会称为最优秀的人。
自己的弱点和不足自己往往不容易发现,据别的老师反馈我讲课一直是声音比较平缓没有什么起伏,节奏很慢,语速也慢导致到后来学生都容易迷迷糊糊容易犯困,今天听完课我觉得我又回到了大四疯狂练习讲课的时代了,对着镜子练习这其实是我在学校上学的时候老师就这么教过了,但是时间长了没有对比没有刺激自己的进取心也慢慢的会衰退,所以以后一定要下来对自己要求高,定位高,争取做一个优秀的老师。若果是智商不够智力不够弥补比较困难,但是我觉得自己现在最缺少的就是声音、激情、气场,我相信这些问题我在不久的将来一定会做的很好,声音是可以增高的,激情是可以训练的。
如果我们不去对比不去学习而固步自封的话,我们只会是个井底之蛙,看到的天就那么一点点,永远也不会进步。所以希望学校以后能够多组织一些优秀的老师讲课,这样只有让自己看到了别人的长处知道了不足之处才能更快的进步。
武鹏伟
2014年12月23日
2 / 2
路漫漫其修远兮,吾将上下而求索
语文组大循环听课总结
4月8日—9日,我校语文组按照中心校的统一要求组织进行了语文大循环听课,全校11名语文教师参加了此次听课、评课。本次听课分高年级组和低年级组进行
本次活动引起了全体语文教师的高度重视,他们积极准备,认真备课,严格按照语文教学策略组织教学,注重师生间的互动,做到了老师少讲、学生多练,收到了良好的课堂效果,听课老师认真听课,详细的作着听课记录,在评课时实事求是的指出了讲课老师存在的问题,并给出了可行的改进建议。各位老师均表示以此次大循环听课为契机,努力提高自己的教学水平。 本次大循环听课历时两天,收到了良好的效果,实现了预期的目标。
2010年4月9日
通过本学期对几名教师听课发现,教师们课前都做到了认真备课,或利用校园网下载相应教学资源,或向其他教师请教,对教案进行了反复的锤炼和修订。 同时,也发现教师在讲课过程中存在一些不足和问题,可以归纳为以下几点。
(一)需要加强教学新方法、新手段的引进。老师们恰当地使用了多媒体教学,在学科教学中结合本学科特点对学生渗透学法指导。然而,从教学方法和教学手段上墨守成规,没有新突破。
(二)需要体现教师个人特色。一般应注意如下几点:课的结构。课的结构是指课的组成部分及各部分的顺序和时间分配。课型不同,课的结构也不同。例如:教学目标在何时采用何种方式呈现才能最大限度地引起学生的好奇,激发学生的学习动机;如何通过课堂提问使学生有意识地从认知结构中提取相关的旧知识,并激活旧知识;怎样创设教学情境,导入新课的教学;怎样通过简明、准确、生动的语言系统呈现新内容;采用何种方式完成对新内容的巩固;如何设计多种形式的练习,加强知识的应用与迁移。除了注意每个环节的实现方式,还要注意时间安排,否则就会出现一节课“前紧后松”或“前松后紧”的不合理状况,使课堂结构显得不够严谨。
(三)注重重点难点的突破。一节课的重点难点能否突破,标志着这节课的成功与否。重点内容通常是指在教材中或因讲述详细所占篇幅大;或是归纳的结论、规律所占地位突出。难点是指大部分学生难于理解、掌握、运用的部分,有来自教材的难点,也有来自学生的难点。听课时就要听指导教师是怎样纵横联系学生已有知识举例说明,化难为易,突破难点,突出重点的。板书及教学媒体运用。一般说来,板书要详略得当,重点突出,能起到提纲挈领的作用;层次分明、脉络清晰;增强直观效果,同时也有利于引导学生由形象思维向抽象思维过渡。
(四)提高板书的利用率。板书具有训练学生的随意注意的主动性,便于课堂小结和课后复习等功能。教学媒体是对教学起辅助作用的恰当运用媒体,不仅能调动学生的学习兴趣,增大课堂教学信息的容量,更重要的是有助于提高学生的接受能力。 总之,大家一致认为,只有自己本身的教学素质与层次提高了,学生才能提高, 只有这样才能达到课堂的教学目标和效果。
通过对以上问题的归纳总结,我提出以下几点整改措施。
(一)为推动教师教学技能和水平上台阶,教研室教师应该利用每周固定时间,坐在一起静下心来,相互指出了授课上的优点和缺点,主要探讨授课过程中的教师的怎样教。
(二)课程组教师应认真讨论和细化本门课程的整体教学设计和单元教学设计。
(三)形成良好的相互监督机制,采取学院之间听课、课程组之间听课、学院内部听课等多种听课形式。
听课人:
2014年4月15日
本学期按照学院督导处和系部教师听课的具体要求,从2015年9月至2015年12月,共听课8人次,完成了听课计划。通过听教师公开课和随机听课使我受到了很多启发,也认识到自己教学中的不足,在教研活动中进行听课总结和交流,通过反思不断提高自己,取人之长,补己之短。以下是我结合本学期的听课活动,谈一谈自己的心得体会。
一、备课的精心和设计的新颖给了我很大的启发
上好课的前提是做好课前准备,上课时认真讲课,运用多种教学方法,从学生的实际出发,注意调动学生学习的积极性和创造性思维,培养学生的学习兴趣。听完潘老师课和盖老师的课,给我的启发式这两位老师的教态自然、语言准确、简明。课堂结构中各环节完整、合理,时间安排恰当;课堂教学组织严密、紧凑,过渡自然;课堂上注意学生的学习纪律和信息反馈,师生双边活动良好,课堂气氛活跃。
二、注重学生的主体地位,注重让学生成为课堂的主人。 在听刘老师的课和张老师的课后,我的收获是注重学生的主体地位,注重让学生成为课堂的主人,不断地引导学生互动,参与到课堂教学中来,很值得学习。激发学生兴趣,注重学法指导及培养学生学会学习的能力。
三、注重理论联系实际,反复强调重点。 听高老师和张老师的课,给我的启发式教学目标、要求明确、具体,符合学生实际:课堂教学围绕目标进行。知识重、难点确定及讲解恰当,重点突出,难点突破;教学内容份量安排适当。
四、丰富的专业背景知识是最大的魅力。
听王老师的课,我的收获是丰富的专业背景知识是最大的魅力。从王老师的上课过程中不难发现其实他的专业背景和基本功是相当扎实的。课的内容安排上来讲,王老师对相关知识的研究其实是比较深的,更能够理论联系实际。
通过听课我不仅学到了很多新的教学理念,还认识到教师要以自己的学术造诣和优秀品格赢得学生热爱,我将不断地提升自身的素质,不断地向有经验的老师学习,博采众长,充分利用一切学习机会,多对比,多反思,提高自己驾驭课堂教学的能力。
推荐阅读:
听课总结04-06
领导听课总结03-26
自主听课总结04-10
学院听课活动总结09-10
听课总结(精选2篇)04-16
家长听课总结(精选6篇)03-26
听课见习总结(精选6篇)03-27
听课活动总结(通用6篇)03-27
听课教研总结(精选6篇)03-27
听课记录总结(精选6篇)03-27