网络协议栈
文章平均质量分 89
Robin.Yin
一只勤勉的小虫,如痴如醉地沉迷于书卷,孜孜不倦地咀嚼着文字-书虫
展开
-
TCP流程图
原创 2019-12-12 13:17:22 · 790 阅读 · 0 评论 -
进程名和IP地址映射
可以用指令:netstat -apnt Active Internet connections (established and server...原创 2020-03-05 16:35:27 · 280 阅读 · 0 评论 -
IP重组实现分析
IP重组过程包括分片重组,重组超时处理,垃圾回收,这里主要分析分片重组过程#define FRAG_CB(skb) ((struct ipfrag_skb_cb*)((skb)->cb))Skb中的cb成员是skb中保存碎片控制信息,结构如下:struct ipfrag_skb_cb{ struct inet_skb_parm h; ...原创 2019-01-08 17:46:03 · 956 阅读 · 0 评论 -
IP分片实现分析
数据包的分片与重组发生在IP层, 当IP数据包的长度超过PMTU,并且允许IP分片时,就会进行分片操作,分片后的数据包有独立的IP报头,并且独立路由,在接收端的IP层进行重组. 目前有两种分片处理方式,快速分片和慢速分片.分片工作 层在处理分片时,把TCP/UPD的负载分割成MTU大小的片段,并且为每个片段设置IP报头,更新IP报头offset和检验和,如果是慢速分片,还需要进行数据的拷贝(...原创 2019-01-08 17:45:54 · 1249 阅读 · 0 评论 -
ip_append_data分析
1、基本原理 UDP发包流程中,当没有cork的情况下,会走过udp_sendmsg到达ip_append_data,该接口是IP层提供的UDP和RAW Socket的发包接口,同时,TCP中用于发送ACK和RST报文的接口ip_send_reply最终也会调用此接口 该接口的主要作用是:将数据拷贝到适合的skb(利用发送队列中现有的或新创建)中,可能有两种情况: 1)放入sk...原创 2018-03-02 11:23:38 · 905 阅读 · 0 评论 -
多播地址
以太网最高字节的最低位为1,广播全为1 224.0.0.0—239.255.255,255224.0.0.0代表组地址,用在IGMP查询报文中,2 2 4 . 0 . 0 . 1代表“该子网内的所有系统组”用在IGMP的查询报文,2 2 4 . 0 . 0 . 2代表“该子网内的所有路由器组” 。多播地址2 2 4 . 0 . 1 . 1用作网络时间协议N T P,2 2 4 . ...原创 2019-01-08 17:45:27 · 2992 阅读 · 0 评论 -
Linux 网络流量控制
1流量控制UP状态时, 会调用dev_activate设置设备流量控制函数void dev_activate(struct net_device *dev){if (dev->qdisc == &noop_qdisc) /*为每个发送队列设置默认的流量控制接口 */ 激活每个队列流量控制 */netdev_for_each_tx_queue(dev, tr...原创 2019-01-08 17:45:12 · 878 阅读 · 0 评论 -
Linux网络数据接收过程分析
在Linux内核中,当网卡驱动接收到数据时,会调用netif_rx_ni函数传递数据到IP层,主要把数据包链接到input_pkt_queue队列,并启动一次软中断函数int netif_rx_ni(struct sk_buff *skb){ int err; preempt_disable(); err = netif_rx...原创 2019-01-08 17:44:57 · 2428 阅读 · 0 评论 -
Linux网络发送过程分析
这里主要分析TCP/IP 数据发送过程,1 数据发送 用户一般从udp和tcp socket发送数据,经过路由和邻居系统后,最终调用到dev_queue_xmit函数来发送数据.1.1 dev_queue_xmit函数int dev_queue_xmit(struct sk_buff *skb){ struct net_device *dev = skb-&...原创 2019-01-08 17:44:45 · 581 阅读 · 0 评论 -
链接状态改变(linkwatch)
在Linux 网络协议栈中linkwatch模块用来通知网卡当前是否能够进行数据传输.驱动中调用netif_carrier_on/netif_carrier_off函数来通知网络状态变化.主要作用:启动/禁止 TX队列的流量控制功能 发起netlink消息NETDEV_CHANGE到用户空间 void netif_carrier_on(struct net_device *de...原创 2019-01-08 17:44:24 · 1593 阅读 · 0 评论 -
广播地址
TCP/IP协议中,一共有四种广播地址IP地址,可以编码为三段 网络号 + 子网号 +主机号要理解广播地址,需要先理解子网号和主机号给定一个IP地址,怎么计算出子网号和主机号了例如 IP地址 :192.168.8.100,子网掩码为255.255.255.240 这是一个C类地址,默认掩码为255.255.255.0 240的二进制为1111 0000,那么子网号占4 bit,主...原创 2019-01-08 17:46:13 · 5118 阅读 · 0 评论 -
Linux 邻居子系统介绍
一 Linux网络邻居子系统简介1.1邻居子系统MAC地址唯一标识一台主机,当系统要发送数据到其他主机时,必须事先知道它的MAC地址, 并且上层应用协议并不关心MAC地址,然而在数据链接层,必须要获取发送方和接收方的MAC地址,这样数据才能正确到达接收方。邻居子系统的作用就是把IP地址转换成对应的MAC地址. 如果目的主机不是和发送发位于同一局域网时,解析的MAC地址就是下一跳网关地...原创 2019-01-08 17:46:39 · 2425 阅读 · 0 评论 -
ICMP网络控制报文协议
ICMP报文主要用于在网络系统中传递控制信息,如网络不可达,回显(ping),时间请求,掩码请求等。ICMP报文被IP层或者更高层(TCP/UDP)使用,一些用户进程也可以监听ICMP报文.ICMP报文格式 8位类型码(type),8位代码(code),type决定大的分类,code进一步细分ICMP报文种类,协议规定,ICMP数据部分必须包含出错协议数据包的IP报头+8Byte....原创 2019-01-08 17:46:51 · 602 阅读 · 0 评论 -
深入理解linux网络内幕--API总结
1. unsigned char *skb_put(struct sk_buff *skb, unsigned int len) 添加数据到sk_buff的尾部(tail) 2.unsigned char *skb_push(struct sk_buff *skb, unsigned int len) 添加数据到sk_buff的头部, 3. unsigned char原创 2014-11-09 10:37:35 · 780 阅读 · 0 评论 -
深入理解linux网络内幕---专业词汇
第一章网络工具实用网址以太网的MTU为1500Bye第四章:4linux网络常见通知链如下:inet6addr_chain:发送有关本地接口ipv6地址的插入,删除,变更消息netlink_chain:netlink相关消息inetaddr_chain:发原创 2014-11-09 10:41:54 · 535 阅读 · 0 评论 -
TCP的ACK确认系列 — 发送状态转换机
概述 TCP采用两种方式来发送ACK:快速确认和延迟确认。在快速确认模式中,本端接收到数据包后,会立即发送ACK给对端。在延迟确认模式中,本端接收到数据包后,不会立即发送ACK给对端,而是等待一段时间,如果在此期间:1. 本端有数据包要发送给对端。就在发送数据包的时候捎带上此ACK,如此一来就节省了一个报文。2. 本端没有数据包要发送给对端。延迟确认转载 2016-11-12 17:11:52 · 1188 阅读 · 0 评论 -
TCP的定时器系列 — 零窗口探测定时器
出现以下情况时,TCP接收方的接收缓冲区将被塞满数据:发送方的发送速度大于接收方的接收速度。接收方的应用程序未能及时从接收缓冲区中读取数据。 当接收方的接收缓冲区满了以后,会把响应报文中的通告窗口字段置为0,从而阻止发送方的继续发送,这就是TCP的流控制。当接收方的应用程序读取了接收缓冲区中的数据以后,接收方会发送一个ACK,通过通告窗口字段告诉发送转载 2016-11-15 16:51:36 · 3037 阅读 · 0 评论 -
TCP的定时器系列 — 保活定时器
HTTP有Keepalive功能,TCP也有Keepalive功能,虽然都叫Keepalive,但是它们的目的却是不一样的。为了说明这一点,先来看下长连接和短连接的定义。 连接的“长短”是什么?短连接:建立一条连接,传输一个请求,马上关闭连接。长连接:建立一条连接,传输一个请求,过会儿,又传输若干个请求,最后再关闭连接。长连接的好处是显而易见的,多个转载 2016-11-15 17:36:55 · 901 阅读 · 0 评论 -
TCP的ACK确认系列 — 快速确认
快速确认模式 (1) 进入快速确认模式设置快速确认模式标志,设置在快速确认模式中可以发送的ACK数量。[java] view plain copy static void tcp_enter_quickack_mode (struct sock *sk) { struct inet_connection_s转载 2016-11-15 19:24:47 · 1855 阅读 · 0 评论 -
UDP 端口和传输控制块管理
UDP提供了无连接通信,且不对传送数据包进行可靠性保证,不用对数据进行超时重传,也不用对数据进行应答(ACK),适合于一次传输少量数据,UDP传输的可靠性由应用层负责. 这里主要分析UDP 传输控制块(sock)的管理, port获取, udp查找传输控制块. 1. UDP sock管理sock在内核中表示了通信双方的所有信息,接收和发送数据,都要找到对应的sock, 为了加快查找速度...原创 2019-01-08 17:47:31 · 1189 阅读 · 0 评论 -
TCP ACK 方式
TCP 有两种确认方式,Delay ACK和quick ACKQuick ACK,本端接收到数据包后,会立即发送ACK给对端。Dealy ACK ,本端接收到数据包后,不会立即发送ACK给对端,而是等待一段时间,如果在此期间:1. 本端有数据包要发送给对端。就在发送数据包的时候捎带上此ACK,如此一来就节省了一个报文。2. 本端没有数据包要发送给对端。延迟确认定时器会超时,然后发送...转载 2019-01-08 17:47:20 · 2465 阅读 · 1 评论 -
wifi 多播环境搭建
在待机功耗测试中,经常遇到打开WIFI后,功耗异常,通过tcpdump数据分析,大部分为接收大量组播包导致,所以,在项目初期,需要添加过滤多播包功能,并进行验证.搭建多播环境步骤:1. 2台手机连接路由器2. 在两台手机中执行iperf指令用于发送组播的机器./iperf -c 224.0.67.67 -u --ttl 5 -t 99999被测试的机器:./i...原创 2019-01-08 17:47:03 · 936 阅读 · 0 评论 -
linux内核网络协议栈学习笔记:关于GRO/GSO/LRO/TSO等patch的分析和测
TSO,全称是TCP Segmentation Offload,我们知道通常以太网的MTU是1500,除去TCP/IP的包头,TCP的MSS (Max Segment Size)大小是1460,通常情况下协议栈会对超过1460的TCP payload进行segmentation,保证生成的IP包不超过MTU的大小,但是对于支持TSO/GSO的网卡而言,就没这个必要了,我们可以把最多64K大小的TC转载 2014-11-09 11:39:15 · 2595 阅读 · 0 评论