UP
解决方案 »
- 请问if(strVersion == _T("itc") || strVersion == _T("ITC"))有简洁写法吗?
- IOCP完成端口多线程程序偶然灭火问题的思考
- [求解]Win Socket TCP传输,接收端数据包丢失
- 关于VC调用WMI的问题
- 如何才能让文件分批保存在文件中?
- 刚刚切了项有建的卵蛋,请大家观摩!并庆祝这个轮子终于没有睾丸了!!!
- 【我做了个 windows 服务程序,是自动启动,要依赖SQLSrver,在服务中能正常起、停,但开机时总出现连接超时问题(30000毫秒问题)?】
- 如果要在ListCtrl中当鼠标移动到第2列的时候改变鼠标的形状,该怎么做?
- 在线请教,用AfxBeginThread创建线程时,第一个参数的函数如果是自已写的类的成员函数应该怎么办呢?
- ★★工程不能建立“.bsc”文件怎么办?★★
- 在VC++中“::“指的是什么意思。
- 求flashget的源程序,分数随你要!
一个网信息包从网线进入你的网卡,
网卡引发中断,
调用网卡驱动,
网卡驱动发给系统,
系统收到了,
看看是什么类型的包(什么AF_INET,AF_UNIX...)
给相应的处理程序,
如果是IP头则给IP协议相关处理部分,
IP处理部分再看这个是TCP头或者UDP头或者是ICMP头,再传递相应的处理部分,
TCP、UDP处理部分看看有哪个套接字的地址和端口号跟这个包相同,如果是的话,传送给相应的套接字数据结构。
套接字是一个大的数据结构,我一般称之为一个数组序号,
在LINUX中是INODE(文件系统)的一种(但是ACCEPT所生成的套接字结构比较简单)
你调用函数生成了一个套接字,这个意思就是系统帮你生成了一个数据结构,
你要是BIND的话,系统会将你的IP地址和端口号填入数据结构的一部分,然后将套接字状态(其实也是一个BYTE定义的)设定为监听状态。
有人可能问,机器套接字很多的时候,是怎么样读取的,-->一般采用的是哈系表。
套接字的数据结构中还会有个指针指向你的接受缓冲区,我们一般调用read就是直接读的那个缓冲区里面的东西。
而SEND一般是直接发到硬件驱动的缓冲区了。
WINDOWS的SOCKET没有原代码,采用的方法是分层结构,不过内部实现估计都差不多,区别应该在于协议是可以动态添加的,在LINUX里面是由一个个的函数决定的,在WINDOWS里面可以以SPI的开工提供一个文件来实现。
比如说,我本来只支持TCPIP的,现在我只要加个文件,就可以实现IPXSPX了。请高手们指点吧,我比较罗索了一点
ip_forward转发route
..........
http://www.codeproject.com/internet/
到这里面找找看,很多高手在这边的。