替代第十一章原始套接字-DOS攻击-FTP等.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
替代第十一章原始套接字-DOS攻击-FTP等

6.2.1 TCP协议功能分析 1 进入内核态 使用BSD Socket编写网络应用程序时,使用的是BSD Socket标准的函数。 Linux系统下,应用程序进程和系统内核进程是在不同的状态下运行的。 使用访管中断调用系统内核功能函数,使用户态的进程进入管态,访问内核资源 网络功能调用,调用函数sys_socketcall()进行套接字功能调用。 asmlinkagelong sys_socketcall(intcall,unsignedlong*args) 参数call:调用的Socket功能号(宏),args:其参数表 2 查找socket对象 BSD函数中的大多数(除了sys socket()),第一个参数是一个文件句柄(filehandle),这些函数需要做的第一个操作就是查找相应的套接字对象。 查找socket对象的操作是调用sockfd_lookup()完成的,它先找到文件句柄对应的文件对象(file),然后取出文件对象对应的节点(inode),如果该节点是一个套接字节点,就找出对应的socket对象。如果上述操作中的任何一步失败,返回错误信息。 sys socket()函数的功能是创建一个套接字,因此该函数会先调用sk_alloc()函数创建一个空的socket对象 3 将用户数据存放到内核空间 某些BSDSocket函数(例如send(),connect())的入口参数中有一个或者多个指针,用来存放地址、参数或缓冲区。 这段内存是由应用程序分配使用的,属于用户内存空间,内核可能在函数返回后还需要使用这些数据(如在非阻塞操作情况下),但那时应用程序可能已经将内存释放或者修改其内容,这样就会引起错误。 为了防止错误发生,需要将这段内存的内容复制到内核内存中。 connect/recvfrom/send/sendto/,但setsockopt除外 4 调用内核BSD Socket函数 调用找到的socket对象的对应功能函数 proto ops结构类型的成员变量ops,该结构实际上是一个函数指针集,指向与协议族对应的功能函数集。 5 检查操作的合法性 socket对象的内容较为简单,只是用指针指向文件对象、节点对象和sock对象; 网络功能主要是由sock对象实现的,通过socket对象的sock对象指针可以直接访问对应的sock对象。 在调用sock对象的操作之前,还需要对操作的合法性进行验证 (1)地址参数长度小于sockaddr in结构的长度,这是一个无效的地址参数。 (2)套接字状态不匹配。例如,未连接时要发送或接收数据,已连接时要监听(listen),等等。 6 调用sock对象操作 socket结构中的ops-INETSocket层的函数集 sock 结构中的prot-更底层、更具体操作的函数集 6.2.2 TCP状态 一、概 述 网络通信中,一个健壮的套接字应用程序必须能够处理网络中可能出现的各种状态,必须对TCP的有限状态机有所了解。 二、有限状态机 TCP从建立到终止整个过程中,存在11中状态,TCP的有限状态机给出了TCP连接从一个状态转换到另一个状态的规则。 TCP的有限状体机 TCP的有限状态机 三、状态的查看 调试C/S(客户/服务器)网络应用程序的操作系统命令netstat,可以列出连接的状态名(11种状态之一)。 作 业 当使用浏览器访问某一Web站点时,请通过操作系统命令netstat,针对不同时刻查看当前的连接状况并进行分析。 6.2.3 TCP通信模型 略 一般情况下,监听套接字一般运行于父进程中,不断接受连接,一旦获得了连接,就会创建一个子进程,让创建的通信套接字在子进程中完成与客户机之间的通信 6.2.4 连接的建立和撤销 sys_socket sys_bind略 sys_listen略 sys_connect略 sys_accept略 sys_shutdown略 (1)TCP CLOSE:套接字已经关闭或者还没有任何操作,这时只需释放sk对象。 (2)TCP LISTEN:套接字正在监听,则调用tcp listen stop()停止监听,释放sk对象及其所有缓冲区。 (3)TCP_SYN_SEND:套接字正在连接服务器,发送了连接请求(第一次握手)还没有回应(第二次握手),只需释放sk对象及其所有缓冲区就行了。 (4)其他状态:这里包括 TCP_SYN_RECV,TCP _ESTABLISHED 等。TCPSYN_RECV状态指服务器收到连接请求(第一次握手),已经发送了回应(第二次握手),正等待回应的回应(第三次握手)以建立连接的状态。ESTABLISHED状态是指已连接状态。 对于这些状态,需要调用tcp_se

文档评论(0)

qwd513620855 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档