网络编程_第9讲 原始套接字编程.ppt

网络编程_第9讲 原始套接字编程.ppt

ID:48349882

大小:263.00 KB

页数:13页

时间:2020-01-18

网络编程_第9讲 原始套接字编程.ppt_第1页
网络编程_第9讲 原始套接字编程.ppt_第2页
网络编程_第9讲 原始套接字编程.ppt_第3页
网络编程_第9讲 原始套接字编程.ppt_第4页
网络编程_第9讲 原始套接字编程.ppt_第5页
资源描述:

《网络编程_第9讲 原始套接字编程.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第9讲原始套接字编程通常情况下程序设计人员接触的网络知识限于如下两类:流式套接字(SOCK_STREAM),它是一种面向连接的套接字,对应于TCP应用程序。数据报套接字(SOCK_DGRAM),它是一种无连接的套接字,对应于的UDP应用程序。除了以上两种基本的套接字外还有一类原始套接字,它是一种对原始网络报文进行处理的套接字。9.1概述前面几章介绍了基础的套接字知识,流式套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM)涵盖了一般应用层次的TCP/IP应用。9.2原始套接字的创建原始

2、套接字的创建使用与通用的套接字创建的方法是一致的,只是在套接字类型的选项上使用的是另一个SOCK_RAW。在使用socket函数进行函数创建完毕的时候,还要进行套接字数据中格式类型的指定,设置从套接字中可以接收到的网络数据格式。9.2.1SOCK_RAW选项创建原始套接字使用函数socket,第二个参数设置为SOCK_RAW,函数socket()可以创建一个原始套接字。下面的代码,创建一个AF_INET协议族中的原始套接字,协议类型为protocol。intrawsock=socket(AF_INET,

3、SOCK_RAW,protocol);9.2.2IP_HDRINCL套接字选项使用套接字选项IP_HDRINCL设置套接字,在之后进行的接收和发送的时候,接收到的数据包含IP数据的,包含IP的头部。用户之后需要对IP层相关的数据段进行处理,例如IP头部数据的设置和分析,校验和的计算等。设置方法如下:intset=1;if(setsockopt(rawsock,IPPROTO_IP,IP_HDRINCL,&set,sizeof(set))<0){}9.2.3不需要bind()函数原始套接字不需要使用bin

4、d()函数,因为进行发送和接收数据的时候可以指定要发送和接收的目的地址的IP。例如使用函数sendto()和函数recvfrom()来发送和接收数据,sendto()和recvfrom()函数分别需要指定IP地址。sendto(rawsock,data,datasize,0,(structsockaddr*)&to,sizeof(to));recvfrom(rawsock,data,size,0,(structsockaddr)&from,&len);当系统对socket进行了绑定的时候,发送和接收的函

5、数可以使用send()和recv()及read()和write()等不需要指定目的地址的函数。9.3原始套接字发送报文原始套接字发送报文有如下的原则:通常情况下可以使用sendto()函数并指定发送目的地址发送数据,当已经bind()了目标地址的时候可以使用write()或者send()发送数据。如果使用setsockopt()设置了选项IP_RINCL,则发送的数据缓冲区指向IP头部第一个字节的头部,用户发送的数据包含IP头部之后的所有数据,需要用户自己填写IP头部和计算校验和及所包含数据的处理和计算

6、。如果没有设置IP_RINCL,则发送缓冲区指向IP头部后面数据区域的第一个字节,不需要用户填写IP头部,IP头部的填写工作有内核进行,内核还进行校验和的计算。9.4原始套接字接收报文接收报文还有自己的一些特点,主要有如下几个:对于ICMP的协议,绝大部分数据可以通过原始套接字获得,例如回显请求、响应,时间戳请求等。接收的UDP和TCP协议的数据不会传给任何原始套接字接口,这些协议的数据需要通过数据链路层获得。如果IP以分片形式到达,则所有分片都已经接收到并重组后才传给原始套接字。内核不能识别的协议、格

7、式等传给原始套接字,因此,可以使用原始套接字定义用户自己的协议格式。9.5原始套接字报文处理时的结构本节介绍进行报文处理时常用的数据结构,包含IP头部、ICMP头部、UDP头部、TCP头部。使用这些数据格式对原始套接字进行处理,可以从底层获取高层的网络数据。9.5.1IP头部的结构9.5.2ICMP头部结构ICMP的头部结构比较复杂,主要包含消息类型icmp_type,消息代码icmp_code、校验和icmp_cksum等,不同的ICMP类型其他部分有不同的实现。1.ICMP的头部结构2.不同类型的I

8、CMP请求9.5.3UDP头部结构9.5.4TCP头部结构TCP的头部结构主要包含发送端的源端口、接收端的目的端口、数据的序列号、上一个数据的确认号、滑动窗口大小、数据的校验和、紧急数据的偏移指针以及一些控制位等信息。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。