
Linux 网络协议栈
文章平均质量分 87
庞叶蒙
没有最牛逼的技术,只有最适合的技术。
展开
-
温故而知新--linux协议栈
原创 2017-08-29 16:44:59 · 339 阅读 · 0 评论 -
tcp/ip协议栈--socket API 之listen()
0x01 缘由 上篇博文介绍了bind的连接,了解了相关细节,这章继续学习socket API ,这篇关注listen。listen几个关键参数和队列是经常被面试官提出的问题。0x02 API介绍全连接队列的最大长度: backlog保存的是完成三次握手、等待accept的全连接,而不是半连接。 负载不高时,backlog不用太大。(For原创 2017-09-28 12:07:36 · 708 阅读 · 0 评论 -
tcp/ip协议栈--socket API 之accept()
0x01 缘由 前面博文已经学习了socket()\bind(),一切准备好后,开始可以接受客户端的连接请求,建立连接了。下面学习下accept API相关细节。0x02 API介绍在建立好接收队列以后,服务器就调用accept(),然后睡眠直到有客户端的连接请求到达。默认为阻塞API。0x03 源码单步跟踪 环境:linux kernel 2.6.原创 2017-09-28 15:43:01 · 1306 阅读 · 1 评论 -
tcp/ip-路由相关结构
0x01 缘由 上章节已经学习了网络层(ip层),其中关键部分就是找下一跳路由,本次学习主要围绕路由相关知识点进行学习。0x02 相关结构 1.路由缓存机制:struct rtable{ union { struct dst_entry dst; //目的条目 } u; struct flowi原创 2017-09-20 16:21:23 · 701 阅读 · 0 评论 -
学习linux协议栈关键数据结构
0x01 缘由 从大学开始算法题开始,强调数据结构的重要性,良好的数据结构设计会使程序设计更加合理和健壮。0x02 关键结构 先摘录一个图,了解各数据结构件的关系。--摘录于《Linux TCP IP 协议栈分析.pdf》 1.struct sk_buff - socket bufferstruct sk_buff {原创 2017-09-12 17:19:56 · 633 阅读 · 1 评论 -
tcp/ip协议栈--socket API 之connect()
0x01 缘由 前面一些博文简单学习了服务端 socket()、bind()、listen()、accept()过程,当没有客户端连接服务端时,服务端进程阻塞在accept处,等待客户端连接。客户端连接服务端利用connect() API。此处学习。0x02 API介绍 0x03 源码单步跟踪 在另一台服务器运行server端,在guest主机运行cli原创 2017-09-29 15:37:08 · 1001 阅读 · 0 评论 -
tcp/ip协议栈--socket API 之发送函数(send/write)
0x01 缘由 前面博文把服务端、客户端三次握手连接过程学习完了,现在开始学习下相关发送数据API。0x02 API介绍 0x03 相关调用一览0x04 tcp层 对应博文http://blog.youkuaiyun.com/pangyemeng/article/details/781048720x05 总结 发送过程仅仅是原创 2017-09-29 16:05:52 · 2737 阅读 · 1 评论 -
tcp/ip协议栈--socket API 之发送函数(read/recv)
0x01 缘由 前面博文把服务端、客户端三次握手连接过程学习完了,现在开始学习下相关接收数据API。0x02 API介绍 0x03 相关调用一览0x04 tcp层 对应博文http://blog.youkuaiyun.com/pangyemeng/article/details/780522440x05 总结 发送过程转载 2017-09-29 16:14:29 · 730 阅读 · 0 评论 -
tcp/ip协议栈-tcp层(1)
0x01 缘由 上章节简单学习了内核网络栈路由的过程,这章节继续tcp三次握手过程。0x02 调式环境 在guest虚拟机中跑一个server端,然后其他机器跑个客户端进行分析。0x03 源码解析 主要分几部分来: 1.收到客户端syn包处理流程 2.服务端构造syn + ack相应客户端 3.客户端发送ack给服务端原创 2017-09-21 15:08:52 · 745 阅读 · 0 评论 -
tcp/ip协议栈--socket API 之bind()
0x01 缘由 上篇博文已经学习了socket() API,但是还不清楚创建的socket等相关结构如何使用。上篇文章仅仅创建了相关存储结构和文件描述符sockfd,并没有表示任何地址和端口。0x02 bind()介绍 0x03 单步跟踪分析 guest主机上运行server.c,此函数是通用的服务端模式,其中调用bind()函数,同时在内核源码通用处理s原创 2017-09-28 11:06:08 · 974 阅读 · 1 评论 -
tcp/ip协议栈--socket API 之socket()
0x01 缘由 前面学习了基本tcp/ip协议栈相关处理流程,学习这些主要目的是为加强对网络相关处理的熟练程度,指导将来相关网络设备开发、网络安全产品开发。除此之外,应该进一步关注高性能服务器相关开发,后面几个章节通过结合应用层socket相关API来进一步加强对linux tcp/ip协议栈的理解,同时加强应用层socket开发的理解。 前面有些博文已经提到了应用层soc原创 2017-09-27 14:18:21 · 899 阅读 · 0 评论 -
从用户态代码调用到内核态调用单步调试之旅01
0x01 缘由 一直在从事linux c/c++相关网络开发,现在想进一步深入到内核,了解更多的东西,以支撑上层应用的开发。在linux上写个c/s 通讯过程很简单,如何写得高并发、稳定才是真正的难点。0x02 linux c服务端和客户端代码服务端:#include #include #include #include #include #include #i原创 2017-09-11 10:48:16 · 547 阅读 · 1 评论 -
TCP重传分析
0x01 缘由 最近在结合linux tcp/ip协议栈,以及上层socket编程来进行相关学习,学习过程中发现一些有趣的东西,但是也想做做记录。于是有了这篇文章。 tcp超时重传机制:https://baike.baidu.com/item/TCP%E8%B6%85%E6%97%B6%E9%87%8D%E4%BC%A0%E6%9C%BA%E5%88%B6/2122456?原创 2017-09-15 10:52:53 · 6559 阅读 · 0 评论 -
利用eclipse + qemu| Vmware + gdb 调试linux内核
0x01 缘由 最近想调试linux内核协议栈,想单步调试,所以折腾了几天,利用qemu + eclpise去调试相关。0x02 内核初始化调试环境 centos 6.5 内核版本 2.6.32-431.el6.i686 qemu-0.11.0 eclipse cdt 1.首先我们要从www.kernel.org下载内核原创 2017-09-08 09:40:31 · 1888 阅读 · 0 评论 -
tcp/ip协议栈--tcp处理中的几个队列
0x01 缘由 昨天简单过了下tcp层的syn的过程,其中对几个队列处理有点疑问,对数据如何到用户态的过程也存在的疑问?带着这几个问题网上查找了相关资料,发现一位大神讲解得比较清楚。传送:http://blog.youkuaiyun.com/russell_tao/article/details/9950615 讲解得比较到位,博文编写也是我后面要改进的方向。原理已经讲解得比较清楚,下原创 2017-09-25 10:43:38 · 2656 阅读 · 1 评论 -
tcp/ip协议栈-驱动到应用
0x01 缘由 本次学习的目的主要按照如下大纲开展: 以服务端客户端程序调试三次握手、数据传输、四次挥手过程。 搭建环境如下:前期调试linux内核环境 从物理层向上: 进入物理层:驱动程序处理中断? 进入链路层:网卡设备收到包后驱动程序做什么处理,是否做mac校验,满足什么条件会将数据包向协议栈上送,混杂模式和非混杂模式的区原创 2017-09-18 16:25:10 · 1335 阅读 · 0 评论 -
tcp/ip协议栈--tcp数据发送流程
0x01 缘由 前面一些章节学习数据的收,现在关注协议socket数据从用户态到内核态,然后发送出去的过程。学习手段还是借助他人的成果,加单步跟踪内核源码。 传送:http://blog.youkuaiyun.com/zhangskd/article/details/482075530x02 调用栈0x03 关键代码分析/* tcp_sendmsg()的主要原创 2017-09-26 17:37:48 · 1508 阅读 · 1 评论 -
链路层到网络层(eth->ip->udp)
0x01 缘由 上章节已经简单的学习了从硬件驱动层到链路层的相关过程,计划这章接讲解arp_rcv,但是考虑整个学习计划还是先从ip_rcv为主线展开学习,还是跟着上次的调试节奏进入网络层的源码跟踪和学习。0x02 整体调用栈 0x03 源码跟踪1.跟踪ip_rcv int ip_rcv(struct sk_buff *skb, struct net_device原创 2017-09-19 11:22:03 · 914 阅读 · 0 评论 -
再聊socket状态转移
0x01 缘由 最近在结合linux 内核调试的方式,再深入理解socket编程相关知识,在应用开发过程中,把握socket的状态迁移,结合数据抓包分析,可以排查服务端相关异常。写这篇文章的目的是,发现我在调试过程中,写了一个简单的c/s通讯小程序,发现关闭server端候,立刻报端口被占用的错误,要等待一段时间自动删除。用netstat -ant | grep xxx 时发现端口处于原创 2017-09-11 10:21:01 · 790 阅读 · 0 评论 -
tcp/ip--面试中遇到几个问题
0x01 缘由 前段时间遇到的几个问题,现在简单总结和分析下: 1、tcp三次握手过程中交换了哪些信息? 2、一次tcp会话过程中序列号初始值是固定还是随机? 3、tcp三次握手过程中,三次握手的最后一个过程数据包在网络中丢掉,该如何处理? 4、TIME_WATE的作用? 5、保证tcp可靠传输的方法? 以上问题在实际应用中还是原创 2017-12-25 16:07:20 · 1341 阅读 · 1 评论