上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 30 下一页
摘要: 概述 sendmsg系统调用在tcp层的实现是tcp_sendmsg函数,该函数完成以下任务:从用户空间读取数据,拷贝到内核skb,将skb加入到发送队列的任务,调用发送函数;函数在执行过程中会锁定控制块,避免软中断在tcp层的影响;函数核心流程为,在发送数据时,查看是否能够将数据合并到发送队列中最 阅读全文
posted @ 2019-10-28 14:43 AlexAlex 阅读(1764) 评论(0) 推荐(0) 编辑
摘要: 概述 recvmsg系统调用在tcp层的实现是tcp_recvmsg函数,该函数完成从接收队列中读取数据复制到用户空间的任务;函数在执行过程中会锁定控制块,避免软中断在tcp层的影响;函数会涉及从接收队列receive_queue,预处理队列prequeue和后备队列backlog中读取数据;其中从 阅读全文
posted @ 2019-10-28 14:42 AlexAlex 阅读(2250) 评论(0) 推荐(0) 编辑
摘要: 概述 快速路径:用于处理预期的,理想情况下的数据段,在这种情况下,不会对一些边缘情形进行检测,进而达到快速处理的目的; 慢速路径:用于处理那些非预期的,非理想情况下的数据段,即不满足快速路径的情况下数据段的处理; 首部预测字段格式:首页预测字段,实际上是与TCP首部中的【头部长度+保留字段+标记字段 阅读全文
posted @ 2019-10-28 14:41 AlexAlex 阅读(1303) 评论(0) 推荐(0) 编辑
摘要: tcp_data_queue作用为数据段的接收处理,其中分为多种情况: (1) 无数据,释放skb,返回; (2) 预期接收的数据段,a. 进行0窗口判断;b. 进程上下文,复制数据到用户空间;c. 不满足b或者b未完整拷贝此skb的数据段,则加入到接收队列;d. 更新下一个期望接收的序号;e. 若 阅读全文
posted @ 2019-10-28 14:39 AlexAlex 阅读(1803) 评论(0) 推荐(0) 编辑
摘要: tcp_queue_rcv用于将接收到的skb加入到接收队列receive_queue中,首先会调用tcp_try_coalesce进行分段合并到队列中最后一个skb的尝试,若失败则调用__skb_queue_tail添加该skb到队列尾部; 1 static int __must_check tc 阅读全文
posted @ 2019-10-28 14:38 AlexAlex 阅读(1166) 评论(0) 推荐(0) 编辑
摘要: 概述 tcp_rcv_established用于处理已连接状态下的输入,处理过程根据首部预测字段分为快速路径和慢速路径; 1. 在快路中,对是有有数据负荷进行不同处理: (1) 若无数据,则处理输入ack,释放该skb,检查是否有数据发送,有则发送; (2) 若有数据,检查是否当前处理进程上下文,并 阅读全文
posted @ 2019-10-28 14:31 AlexAlex 阅读(2317) 评论(0) 推荐(0) 编辑
摘要: 在未开启tcp_low_latency的情况下,软中断将skb送上来,加入到prequeue中,然后 在未启用tcp_low_latency且有用户进程在读取数据的情况下,skb入队到prequeue,入队之后,若达到队列长度上限或者内存上限,则将队列中的skb出队,调用tcp_v4_do_rcv处 阅读全文
posted @ 2019-10-28 14:25 AlexAlex 阅读(921) 评论(0) 推荐(0) 编辑
摘要: tcp_v4_rcv函数为TCP的总入口,数据包从IP层传递上来,进入该函数;其协议操作函数结构如下所示,其中handler即为IP层向TCP传递数据包的回调函数,设置为tcp_v4_rcv; 1 static struct net_protocol tcp_protocol = { 2 .earl 阅读全文
posted @ 2019-10-28 13:44 AlexAlex 阅读(3153) 评论(0) 推荐(1) 编辑
摘要: 概述 以前的TCP请求控制块没有独立的状态,而是依赖于他们的父控制块的状态,也就是TCP_LISTEN状态,现在要把请求控制块加入到全局的ehash中,所以需要一个状态,而TCP_SYN_RECV状态被fast open sokets使用了,所以新加了一个TCP_NEW_SYN_RECV状态; 以下 阅读全文
posted @ 2019-10-28 13:38 AlexAlex 阅读(2150) 评论(0) 推荐(0) 编辑
摘要: 概述 在主动关闭方发送了FIN之后,进入FIN_WAIT_1状态,在此状态收到了ACK,则进入FIN_WAIT_2状态,而FIN_WAIT_2后续要做的工作是等待接收对端发过来的FIN包,并且发送ACK,进而进入到TIME_WAIT状态;本文主要关注从FIN_WAIT_1进入FIN_WAIT_2状态 阅读全文
posted @ 2019-10-28 13:35 AlexAlex 阅读(6862) 评论(0) 推荐(0) 编辑
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 30 下一页