[MID project] Daily Report from gary
1.熟悉g-bios现有tcp/ip协议栈架构及socket.c.
2.熟悉socket接口,准备明日在PC机上实现tftp client.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
1.熟悉g-bios现有tcp/ip协议栈架构及socket.c.
2.熟悉socket接口,准备明日在PC机上实现tftp client.
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
2010.3.8日完成任务:
一.分析tftp协议工作模式:
1,简单文件传输协议(tftp)数据报分4种模式,read requst/write requst(RRQ/WRQ), data, ack, error,数据长度小于等于512byte
2,操作码不同决定其数据包格式区别,1/2(RRQ/WRQ), 3(data), 4(ack), 5(error)
3,操作码为1/2时操作码后跟文件名和格式,都以0结尾
4,data报文时操作码后跟block编号,从1开始,依次递增。
5,ACK回应与收到data报文block相同。
6,注意写请求时需收到服务器端的block编号为0的ACK相应后发送block编号为1的data报文。
二.tftp client:
1,PC机上调用socket API实现tftp client端。使用了socket(),close(),sendto(),recvfrom()函数,struct sockaddr_in结构体。并对其参数和成员
进行了分析。实现make_tftp_pck()函数实现了tftp RRQ, ACK包的封装。
2,实现tftp_client下载文件的基本功能。
3,出错处理,其他功能完善和代码优化还未完成。
4,编写代码时注意PC机和数据报中的大小端转换。
三.明日计划完成任务:
1.完整认真分析g-bios中所有网络部分代码,包括tcp/ip协议栈,socket.c, net.
2.仔细分析udp socket 部分API和在g-bios中如何改进与实现,并尝试之。
今日进展不大,主要分析了g-bios协议栈架构,socket API与标准POSIX socket API的区别。发现两者相差很大,socket, sockbuff, sockaddr结构体,socket API与标准都有不同程度的区别。需改动处较多,不过还未定下具体的方案。需努力!!!
罪过,昨日竟然忘了写daily report,今日我得补上。。。
昨日:
一,删除了socket.c中send和secv函数并增加了sendto和recvfrom函数,接口与POSIX socket API相同。API虽然相同但有些参数并未用上,如sockaddr,考虑到g-bios现有的地址传递方法对于g-bios显得更加合理,所以sockaddr位置未作更改。
二,tftp.c中增加了make_tftp_pkt()函数,原先g-bios tftp包头组包使用了tftp_make_rrq()和tftp_send_ack()两个函数,讨论认为tftp包头使用一个函数组织即可,根据传递参数不同组织相应的RRQ,WRQ,ACK,DAT包头。
今日:
一,增加struct port_info结构体描述一个正在被使用的端口以及该端口的收发sockbuff队列。g_port_list表头连接正在使用端口port_info链表。sock通过端口和类型匹配port_info已完成sockbuff收发队列的数据读取。这样就实现了一个类型的端口一个收发队列的设计思想。
二,get_pot()和search_port()函数实现了socket源端口的自动分配和指定端口分配。设计思想是随即分配(随即算法有些草率)或指定端口后遍历g_port_list链表查看正在使用的端口和类型,以确定是否有合适端口分配并返回空闲端口号。
三,讨论了好几天今日总结了一下这几天讨论过程中发现并准备更改的内容, 如下:
1,sendto() and recvfrom() API 修改(已完成)
2,tftp.c make_tftp_pkt() API 修改(已完成)
3,ICMP协议修改 ping_request()修改(未完成)
4,stram,dgram,raw的详细讨论(未完成)
5,get_port()的实现(已完成)
6,多网卡情况下收发数据的net_dev匹配,ip地址与MAC地址如何匹配保存,对于多网卡的ifconfig命令的修改(未完成)
7,arp_table的修改(未完成)
8,每个端口对应一个sockbuff收发队列(已完成)
9,网络层收包的IP地址匹配(未完成)
10,数据帧的MAC地址匹配(驱动层做可选项,未完成)
11,sockbuff中去掉struct socket成员(可选,未完成)
四,以上内容完成项目均已用git生成patch,以后开发都在打过以上patch的基础上进行。
五,考虑到tcp协议是开发的重点,明日准备着手完成tcp协议的实现,以上未完成的项目大部分都是小点,准备在开发时的空闲时间更改。
DONE:
1,讨论发现sockaddr结构体和port链表还是存在不合理之处,由于现在TCP是重点,先着手完成TCP实现。这两处更改准备等TCP成型后再着手更改。
2,继续了解TCP协议(通过文档和抓包工具)的工作过程中的细节问题。
3,调试TCP三次握手过程的代码。
TODO:
1,继续调试三次握手的代码,如顺利可尝试完成关闭连接过程。
2,继续讨论一个合理的架构来完成TCP的建立连接,数据传输,关闭连接过程的管理。
DONE:
1,思考TCP协议架构问题。
2,解决发送TCP数据报时checksum错误问题。
TODO:
1,继续完成TCP三次握手及断开链接。
DONE:
1,初步完成TCP三次握手过程
2,思考关闭链接的实现和协议栈的架构问题。
TODO:
1,继续完善三次握手的被动链接,包括listen()函数和监听队列的实现。
2,关闭链接的四个过程的实现。
3,如以上两点完成,考虑如何实现交互式数据流的收发。