内核中的TCP的追踪分析-18-TCP(IPV4)的客户端与服务器端socket连接过程-5
我们上一节讲到了客户端请求到达服务器中的tcp_v4_conn_request()函数中时,服务器会给客户端发送一个ack,“第二次握手”的内容我们在上节中提到放在本文中完成,我们在tcp_v4_conn_request()函数中看到“第二次握手”是由__tcp_v4_send_synack()函数
内核中的TCP的追踪分析-17-TCP(IPV4)的客户端与服务器端socket连接过程-4
我们昨天跟踪到了tcp_v4_conn_request()函数,我们分段来看这个函数inttcp_v4_conn_request(structsock*sk,structsk_buff*skb){structinet_request_sock*ireq;structtcp_options_recei
内核中的TCP的追踪分析-16-TCP(IPV4)的客户端与服务器端socket连接过程-3
在上面15节处我们最后跟踪到了内核的tcp_v4_rcv()函数处,它在/net/ipv4/tcp_ipv4.c中的1601行处,我们分段来看inttcp_v4_rcv(structsk_buff*skb){conststructiphdr*iph;structtcphdr*th;structsoc
内核中的TCP的追踪分析-15-TCP(IPV4)的客户端与服务器端socket连接过程-2
接上篇intip_rcv(structsk_buff*skb,structnet_device*dev,structpacket_type*pt,structnet_device*orig_dev){structiphdr*iph;u32len;/*Whentheinterfaceisinpromi
内核中的TCP的追踪分析-14-TCP(IPV4)的客户端与服务器端socket连接过程-1
内核中的TCP的追踪分析-7-TCP(IPV4)的socket接收连接,那节中,我们在文章最后出现了一点错误,误将newsock当做客户端也就是发送连接请求方的socket来理解了,并且newsk也并非是从客户端即发送方载运过来的sock结构,它也是在服务器端生成的,具体生成过程我们本节将会看到,这
内核中的TCP的追踪分析-13-TCP(IPV4)的socket连接-续5
今天继续看dev_queue_xmit()函数,昨天我们说了它是将我们已经准备的skb包发送出去,看一下函数代码intdev_queue_xmit(structsk_buff*skb){structnet_device*dev=skb->dev;structQdisc*q;intrc=-ENO
内核中的TCP的追踪分析-12-TCP(IPV4)的socket连接-续4
我们今天继续追踪tcp的socket的连接,上一节谈到了追踪到了ip_queue_xmit()发送数据包,我们来看这个函数intip_queue_xmit(structsk_buff*skb,intipfragok){structsock*sk=skb->sk;structinet_sock*
内核中的TCP的追踪分析-11-TCP(IPV4)的socket连接-续3
关于tcp的ipv4的socket连接非常长,之所以其复杂,很多朋友对此望而却步,主要是涉及的协议理论太复杂,而我对2.6.26的分析只从代码出处,意从简单入手,深入浅出剖析出tcp的socket原理,所以请朋友们阅读我的分析过程会感觉到没有太多的协议内容,这样简化了难度更加让朋友理解整个过程。我是
内核中的TCP的追踪分析-9-TCP(IPV4)的socket连接-续1
我们继续昨天的socket的连接过程,继续看tcp_v4_connect()函数余下的代码,昨天我们已经看了前边的一段,现在看后面if(tcp_death_row.sysctl_tw_recycle&&!tp->rx_opt.ts_recent_stamp&&r
内核中的TCP的追踪分析-8-TCP(IPV4)的socket连接
我们继续探讨socket的连接,同样象在unix的socket章节一样,我们还是先从练习中的例子看起connect(sockfd,(structsockaddr*)&address,len)在这个练习很明显是客户端的socket发起的,中间的过程我们不详细叙述了,需要了解的朋友请看我在博客中
合理的使用MySQL乐观锁与悲观锁
针对MySQL的乐观锁与悲观锁的使用,基本都是按照业务场景针对性使用的。针对每个业务场景,对应的使用锁。但是两种锁无非都是解决并发所产生的问题。下面我们来看看如何合理的使用乐观锁与悲观锁何为悲观锁悲观锁(PessimisticLock):就是很悲观,每次去取数据的时候都认为别人会去修改,所以每次在取
MySQL知识—索引
1.索引是什么MySQL官方对索引的定义:索引(Index)是帮助MySQL高效获取数据的数据结构。因此索引的本质就是数据结构。索引的目的在于提高查询效率,可类比字典、书籍的目录等这种形式。可简单理解为“排好序的快速查找数据结构”。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结
内核中的TCP的追踪分析-7-TCP(IPV4)的socket接收连接
这一节我们开始分析如何接收TCP的socket的连接请求,象在Unix的socket分析章节一样我们先看练习中的用户界面accept(server_sockfd,(structsockaddr*)&client_address,client_len);然后进入内核的系统调用函数中,我们直接从
内核中的TCP的追踪分析-6-TCP(IPV4)的socket的监听
我们来看一下这个结构中的listen钩子conststructproto_opsinet_stream_ops={。。。。。。.listen=inet_listen,。。。。。。};很明显,挂入的是inet_listen函数,这个函数在/net/ipv4/af_inet.c中的194行处intine
内核中的TCP的追踪分析-5-再谈TCP(IPV4)的socket的地址绑定
今天我们继续完成bind()函数的追踪为了避免离开主线而失去方向,关于具体的初始化过程我们还是放在必要的时候逐段来看,这里还是回到第3节中的__inet_dev_addr_type()函数中继续往下追踪,函数fib_get_table()查找init_net网络空间中安装的路由表hash队列中找到要
内核中的TCP的追踪分析-4-TCP(IPV4)的socket的地址绑定-续
在内核中CONFIG_NET_NS配置选项是为了让用户自定义自己的网络空间结构,即上面的net结构,可以看出2.6.26内核的灵活性,但是我们一般在内核中不会配置该项,所以这里应该是取得init_net,这个结构是在前一节分析的那样在do_one_initcall()机制中调用了从pure_init
内核中的TCP的追踪分析-3-TCP(IPV4)的socket的地址绑定
今天我们继续内核中的TCP的socket的学习,同样按照Unix那节中的socket地址绑定的路线我们来分析一下,我们看到在以前的练习中有这样的绑定代码bind(server_sockfd,(structsockaddr*)&server_address,server_len);上面的练习请
内核中的TCP的追踪分析-1-追踪TCP(IPV4)的socket的初始化
我们首先来解释一下什么是socket,很多初次朋友可能对此概念还不是很清楚,socket这个单词英文是插座的意思,但是在计算机领域里有时称为插口,也有时称为套接字,无论什么叫法它的作用都不会变的,都是为应用程序提供了今天网络通讯的桥梁架构,我们举一个电话通讯的例子来看。准备通话的二部电话相当于准备好
2.6内核数据包接收流程分析
2.6.24.4内核网络接收数据包分析在2.6.24.4中所有的网卡,不管是否支持napi,都是通过structnapi_struct结构进行。所有我们先说一下这个结果。structnapi_struct{structlist_headpoll_list;unsignedlongstate;intw
Netfilter CONNMARK用法及分析(二)-- 内核代码分析
本文着重分析内核中CONNMARK的实现,同时还包括MARK的match和target模块的实现。因为CONNMARK模块通常是和MARK模块搭配使用的。1.CONNMARK及相关模块的选项这里先列出CONNMARK、MARK和mark模块的iptables命令行的选项,随后我们再逐一分析各个模块的