导航:首页 > 编程系统 > linux内核处理tcp

linux内核处理tcp

发布时间:2023-05-10 22:33:57

linux TCP/IP协议栈数据包处理流程及代码实现分析

好吧复,我来回答吧,首先制是网卡驱动程序捕获到数据包,做检验无误后,和DMA以及CPU交互,然后由DMA和驱动程序创建BD表,然后分配skbuf(LINUX下)数据结构保存获得的数据帧,内核通过协议栈处理这个skbuf,通常是层层剥离每个层的首部,然后传到上一层,细节就是一个变量做偏移量,每次做一个首部偏移读取首部数据,识别本层协议类型以及下一层协议类型,具体过程就是这个网络原理的过程,请参考《TCP/IP详解卷一》《linux设备驱动程序》《understanding linux network internals》《Unix网络编程卷一》等。

❷ linux 中sock是什么意思

你所说的 sock 不就是socket嘛~~,你把你所说的上面那段话中sock 全部替换成socket 就一下都读明白了。 至于linux中sock,它一般是指通过shell编程后形成的套接口文件,通过ls -l 后,第一个显示的文件类型为:s 。

至于socket ,你应该已经很明白了吧,说白了就是一个通信管道。

我擦 ,怎么都2007年的问题了,居然 在我的最新问题中显示出来了~~我勒个去

❸ tcp拥塞控制状态机在linux内核源码的什么位置

公平性


公平性是在发生拥塞时各

源端(或同一源端建立的不同TCP连接或UDP数据报)能公平地共享同一网络资源(如带宽、缓存等)。处于相同级别的源端应该得到相同数量的网络资源。产

生公平性的根本原因在于拥塞发生必然导致数据包丢失,而数据包丢失会导致各数据流之间为争抢有限的网络资源发生竞争,争抢能力弱的数据流将受到更多损害。

因此,没有拥塞,也就没有公平性问题。


TCP层上的公平性问题表现在两方面:


(1)

面向连接的TCP和无连接的UDP在拥塞发生时对拥塞指示的不同反应和处理,导致对网络资源的不公平使用问题。在拥塞发生时,有拥塞控制反应机制的TCP

数据流会按拥塞控制步骤进入拥塞避免阶段,从而主动减小发送入网络的数据量。但对无连接的数据报UDP,由于没有端到端的拥塞控制机制,即使网络发出了拥

塞指示(如数据包丢失、收到重复ACK等),UDP也不会像TCP那样减少向网络发送的数据量。结果遵守拥塞控制的TCP数据流得到的网络资源越来越少,

没有拥塞控制的UDP则会得到越来越多的网络资源,这就导致了网络资源在各源端分配的严重不公平。


网络资源分配的不公平反

过来会加重拥塞,甚至可能导致拥塞崩溃。因此如何判断在拥塞发生时各个数据流是否严格遵守TCP拥塞控制,以及如何“惩罚”不遵守拥塞控制协议的行为,成

了目前研究拥塞控制的一个热点。在传输层解决拥塞控制的公平性问题的根本方法是全面使用端到端的拥塞控制机制。


(2) 一些TCP连接之间也存在公平性问题。产生问题的原因在于一些TCP在拥塞前使用了大窗口尺寸,或者它们的RTT较小,或者数据包比其他TCP大,这样它们也会多占带宽。


RTT不公平性


AIMD拥塞窗口更新策

略也存在一些缺陷,和式增加策略使发送方发送数据流的拥塞窗口在一个往返时延(RTT)内增加了一个数据包的大小,因此,当不同的数据流对网络瓶颈带宽进

行竞争时,具有较小RTT的TCP数据流的拥塞窗口增加速率将会快于具有大RTT的TCP数据流,从而将会占有更多的网络带宽资源。


附加说明


中美之间的线路质量不是很好,rtt较长且时常丢包。TCP协议是成也丢包,败也丢包;TCP的设计目的是解决不可靠线路上可靠传输的问题,即为了解决丢包,但丢包却使TCP传输速度大幅下降。HTTP协议在传输层使用的是TCP协议,所以网页下载的速度就取决于TCP单线程下载的速度(因为网页就是单线程下载的)。

丢包使得TCP传输速度大幅下降的主要原因是丢包重传机制,控制这一机制的就是TCP拥塞控制算法。

Linux内核中提供了若干套TCP拥塞控制算法,已加载进内核的可以通过内核参数net.ipv4.tcp_available_congestion_control看到。


  1. Vegas

1994

年,Brakmo提出了一种新的拥塞控制机制TCP

Vegas,从另外的一个角度来进行拥塞控制。从前面可以看到,TCP的拥塞控制是基于丢包的,一旦出现丢包,于是调整拥塞窗口,然而由于丢包不一定是由

于网络进入了拥塞,但是由于RTT值与网络运行情况有比较密切的关系,于是TCP

Vegas利用RTT值的改变来判断网络是否拥塞,从而调整拥塞控制窗口。如果发现RTT在增大,Vegas就认为网络正在发生拥塞,于是开始减小拥塞窗

口,如果RTT变小,Vegas认为网络拥塞正在逐步解除,于是再次增加拥塞窗口。由于Vegas不是利用丢包来判断网络可用带宽,而是利用RTT变化来判断,因而可以更精确的探测网络的可用带宽,从而效率更好。然而Vegas的有一个缺陷,并且可以说致命的,最终影响TCP

Vegas并没有在互联网上大规模使用。这个问题就是采用TCP Vegas的流的带宽竞争力不及未使用TCP Vegas的流,

这是因为网络中路由器只要缓冲了数据,就会造成RTT的变大,如果缓冲区没有溢出的话,并不会发生拥塞,但是由于缓存数据就会导致处理时延,从而RTT变

大,特别是在带宽比较小的网络上,只要一开始传输数据,RTT就会急剧增大,这个在无线网络上特别明显。在这种情况下,TCP

Vegas降低自己的拥塞窗口,但是只要没有丢包的话,从上面看到标准的TCP是不会降低自己的窗口的,于是两者开始不公平,再这样循环下去,TCP

Vegas的效率就非常低了。其实如果所有的TCP都采用Vegas拥塞控制方式的话,流之间的公平性会更好,竞争能力并不是Vegas算法本身的问题。


适用环境:很难在互联网上大规模适用(带宽竞争力低)


2. Reno


Reno是目前应用最广泛且较为成熟的算法。该算法所包含的慢启动、拥塞避免和快速重传、快速恢复机制,是现有的众多算法的基础。从Reno运行机制中很容易看出,为了维持一个动态平衡,必须周期性地产生一定量的丢失,再加上AIMD机制--减少快,增长慢,尤其是在大窗口环境下,由于一个数据报的丢失所带来的窗口缩小要花费很长的时间来恢复,这样,带宽利用率不可能很高且随着网络的链路带宽不断提升,这种弊端将越来越明显。公平性方面,根据统计数据,Reno的公平性还是得到了相当的肯定,它能够在较大的网络范围内理想地维持公平性原则。


Reno算法以其简单、有效和鲁棒性成为主流,被广泛的采用。


但是它不能有效的处理多个分组从同一个数据窗口丢失的情况。这一问题在New Reno算法中得到解决。


基于丢包反馈的协议


近几年来,随着高带宽延时网络(High Bandwidth-Delay proct network)的普及,针对提高TCP带宽利用率这一点上,又涌现出许多新的基于丢包反馈的TCP协议改进,这其中包括HSTCP、STCP、BIC-TCP、CUBIC和H-TCP。


总的来说,基于丢包反馈

的协议是一种被动式的拥塞控制机制,其依据网络中的丢包事件来做网络拥塞判断。即便网络中的负载很高时,只要没有产生拥塞丢包,协议就不会主动降低自己的

发送速度。这种协议可以最大程度的利用网络剩余带宽,提高吞吐量。然而,由于基于丢包反馈协议在网络近饱和状态下所表现出来的侵略性,一方面大大提高了网络的带宽利用率;但另一方面,对于基于丢包反馈的拥塞控制协议来说,大大提高网络利用率同时意味着下一次拥塞丢包事件为期不远了,所以这些协议在提高网络带宽利用率的同时也间接加大了网络的丢包率,造成整个网络的抖动性加剧。


友好性


BIC-TCP、

HSTCP、STCP等基于丢包反馈的协议在大大提高了自身吞吐率的同时,也严重影响了Reno流的吞吐率。基于丢包反馈的协议产生如此低劣的TCP友好

性的组要原因在于这些协议算法本身的侵略性拥塞窗口管理机制,这些协议通常认为网络只要没有产生丢包就一定存在多余的带宽,从而不断提高自己的发送速率。

其发送速率从时间的宏观角度上来看呈现出一种凹形的发展趋势,越接近网络带宽的峰值发送速率增长得越快。这不仅带来了大量拥塞丢包,同时也恶意吞并了网络

中其它共存流的带宽资源,造成整个网络的公平性下降。


3. HSTCP(High Speed TCP)


HSTCP(高速传输控制协议)是高速网络中基于AIMD(加性增长和乘性减少)的一种新的拥塞控制算法,它能在高速度和大时延的网络中更有效地提高网络的吞吐率。它通过对标准TCP拥塞避免算法的增加和减少参数进行修改,从而实现了窗口的快速增长和慢速减少,使得窗口保持在一个足够大的范围,以充分利用带宽,它在高速网络中能够获得比TCP

Reno高得多的带宽,但是它存在很严重的RTT不公平性。公平性指共享同一网络瓶颈的多个流之间占有的网络资源相等。


TCP发送端通过网络所期望的丢包率来动态调整HSTCP拥塞窗口的增量函数。


拥塞避免时的窗口增长方式: cwnd = cwnd + a(cwnd) / cwnd


丢包后窗口下降方式:cwnd = (1-b(cwnd))*cwnd


其中,a(cwnd)和

b(cwnd)为两个函数,在标准TCP中,a(cwnd)=1,b(cwnd)=0.5,为了达到TCP的友好性,在窗口较低的情况下,也就是说在非

BDP的网络环境下,HSTCP采用的是和标准TCP相同的a和b来保证两者之间的友好性。当窗口较大时(临界值LowWindow=38),采取新的a

和b来达到高吞吐的要求。具体可以看RFC3649文档。


4. westwood


无线网络中,在大量研究的基础上发现tcpwestwood是一种较理想的算法,它的主要思想是通过在发送端持续不断的检测ack的到达速率来进行带宽估计,当拥塞发生时用带宽估计值来调整拥塞窗口和慢启动阈值,采用aiad(additive increase and

adaptive decrease)拥塞控制机制。它不仅提高了无线网络的吞吐量,而且具有良好的公平性和与现行网络的互操作性。存在的问题是不能很好的区分传输过程中的拥塞丢包和无线丢包,导致拥塞机制频繁调用。


5. H-TCP


高性能网络中综合表现比较优秀的算法是:h-tcp,但它有rtt不公平性和低带宽不友好性等问题。


6. BIC-TCP


BIC-TCP的缺点:首先就是抢占性较强,BIC-TCP的增长函数在小链路带宽时延短的情况下比起标准的TCP来抢占性强,它在探测阶段相当于是重新启动一个慢启动算法,而TCP在处于稳定后窗口就是一直是线性增长的,不会再次执行慢启动的过程。其次,BIC-TCP的的窗口控制阶段分为binary

search increase、max probing,然后还有Smax和Smin的区分,这几个值增加了算法上的实现难度,同时也对协议性能的分析模型增加了复杂度。在低RTT网络 和低速环境中,BIC可能会过于“积极”,因而人们对BIC进行了进一步的改进,即CUBIC。是Linux在采用CUBIC之前的默认算法。


7. CUBIC


CUBIC在设计上简化了BIC-TCP的窗口调整算法,

在BIC-TCP的窗口调整中会出现一个凹和凸(这里的凹和凸指的是数学意义上的凹和凸,凹函数/凸函数)的增长曲线,CUBIC使用了一个三次函数(即

一个立方函数),在三次函数曲线中同样存在一个凹和凸的部分,该曲线形状和BIC-TCP的曲线图十分相似,于是该部分取代BIC-TCP的增长曲线。另

外,CUBIC中最关键的点在于它的窗口增长函数仅仅取决于连续的两次拥塞事件的时间间隔值,从而窗口增长完全独立于网络的时延RTT,之前讲述过的HSTCP存在严重的RTT不公平性,而CUBIC的RTT独立性质使得CUBIC能够在多条共享瓶颈链路的TCP连接之间保持良好的RTT公平性。


CUBIC is a congestion control protocol for TCP (transmission control protocol) and thecurrent default TCP algorithm in Linux.

The protocol modifies the linear window

growth function of existing TCP standards to be a cubic function in

order to improve the scalability of TCP over fast and long distance

networks. It also achieves more equitable bandwidth allocations among

flows with different RTTs (round trip times) by making

the window growth to be independent of RTT – thus those flows grow

their congestion window at the same rate. During steady state, CUBIC

increases the window size aggressively when the window is far from the

saturation point, and the slowly when it is close

to the saturation point.This feature allows

CUBIC to be very scalable when the bandwidth and delay proct of the

network is large, and at the same time, be highly stable and also fair

to standard TCP flows.


8. STCP


STCP,Scalable tcp。


STCP算法是由 Tom Kelly于 2003年提出的 ,通过修改 TCP的窗口增加和减少参数来调整发送窗口大小 ,以适应高速网络的环境。该算法具有很高的链路利用率和稳定性,但该机制窗口增加和 RTT成反比 ,在一定的程度上存在着

RTT不公平现象 ,而且和传统 TCP流共存时 ,过分占用带宽 ,其 TCP友好性也较差。

❹ Linux下实现简单的TCP服务器与客户端通信

一直收的那个就不要写输入的代码了,直接无限读取就可以。
一直发的那个就不要写输出回的代码答了,直接无限输入就可以;
当然如果想两个都想在服务器和客户端各种实现,那么加入多线程吧。一个线程只管输入,一个线程只管输出

❺ 一般优化linux的内核,需要优化什么参数

首先要知道一点所有的TCP/IP的参数修改是临时的,因为它们都位于/PROC/SYS/NET目录下,如果想使参数长期保存,可以通过编辑/ETC/SYSCTL.CONF文件来实现,这里不做详细说明,只针对Linux的TCPIP内核参数优化列举相关参数:

1、为自动调优定义socket使用的内存

2、默认的TCP数据接收窗口大小(字节)

3、最大的TCP数据接收窗口

4、默认的TCP发送窗口大小

5、最大的TCP数据发送窗口

6、在每个网络接口接收数据包的速率比内核处理这些包速率快时,允许送到队列的数据包最大数目

7、定义了系统中每一个端口最大的监听队列长度

8、探测消息未获得相应时,重发该消息的间隔时间

9、在认定tcp连接失效之前,最多发送多少个keepalive探测消息等。

❻ linux 内核怎么实现tcp nat 转换的

1.两个网络接口、一个内,一个外2.NAT转换(内)操作步骤:1.设置
Linux内核
支持ip数据包的转回发答:echo
"1"
>
/proc/sys/net/
ipv4
/ip_forward2.加载实现NAT功能必要的内核模块:modprobe
ip_tablesmodprobe
ip_nat_ftpmodprobe
ip_nat_ircmodprobe...

❼ 如何修改linux tcp

Linux系统的TCP端口范围是可以修改的,适当的调整TCP端口范围以满足个人需求,那么具体要如何修改TCP端口范围呢?不妨通过实例来了解下吧。

在启动自定义服务的时候,希望使用8370端口,却发现端口已经被nginx或node占用了,无法启动。但是lvs又已经申请了,改端口的话比较麻烦。所以可以修改下
/proc/sys/net/ipv4/ip_local_port_range
参数,使tcp协议分配的端口从一个比较大的范围开始启用,这样,node或nginx就不会占用较小的端口了。

代码如下

echo ‘32768 61000’ 》 /proc/sys/net/ipv4/ip_local_port_range

补充:临时端口范围调整

你能使用netstat命令来显示有多少个连接进入这个状态:[若是生产环境下,最好先进行测试,然后考虑一个端口的合适范围]

代码如下

shell》netstat -n | grep TIME_WAIT

shell》cat /proc/sys/net/ipv4/ip_local_port_range

32768 61000

如果需要修改 echo “start-number
end-number”,start-number和end-number是0-65536端口号范围内的数,,0-1024最好不要用,通常是熟知端口,如果是专门的代理服务器的话,很多熟知端口没有使用,当然可以考虑!

不要忘记将echo命令加到系统启动脚本中,以使机器每一次重启后都生效

阅读全文

与linux内核处理tcp相关的资料

热点内容
网络线怎么拔 浏览:328
webclip文件有什么危害 浏览:700
创维32e360e怎么看网络电视 浏览:824
js网站加载动画 浏览:411
shelljava 浏览:666
系统文件被删可以还原吗 浏览:835
万方等网站怎么下载 浏览:857
为什么电脑文件显示是写字板 浏览:37
百度网盘打卡压缩文件 浏览:925
英语怎么读的网站 浏览:115
怎么远程改电脑开机密码 浏览:501
可以直接打开压缩文件的浏览器 浏览:654
qq相册一个文件可以存多少张照片 浏览:894
淘宝升级是不是免费的 浏览:819
西安万利网络科技有限公司怎么样 浏览:125
段位只是一个数据多少人吵散了 浏览:722
双网卡上不同网络 浏览:94
拳皇game怎么打压缩文件 浏览:748
有哪些两级配送物流网络 浏览:8
sql目录名加文件名 浏览:446

友情链接