欢迎登陆真网站,您的到来是我们的荣幸。 登陆 注册 忘记密码? ☆设为首页 △加入收藏
欢迎加入真幸福QQ群
电脑知识: 基础知识 网络技术 操作系统 办公软件 电脑维修 电脑安全 windows7 windows8 windows10 服务器教程 平板电脑 视频播放教程 网络应用 互联网 工具软件 浏览器教程 QQ技巧 输入法教程 影视制作 YY教程 wps教程 word教程 Excel教程 PowerPoint
云南西双版纳特产小花糯玉米真空包装


POS链路不能打开的解决办法
开好网络视频会议的技巧
Windows Server 2012 Server Core中安装活动目录
如何将AD 2012林和域级别降级
无线路由防蹭网办法
路由器QOS功能原理和工作方式
无线网络如何设置才能更安全
如何查看mac地址
iisapp命令不能使用的解决方法
如何解决思科路由协议冲突?
数据是如何在路由器中通过的
【 来源:网络 】【 点击:1 】 【 发布时间:2017_03_03 08:59:59 】

  对于一般人而言只要能使用路由器上网就可以了,但对于一个合格的网管来说,是必须要知道路由器的工作过程的,尤其是要知道数据是如何在路由器中通过的。

  一、当数据经过路由器时,在原始套接口上可调用connect函数, connect函数仅设置目的地址。再重申一遍:端口号对原始套接口而言没有意义。对于输出而言,调用connect之后,由于目的地址已经指定,我们可以调用write或send,而不是sendto了。

  二、普通输出通常通过sendto或sendmsg并指定目的IP地址来完成,如果套接口已经连接,也可以调用write、writev或send,如果IP_HDRINCL选项未设置,则内核写的数据起始地址是IP头部之后的第一个字节。

  因为这种情况下,内核将构造IP头部,并将它安在来自进程数据之前。内核将IPv4头部的协议字段设置成用户在调用socket函数时所给的第三个参数。

  三、如果IP_HDRINCL选项已设置,则内核写的数据其实地址是IP头部的第一个字节。用户所提供的数据必须包括IP头部。此时进程构造除了以下两项以外的整个IP头部,IPv4标示字段可以设为0,要求内核设置该值。而且仅当该字段为0时,内核才为其设置和IPv4头部校验和由内核来计算和存储。

  四、如果创建原始套接口时指定了协议类型,即第三个参数protocol,那也并不是说只能发该类型的数据包。如,即使将protocol指定为IPPROTO_TCP,也可以发送用户自己组装的UDP报文,不过此时如果IP_HDRINCL选项未设置,那么内核将会在IP头的协议字段指明后面的报文为TCP报文(不过此时却为UDP报文)。

  等数据包发送到对方TCP层,一般说来会因为找不到合适的TCP套接口接收该数据包而被丢弃。不过该包可以在目标主机的原始套接口上接收到。

  五、如果IP_HDRINCL选项已设置,按照常规,应该组建自己的IP头,但是即使我们没有组建IP头,用sendto或sendmsg并指定目的IP地址来发送数据是照样可以完成的。但是这样的数据包在目标机上用原始套接口是接收不到的,因为在ip_rcv()中要对IP头进行验证,并且要分析校验和,所以该包会被丢弃,不过在链路层应该能够接收到该数据包。

  六、如果设置了IP_HDRINCL选项,并且数据包超长,那么数据会被丢弃,并会返回出错码EMSGSIZE。如果未设置IP_HDRINCL选项,并且数据包超长,那么数据包会被分片,要想接收到原始套接口,首先要接收的数据包必须有一个完整的、正确的IP头,否则不能通过ip_rcv()中的包头检查和检验和验证。

  七、在原始套接口接收的数据包过程中,内核会对接收的IP包进行校验和验证,但不会对IP包以后的任何字段进行检测和验证。如,我们创建原始套接口时,所指定的protocol参数为IPPROTO_TCP,内核也不会进行TCP校验和验证,而是直接把IP头中协议字段为TCP的所有数据包都复制一份,提交给该原始套接口。

  八、用原始套接口接收到的TCP包都是进行了IP重组以后,TCP排序以前的报文。如果在创建原始套接口时,所指定的protocol参数不为零,(socket的第三个参数),则接收到的数据报的协议字段应该与之匹配。

  否则该数据报不传递给该套接口。如果此原始套接口上绑定了一个本地IP地址,那么接收到的数据报的目的IP地址应该与该绑定的IP地址相匹配,否则该数据包将不传递到该套接口。

  如果此原始套接口通过connect指定了一个对方IP地址,那么接收到的数据包的源IP地址应与该以连接地址相匹配,否则该数据包不传递给该套接口。

  原始套接口接收不到任何的ARP或RARP协议类型的套接口,因为net_rx_action()会把ARP或RARP协议类型的数据包传递给ARP的接收函数类处理,不会传递给IP层的接收函数ip_rcv(),因为有些ICMP类型的数据包在传递给原始套接口之前已经被系统所响应,并不再向上层传递。

本网站由川南居提供技术支持,fkzxf版权所有 浙ICP备12031891号