自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

九天小哥的专栏

天道酬勤

  • 博客(12)
  • 资源 (2)
  • 收藏
  • 关注

原创 UDP之数据报接收过程(二)

文章目录系统调用: udp_recvmsg()从接收队列中获取skbskb_peek()__skb_unlink()skb_free_datagram_locked()后备队列的数据接收sk_backlog_rcv()UDP数据报的接收过程要分两部分来看:网络层将数据报递交给UDP后,UDP的处理过程。该过程中,UDP需要接收数据包并对其进行校验,校验成功后将其放入接收队列中等待用户空间程序来读取;用户空间程序调用read()等系统调用读取已经放入接收队列中的数据。这篇笔记记录了第二步。系统调

2018-10-31 00:04:04 3229

原创 Android DNS之查询数据包的hash值

在Android之DNS查询结果缓存中有提到一个DNS查询时的行为:==如果当前已经有一个相同的查询发出,那么后来的查询请求实际上会block,等待前一次的查询返回,如果成功那么一起返回,失败则后面的请求还会及其发起。==这篇笔记就来看看到底是如何判断两个DNS查询请求是不是完全相同的。之所以要分析这个过程,是因为在实际问题定位过程中,如果看到两个对相同域名的DNS查询请求相隔不远,总会有疑问,...

2018-10-30 01:54:36 740

原创 UDP之收发内存管理

文章目录整体策略变量说明UDP层面的控制变量sysctl_memsysctl_rmem/sysctl_wmemmemory_allocated初始化传输控制块层面的限制sk_rcv_buf/sk_sndbufsk_forward_allocsk_rmem_allocsk_wmem_alloc发送内存限制skb分配sock_alloc_send_pskb()sock_alloc_send_skb()sock_wmalloc()skb_set_owner_w()skb销毁: sock_wfree()小结接收内存

2018-10-28 12:54:04 6003 3

原创 UDP之数据报接收过程(一)

文章目录从IP层接收数据包: udp_rcv()查找数据包所属套接字计算匹配分值: compute_score()保存数据报到队列: udp_queue_rcv_skb()接收数据到接收队列接收数据到后备队列唤醒用户态进程UDP数据报的接收过程要分两部分来看:网络层将数据报递交给UDP后,UDP的处理过程。该过程中,UDP需要接收数据包并对其进行校验,校验成功后将其放入接收队列中等待用户空间程序来读取;用户空间程序调用read()等系统调用读取已经放入接收队列中的数据。这篇笔记先来介绍第一部分。

2018-10-28 12:51:42 19324 4

原创 UDP之数据报校验和

文章目录数据结构sk_buff校验和字段net_device校验和字段接收报文的校验和计算udp4_csum_init()udp_lib_checksum_complete()小结发送报文的校验和计算skb的封装: ip_generic_getfrag()udp_push_pending_frames()udp4_hwcsum_outgoing()udp_csum_outgoing()小结协议设计上,UDP的校验和功能是可选的,Linux实现时,UDP的校验和功能默认是开启的,不过应用程序可以通过选项SO

2018-10-26 23:39:31 5699

原创 套接字层之TCB同步锁

文章目录锁结构进程上下文的访问操作lock_sock()release_sock()软中断上下文的访问操作传输控制块引用计数总结传输控制块TCB是协议栈中非常重要的一个数据结构,它代表了一个套接字。该结构在进程上下文和软中断上下文都会被访问,所以保证该结构的数据一致性就非常重要了,而且理解其锁机制对于理解代码也非常有意义,这篇笔记就记录了内核中该结构的同步锁。锁结构struct sock {... socket_lock_t sk_lock;...}/* This is the per-s

2018-10-26 23:21:51 1694

原创 linux内核互斥机制之自旋锁

在linux内核中,使用最多的互斥原语非自旋锁莫属。从概念上来讲,自旋锁很简单,自旋锁只有两种状态:“锁”和“解锁”,这点和互斥量相同。当进程进入临界区时,要获取自旋锁:如果当前锁处于“解锁”状态,那么就设置锁为“锁”状态,然后该进程就持有锁并继续运行;如果当前锁处于“锁”状态,那么该进程就会一直循环检测该锁,直到该锁状态变为“解锁”然后获取锁后继续运行,这个循环过程就是所谓的自旋,自旋时...

2018-10-24 00:58:35 423

原创 linux内核互斥机制之综述

这篇笔记并不打算具体介绍Linux内核提供的各种同步机制,而是对与同步机制相关的一些概念做个概述,然后概括性的描述一下Linux内核所提供的各种同步机制之间的特点以及它们之间的区别。1. 概述首先要谈的是为什么会需要同步机制?假设内存中有一个int型变量,那么通常,对该数据的写操作分为(1)从内存中读出数据(2)修改数据(3)然后写回内存,这三步是顺序执行的。如果只有一个执行流操作该数据,那么...

2018-10-24 00:28:37 828

原创 套接字传输控制块

传输控制块是协议栈的核心数据结构,一个套接字在TCP、IP层的代表就是一个传输控制块,它包含了一个套接字所需要的所有信息。linux对传输控制块的定义是分层次的,这篇笔记记录了传输控制块中各个成员的含义,实际中需要结合相应的使用代码来理解这些字段的含义。注:当前只是罗列,并没有全部弄明白,该结构是在是太大了,后续慢慢补充传输控制块的基石struct sock_common其实看注释就能大概明...

2018-10-21 15:42:52 1480

原创 UDP之系统调用bind()实现

文章目录AF_INET协议族绑定接口: inet_bind()UDP端口分配UDP传输控制块组织结构udp_v4_get_port()端口可用性判断: udp_lib_lport_inuse()端口自动绑定: inet_autobind()UDP套接字的端口号绑定发生在两种场景:应用程序显示的调用bind(2)实现端口绑定。通常服务器端编程时会这么做,让服务端绑定都一个约定好的端口上;UDP套接字创建后的connect(2)/sendto(2)/sendmsg(2)调用流程中,kernel会在发送自

2018-10-21 01:33:56 4590

原创 套接口层之socket系统调用实现

这篇笔记记录了AF_INET协议族在套接口层对scoket()系统调用的实现,注意这里只介绍了套接口层的实现,相比于完整的socket()系统调用实现,这里缺少两部分内容:文件系统相关的部分,比如文件描述符的分配等;传输层的实现,套接字的创建肯定是要传输层参与的,但是不同的传输层处理方式又不同,这种协议差异会单独在相关笔记中介绍。socket()系统调用涉及的核心函数调用关系如下图:...

2018-10-20 13:25:52 615

原创 IPv4之接收数据包流程

文章目录接收报文入口: ip_rcv()路由查询: ip_rcv_finish()数据包输入到本机: ip_local_delivery()向高层协议分发: ip_local_deliver_finish()转发数据包: ip_forward()ip_forward_finish()总结在IPv4之协议族初始化中有介绍,IPv4协议会向设备接口层注册接收处理函数,使得ETH_P_IP类型的数据包将会交由ip_rcv()函数处理。这篇笔记就从该函数入手,一直到将数据包递交给更高层协议为止,从宏观角度分析下数

2018-10-19 01:23:34 2149

实验代码: vcard.rar

和https://blog.csdn.net/fanxiaoyu321/article/details/102768690配合的源码

2019-10-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除