tcp处理

TCP连接异常处理 客户端正常终止 进程终止的部分工作是关闭所有打开的描述符,因此客户打开的描述符由内核关闭。这导致客户TCP发送一个FIN给服务器,服务器TCP则以ACK响应,这就是TCP连接终止序列的前半部分,至此,服务器套接字处于CLOSE_WAIT状态,客户套接字则处于FIN_WAIT_2状态 异常状态处理 accept被系统调用中断 我们用术语慢系统调用 (slow system call)描述过a... 阅读详情


进入包的处理(net/ipv4/tcp_input.c):

接收的段都由tcp_v4_do_rcv处理,该函数根据不同的状态交由不同的函数处理。LISTEN状态且已建立半连接的处理函数为tcp_v4_hnd_req,其他状态为tcp_rcv_state_process

tcp_rcv_established处理从一个建立的连接进入的tcp包,是处理tcp包的唯一入口点。Linux有两种方法处理tcp包:快速路径和慢速路径。

tcp_ack 处理ack或带ack的数据包

tcp_event_data_recv 处理tcp包。在接收到顺序数据段时处理。

tcp_data_queue() 处理数据段中的数据。套接字缓冲耗尽或者乱序,在这里面处理。此外还要处理重复数据段、窗口外数据段以及重传。


降窗函数tcp_cwnd_down

tcp_cong_void处理拥塞避免。实现了慢速启动和快速重传的拥塞控制算法。完全的拥塞控制机制在tcp_fastretrans_alert中实现。在tcp_ack中会调用tcp_fastretrans_alert函数


tcp_select_window计算通告窗口

tcp_push 发送数据


tcp_congestion_ops结构提纲了支持多种拥塞控制的机制。需要实现tcp_congestion_ops中的接口,必须实现ssthresh、cong_svoid。
必须将拥塞控制算法的名称添加到/proc/sys/net/ipv4/tcp_congestion_control中才能使用。比如要使用Bic和veno算法:
echo "bic veno">/proc/sys/net/ipv4/tcp_congestion_control

tcp_register_congestion_control将一个新的拥塞控制算法注册到tcp_congestion_ops中。除了reno,其他的拥塞控制算法都是作为模块在module_init中注册的。如bictcp_register、cubic_register。

选取某种拥塞控制算法tcp_set_congestion_control


Libnids中tcp流处理"tcp.c" tcp.c /* Copyright (c) 1999 Rafal Wojtczuk . All rights reserved. See the file COPYING for license details. */ #include #include #include #include #include #include #include #include #i 阅读详情

相关推荐

C#优雅的处理TCP数据

Tcp是一个面向连接的流数据传输协议,用人话说就是传输是一个已经建立好连接的管道,数据都在管道里像流水一样流淌到对端。那么数据必然存在几个问题,比如数据如何持续的读取,数据包的边界等。

qq_35485206的博客 1034

【LWIP】tcp_input()函数分析

调用流程: 数据包首先调用ethernet_input()函数到达数据链路层,去掉以太网头部; 根据以太网头部类型判断:如果是ARP报文传给调用arp_input()交给ARP协议处理,如果是IP报文就调用ip_input()进入IP层处理; ip_input()函数中比较数据报文的目的IP地址,如果与某个网络接口的IP地址相同,则接收这个报文,依照IP头部的协议字段

诸葛一帆丶的博客 5900

Netty 处理Tcp Http Udp

netty 同时处理tcp,http,udp消息

请大声叫我帅哥 5318

深入了解- TCP拥塞状态机 tcp_fastretrans_alert

这里主要说的是TCP拥塞情况下的状态状态处理 内核资料直通车:Linux内核源码技术学习路线+视频教程代码资料学习直通车:Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈下面看一下里面的函数:先看:tcp_mark_head_lost:通过给丢失的数据包标志TCPCB_LOST,就可以表明哪些数据包需要重传。注意参数:packets = fackets_out - reordering,其实就是sacked_out + lost_out。被标志为LOST的段数不能超过packe

m0_74282605的博客 741

华为数通---配置风暴控制案例

风暴控制可以通过阻塞报文或关闭端口来阻断广播、未知组播和未知单播报文的流量。

2301_77081516的博客 1624

基于云盾构建等保三级Web安全体系:从合规要求到实战落地

网络安全等级保护(等保)是保障信息系统安全的重要制度,其核心原理是通过分级防护、动态调整的策略,构建纵深防御体系。在技术层面,等保要求覆盖物理环境、通信网络、区域边界、计算环境和安全管理中心等多个层面,旨在通过技术和管理相结合的方式,有效应对网络攻击和数据泄露风险。对于Web应用而言,满足等保三级要求具有极高的技术价值,它不仅是合规的刚性需求,更是提升业务系统整体安全水位、建立用户信任、保障业务连续性的关键工程实践。在云计算时代,利用云原生安全服务(如Web应用防火墙WAF、云安全中心、态势感知等)可以高效

weixin_29324877的博客 308

TCP的ACK确认系列 — 发送状态转换机

主要内容:TCP的ACK发送方式,以及ACK发送状态转换机的实现。 内核版本:3.15.2 我的博客:http://blog.youkuaiyun.com/zhangskd 概述 TCP采用两种方式来发送ACK:快速确认和延迟确认。 在快速确认模式中,本端接收到数据包后,会立即发送ACK给对端。 在延迟确认模式中,本端接收到数据包后,不会立即发送ACK给对端,而是等待一段时间,...

weixin_30721899的博客 898

ovs实现lb负载均衡

负载均衡器的实现原理是通过硬件或软件设备将客户端访问流量根据转发策略分发到多个服务器或设备上,以确保系统的负载均衡。二层负载均衡‌:使用虚拟MAC地址方式,根据OSI模型的二层进行负载均衡。‌四层负载均衡‌:基于IP+端口的负载均衡,主要分析IP层及TCP/UDP层,实现四层负载均衡。‌七层负载均衡‌:从应用层开始,根据虚拟的URL或IP、主机名接收请求,再转向相应的处理服务器。

bobi的博客 953

zynq Lwip学习笔记-tcp_input函数

最近在学习zynq中的lwip协议族,找不到很好的记笔记的地方,所以就用csdn记录一下自己的学习过程。现在对lwip不熟悉,只是把官方的lwip echo server例程跑了一下,能跑通就一点点的照着学了,笔记都是根据自己的理解写的,而且部分内容可能也只针对lwip echo server例程有效,笔记可以供有缘人参考,但不敢保证全对,有不对的地方也期待有高人指点一二。

weixin_40356705的博客 1467

河洛理数【陈抟】每月月卦推演每日运卦

Step2:每卦中的日爻遇到二十四节气中的当日为节(月初)或气(月中)的时候,所代表的日期需要变更。正常来说,屯卦分别代表初一到初六,但是由于当月初二时立秋节,所以初爻就不能作为初一、而是要作为立秋节开始时(文中还精算到了立秋是从初二的午时开始),如下。说的代表月运的基础卦上进行当月日卦的推演方式。老样子,我们还是按照书中举得例子卦在这边进行一步步的推演,最后做总结。Step1:从月卦爻下一爻开始,自下而上,进行五个爻的爻变,新推演的每个卦代表六天,如下。假设当月月卦是即济卦,月爻在二爻,如图所示(

Daniel专栏 764

热红外图像小目标检测算法综述

热红外小目标检测算法综述,着重介绍基于深度学习的小目标检测算法

Littro Innovations 4244

TCP ACK状态

如下定义,TCP的ACK状态由如下4个。 enum inet_csk_ack_state_t { ICSK_ACK_SCHED = 1, ICSK_ACK_TIMER = 2, ICSK_ACK_PUSHED = 4, ICSK_ACK_PUSHED2 = 8 }; 初始状态 在TCP套接口初始化时,注册延迟ACK等一系列超时处理函数。并且在inet_c...

redwingz的博客 2255

【Unity】网络游戏实战(序章)MMORPG大型多人在线角色扮演 + 中国象棋联网对战

本系列会基于两种常见的网络游戏类型(MMORPG大型多人在线角色扮演和多人棋牌),从零开始实现网络游戏开发中的大多数环节。【杜绝代码炫技】本系列杜绝代码炫技,摈弃那些高深的设计模式,一切业务逻辑的实现代码追求浅显易懂,即便是网络编程菜鸟,也能循序渐进掌握本系列的核心要点。【授之鱼也授之渔】与一些开源库那样只授予源码不同,本系列还会基于各个技术要点展开详解,并结合切实的可直接运行的Demo,授之鱼更授之渔。

神码编程 1963

网络Midbox处理TCP的方式对TCP吞吐的影响

昨天下班的路上,我发了一则朋友圈: 今天抓到一条大鱼,隧道的TCP载荷吞吐提升一倍多,哈哈,周末愉快! 很多隧道都用同一个线程处理同一个tcp流,这显然不对,应该用不同的线程分别处理一个流的两个方向。 但很多用户态隧道都是同一个线程处理同一条tcp连接的,这是问题。 这个问题在很多人看来真的很low,依然是那种不过如此的问题,因为怕被笑话,我故意把事情说的很low,但这只是一种措辞处理的技巧,本来这事儿就这么过去了。 但深入思考是我的习惯,我发现这竟然是一个普遍的问题,就准备记录下来。 这不是一个和性

TCP/IP 8664

【学习系列】SAP RAP 4:通过注解来完成一些常规需求

本文介绍了RAP应用中常用注解的实现方式,包括搜索帮助、文本描述绑定、联动搜索、字段控制等功能。通过@Consumption、@UI等注解可以实现搜索帮助定义、多字段联动、必输校验、默认排序和默认值设置。管理字段可通过@Semantics注解自动记录创建/修改信息,长文本使用@UI.multiLineText实现多行显示。这些注解可优化界面交互和数据管理,为后续行为定义功能开发奠定基础。文章结构清晰,针对不同需求提供了具体的实现方案和代码示例。

DeveloperMrMeng的博客 698

KVM — 与 QEMU 和 Libvirt 的关系

目录目录 前言 KVM QEMU KVM 与 QEMU qemu-kvm Libvirt Libvirt 在 OpenStack 中的应用前言如果是刚开始接触虚拟机技术的话, 对上述的概念肯定会有所混淆, 傻傻的分不清. 尤其在看虚拟化技术文档时导致理解能力下降, 所以在开始学习虚拟化技术之前对这些概念有一个整体的认识和清晰的理解, 就显得很有必要了.KVMKVM(Kernel-basedVirtu

烟云的计算 5737

TCP粘包现象分析及处理方式

TCP是面向流的的传输协议,发送端可以一次发送不定长度的数据,而接收端也可以一次提取不定长度的数据。即这种传输方式是无保护消息边界的。会导致粘包现象的发生。而UDP是面向数据报的传输协议,发送的UDP报文都被接收端视为一条消息,若消息太长被分片,UDP协议也会完成组合后才呈现在内核缓冲区;且UDP报文有消息头,对于接收端来说,易于区分处理。即这种传输方式是有保护消息边界的。并不存在粘包问题。......

weixin_43213514的博客 8997

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

golang tcp粘包处理

go

jank1369的博客 2442

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

TCP数据接收之ACK的处理

在TCP输入数据段的处理过程中,如果最终看到输入段携带了ACK信息,则会调用tcp_ack()进行相关处理,实际上,ACK总是会携带的,因为携带ACK不需要任何的附加开销,所以对于输入的每一个段(输了RST等特殊段),这个过程总是要执行的,这篇笔记就来看看这个处理过程。 1. tcp_ack() /* This routine deals with incoming acks, but not o...

九天小哥的专栏 1万+

TCP的核心系列 — ACK的处理(一)

TCP发送数据包后,会收到对端的ACK。通过处理ACK,TCP可以进行拥塞控制和流控制,所以 ACK的处理是TCP的一个重要内容。tcp_ack()用于处理接收到的ACK。   本文主要内容:TCP接收ACK处理,tcp_ack()的实现。 内核版本:3.2.12 Author:zhangskd @ csdn   基础   在我们开始探究tcp_ack()的处理流程前,不妨先来回...

weixin_34337381的博客 1762

TCP粘包问题处理

这篇记录TCP通信粘包问题的处理方法。以上就是处理粘包问题的一种方法,使用async_read一次性读完一整个消息头部和一整个消息体,这样就做到把粘在一起数据读的时候分开了。

2201_75528880的博客 1679

TCP超时处理

TCP报文交互 A向B发送了数据报文1,B收到后向A发送确认报文ACK1。B解析数据报文1,然后向AP发送数据报文2,A收到后向B发送确认报文ACK2。   以下是打开一个博客的交互过程的报文       TCP超时 总的来说,TCP可能有三个超时 1)连接超时 2)读超时,即阻塞在读的地方(应用层),比如B没有收到数据报文1而阻塞,或者A没有收到数据报文2而阻塞。

hangxing78的专栏 5801

linux tcp接收处理程序,Linux内核TCP收到ACK的处理

TCP层每次收到一个ACK的报文就会进入这个函数做决策。先直接上注释的代码:static int tcp_ack(struct sock *sk, struct sk_buff *skb, int flag){struct inet_connection_sock *icsk = inet_csk(sk);struct tcp_sock *tp = tcp_sk(sk);//这两行是几乎每个函数都...

weixin_34794420的博客 639

TCP数据接收之快速路径处理

1. 基本原理 TCP的接收过程为什么要分为快速路径和慢速路径处理,如下面这段话所述: 就是要高效,如果满足快速路径,那么在接收过程中就可以使用更少的检查条件。 1.1 首部预测标记 那么什么样的数据包是当前最期望收到的数据包呢?共有两种情况: 如果才发送了数据,那么这时最期望收到的就是对刚发送数据的确认; 如果只是接收场景,那么最期望收到的一定是以rcv_nxt为起始序号的数据包。 如何来...

九天小哥的专栏 1840

TCP通讯处理粘包详解

一般所谓的TCP粘包是在一次接收数据不能完全地体现一个完整的消息数据。TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处理的消息数据,所以就会引发一次接收的数据无法满足消息的需要,导致粘包的存在。处理粘包的唯一方法就是制定应用层的数据通讯协议,通过协议来规范现有接收的数据是否满足消息数据的需要。在应用中处理粘包的基础方法主要有两种分别是以4节字描...

GarfieldEr007的专栏 802

内核tcp的ack的处理

我们来看tcp输入对于ack,段的处理。  先是ack的处理,在内核中,处理ack段是通过tcp_ack来进行的。  这个函数主要功能是:  1 update重传队列,并基于sack来设置skb的相关buf。  2 update发送窗口。  3 基于sack的信息或者重复ack来决定是否进入拥塞模式。  在看之前我们要知道tcp是累积确认的。为了解决带来的缺

lmjjw的专栏 3019
上一篇: 进入的包到第4层
下一篇: Linux中C语言的特殊用法
rc_ll
博客等级 码龄15年 7粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值