中国投资网 百科 路由器网络中数据包传输分析

路由器网络中数据包传输分析

本文介绍了路由器中数据包如何传输和交换的基本知识。只要明白这一点,对你配置一个好的网络环境会有很大的帮助。

首先,输入的问题

1.最初的windows套接字可以接收任何TCP或UDP消息。

2.为了接收原来的windows sockets,要接收的第一个包必须有完整正确的IP头,否则无法通过ip_rcv()中的头检查、检验和验证。

3.在原始windows套接字接收数据包的过程中,内核会检查和验证接收到的IP数据包,但不会检测和验证IP数据包之后的任何字段。比如我们创建原来的windows sockets时,指定的协议参数是IPPROTO_TCP,内核不会进行TCP校验和验证。取而代之的是,我们会直接复制所有IP头中带有TCP协议字段的数据包,提交给原来的windows sockets。

4.用原来的windows套接字接收到的TCP包都是IP重组后TCP排序前的包。

5.如果创建原始windows套接字时指定的协议参数不为零(套接字的第三个参数),则接收到的数据报的协议字段应该与之匹配。否则,数据报不会传输到windows套接字。

6.如果本地IP地址被绑定到原始的windows套接字,则接收到的数据报的目的IP地址应该与绑定的IP地址相匹配,否则数据分组将不会被传递到windows套接字。

7.如果原始windows sockets通过connect指定了另一方的IP地址,则接收到的数据包的源IP地址应该与原始地址相匹配,否则,该数据包将不会传输到windows sockets。

8.如果使用协议参数0创建原始windows套接字,并且未调用connect或bind,则windows套接字将接收内核传递给原始windows套接字的每个原始数据报的副本。

9.原有的windows sockets无法接收任何ARP或RARP协议类型的windows sockets,因为net_rx_action()会将ARP或RARP协议类型的数据包传递给ARP的接收函数类进行处理,而不会传递给ip层的接收函数ip_rcv()。

10.原来的windows套接字不能接收任何ICMP类型的数据包,因为有些ICMP类型的数据包在传送到原来的windows套接字之前已经被系统响应,不再传送到上层。

11.如果对方的数据包是碎片化的,那么重组后的原始IP包将被接收,因为原始的windows sockets是在IP上层接收的。

第二,输出的问题

1.普通输出通常是通过发送到或sendmsg并指定目的IP地址来完成的。如果连接了windows sockets,还可以调用write、writev或send。

2.如果没有设置IP_HDRINCL选项,内核写入数据的起始地址就是IP头之后的第一个字节。因为在这种情况下,内核会构造IP头并在来自进程的数据之前安装它。将内核IPv4头的协议字段设置为调用socket函数时用户给定的第三个参数。

3.如果设置了IP_HDRINCL选项,内核写入数据的实际地址就是IP头的第一个字节。用户提供的数据必须包括IP报头。此时,进程构建整个IP头,除了以下两项:IPv4标志字段可以设置为0,需要内核设置该值。并且只有当该字段为0时,内核才设置它,并且内核计算并存储IPv4报头校验和。

4.如果在创建最初的windows sockets时指定了协议类型,即第三个参数协议,并不意味着只能发送这种类型的数据包。例如,即使协议指定为IPPROTO_TCP,也可以发送用户组装的UDP消息。但是如果此时没有设置IP_HDRINCL选项,内核会在IP头的protocol字段中指明后面的消息是TCP消息(但此时是UDP消息)。

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

5.如前所述,在任何时候,IP头的校验和都是由内核设置的。

6.内核在任何时候都不会检查和验证IP包后面的字段。例如,即使我们将第三个参数协议指定为IPPROTO_TCP,在发送数据时,内核也不会计算和验证TCP校验和。

7.如果设置了IP_HDRINCL选项,作为一个规则,我们应该设置自己的IP头,但即使我们没有设置IP头,用sendto或sendmsg发送数据并指定目的IP地址仍然可以完成。然而,这样的包不能被目标机器上的原始windows套接字接收。因为在ip_rcv()中需要对IP头进行验证,需要对校验和进行分析,所以数据包会被丢弃,但应该会在链路层被接收到。

8.如果设置了IP_HDRINCL选项,并且数据包太长,则数据将被丢弃,并返回错误代码EMSGSIZE。如果未设置IP_HDRINCL选项,并且数据包太长,数据包将被分段。

由于数据包具有上述结构,安装了TCP/IP协议的计算机可以相互通信。当使用基于TCP/IP协议的网络时,数据包实际上是在网络中传输的。

本文来自网络,不代表本站立场,转载请注明出处:https://www.news9.com.cn/n/a11720.html

路由器网络中数据包传输分析

中国投资网后续将为您提供丰富、全面的关于路由器网络中数据包传输分析内容,让您第一时间了解到关于路由器网络中数据包传输分析的热门信息。小编将持续从百度新闻、搜狗百科、微博热搜、知乎热门问答以及部分合作站点渠道收集和补充完善信息。