![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
TCP/IP详解
文章平均质量分 81
鱼思故渊
这个作者很懒,什么都没留下…
展开
-
从TCP协议的原理来谈谈rst复位攻击
在谈RST攻击前,必须先了解TCP:如何通过三次握手建立TCP连接、四次握手怎样把全双工的连接关闭掉、滑动窗口是怎么传输数据的、TCP的flag标志位里RST在哪些情况下出现。下面我会画一些尽量简化的图来表达清楚上述几点,之后再了解下RST攻击是怎么回事。1、TCP是什么?TCP是在IP网络层之上的传输层协议,用于提供port到port面向连接的可靠的字节流传输。我来用原创 2015-07-15 09:01:41 · 1877 阅读 · 2 评论 -
TCP/IP详解--几类定时器的作用(重传 保活定时器)
与数据链路层的ARQ协议相类似,TCP使用超时重发的重传机制。即:TCP每发送一个报文段,就对此报文段设置一个超时重传计时器。此计时器设置的超时重传时间RTO(Retransmission Time-Out)应当略大于TCP报文段的平均往返时延RTT,一般可取RTO=2RTT。但是,也可以根据具体情况人为调整RTO的值,例如可以设置此超时重传时间RTO=90秒。当超过了规定的超时重传时间还未收原创 2014-04-02 21:33:46 · 4682 阅读 · 0 评论 -
TCP/IP详解--五层协议的作用以及对应的设备
网络协议分层: l链路层:有时也称作链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。他们一起处理与电缆的物理接口细节。 网络层:有时也称为互联网层,处理分组在网络中的活动,例如分组的选录。在TCP/IP协议簇中,网络层协议包括IP协议,ICMP协议(Internet互联网控制报文协议)、以及IGMP协议(Internet组管理协议)原创 2014-04-01 15:02:49 · 7886 阅读 · 0 评论 -
TCP/IP详解--TIME_WAIT状态详解
Socket中的TIME_WAIT状态在高并发短连接的server端,当server处理完client的请求后立刻closesocket此时会出现time_wait状态然后如果client再并发2000个连接,此时部分连接就连接不上了,用linger强制关闭可以解决此问题,但是linger会导致数据丢失,linger值为0时是强制关闭,无论并发多少多能正常连接上,如果非0会发生部分连接原创 2014-03-18 10:29:30 · 12111 阅读 · 0 评论 -
TCP/IP详解--TCP连接中TIME_WAIT状态过多
TIMEWAIT状态本身和应用层的客户端或者服务器是没有关系的。仅仅是主动关闭的一方,在使用FIN|ACK|FIN|ACK四分组正常关闭TCP连接的时候会出现这个TIMEWAIT。服务器在处理客户端请求的时候,如果你的程序设计为服务器主动关闭,那么你才有可能需要关注这个TIMEWAIT状态过多的问题。如果你的服务器设计为被动关闭,那么你首先要关注的是CLOSE_WAIT。原则T原创 2014-03-18 10:30:59 · 71074 阅读 · 5 评论 -
TCP/IP详解--连接状态变迁图CLOSE_WAIT
终止一个连接要经过4次握手。这由TCP的半关闭(half-close)造成的。既然一个TCP连接是全双工(即数据在两个方向上能同时传递,可理解为两个方向相反的独立通道),因此每个方向必须单独地进行关闭。这原则就是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向连接。当一端收到一个FIN,内核让read返回0来通知应用层另一端已经终止了向本端的数据传送。发送FIN通常是应用层对socke原创 2014-03-18 10:33:03 · 9632 阅读 · 0 评论 -
TCP/IP详解--以太网帧结构 IP层关注的MTU 网络中MSS大小
对于千兆以太网,每秒能传输1000Mbit数据,即125000000B/s,每个以太网frame的固定开销有:前导码和帧开始符preamble(8B)、MAC(12B)、type(2B)、payload(46B~1500B)、CRC(4B)、gap(12B),因此最小的以太网帧是84B,每秒可以发送1488000帧。最大的以太网帧是1538B,每秒可发送81274帧。接下来算TCP有效负荷:一个T原创 2014-03-29 14:05:12 · 7049 阅读 · 0 评论 -
TCP/IP详解--举例明白发送/接收缓冲区、滑动窗口协议之间的关系
一个例子明白发送缓冲区、接受缓冲区、滑动窗口协议之间的关系。在上面的几篇文章中简单介绍了上述几个概念在TCP网络编程中的关系,也对应了几个基本socket系统调用的几个行为,这里再列举一个例子,由于对于每一个TCP的SOCKET来说,都有一个发送缓冲区和接受缓冲区与之对应,所以这里只做单方向交流,不做互动,在recv端不send,在send端不recv。细细揣摩其中的含义。一、recv端原创 2014-03-18 08:22:39 · 24073 阅读 · 6 评论 -
TCP的那些事儿(上篇)
TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获。关于TCP这个协议的细节,我还是推荐你去看W.Richard Stevens的《TCP/IP 详解 卷1:协议》(当然,你也可以去读一下RFC793以及后面N多的RFC)。另外,本文我会使用英文术语,这样方便你通过这些英文关键词来查找相转载 2014-09-29 10:34:18 · 1046 阅读 · 0 评论 -
TCP/IP详解--IP首部的选项字段
[摘要]一般教科书都介绍四种IP选项:路由记录选项、时间戳选项、松散源路由选项和严格源路由选项但对IP选项的介绍都比较简洁,而且多是抄袭steven的Unix环境,对于使用Windows的学习比较有困难这里我用《科来》说明一下IP选项的情况[关键词] IP选项 IP包分析 网络分析 科来网络分析软件一、带IP选项的数据包的产生首先要说明的是,并非任何IP包都带有IP选项转载 2014-10-07 15:32:55 · 5698 阅读 · 3 评论 -
TCP/IP详解--UDP数据报中的IP分片
1、UDP首部2、UDP分片在第二章,讲链路层是,提到过以太网,刨除数据帧帧头,最多传输的长度为1500,也就是说,如果一个ip数据报,长度大于1500,则需要分片。分片方法:在ip头中3位标志,13位片偏移,这俩东西就是用来分片的。3位标志中:一个更多的片标识,除了最后一个分片,其它分片都要有这个标识,还有一个不分片标识,如果置上,则即便I原创 2014-09-18 16:04:41 · 15099 阅读 · 2 评论 -
TCP/IP详解--滑动窗口与内核缓冲区之间的关系
在有关TCP连接的很多配置中,有很多选项有的配置net.ipv4.tcp_rmem:这个参数定义了TCP接收缓冲(用于TCP接收滑动窗口)的最小值、默认值、最大值net.ipv4.tcp_wmem:这个参数定义了TCP发送缓冲(用于TCP发送滑动窗口)的最小值、默认值、最大值netdev_max_backlog:当网卡接收数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包原创 2014-06-05 15:16:12 · 6108 阅读 · 1 评论 -
TCP/IP详解--TCP的分段和IP的分片
我们在学习TCP/IP协议时都知道,TCP报文段如果很长的话,会在发送时发生分段,在接受时进行重组,同样IP数据报在长度超过一定值时也会发生分片,在接收端再将分片重组。 我们先来看两个与TCP报文段分段和IP数据报分片密切相关的概念。 MYU(最大传输单元) MTU前面已经说过了,是链路层中的网络对数据帧的一个限制,依然以以太网为例,MTU为1500个字节。一个IP数原创 2014-10-07 22:03:14 · 6745 阅读 · 0 评论 -
TCP/IP详解--拥塞控制 & 慢启动 快恢复 拥塞避免
TCP的拥塞控制1. 拥塞:即对资源的需求超过了可用的资源。若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增大而下降。 拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。原创 2014-04-03 09:08:24 · 10044 阅读 · 2 评论 -
TCP/IP详解--接收RST回应的几种情况
应该没有人会质疑,现在是一个网络时代了。应该不少程序员在编程中需要考虑多机、局域网、广域网的各种问题。所以网络知识也是避免不了学习的。而且笔者一直觉得TCP/IP网络知识在一个程序员知识体系中必需占有一席之地的。在TCP协议中RST表示复位,用来异常的关闭连接,在TCP的设计中它是不可或缺的。发送RST包关闭连接时,不必等缓冲区的包都发出去,直接就丢弃缓存区的包发送RST包。而接收端收到RST原创 2014-04-03 17:22:41 · 16642 阅读 · 3 评论 -
TCP/IP详解--TIME_WAIT状态存在的原因
1. 实际问题 初步查看发现,无法对外新建TCP连接时,线上服务器存在大量处于TIME_WAIT状态的TCP连接(最多的一次为单机10w+,其中引起报警的那个模块产生的TIME_WAIT约2w),导致其无法跟下游模块建立新TCP连接。 TIME_WAIT涉及到TCP释放连接过程中的状态迁移,也涉及到具体的socket api对TCP状态的影响,下面开始逐步介绍这原创 2014-09-01 20:15:37 · 11876 阅读 · 0 评论 -
TCP/IP详解--TCP网络传输数据包1460MSS和1448负载
TCP和14481448字节是实际场景下,单个TCP包的实际运载能力。也就是说,实际场景下,上层调用send(1000KB),下层会把这1000KB封装成多个TCP包进行发送。单个TCP包每次打包1448字节的数据进行发送。详细的TCP在传输情景wireshark截图如图1图1每个TCP包在理论上应该能打包更多数据才对,但是实际场景下TCP传输为什么会以原创 2014-03-18 08:29:53 · 11299 阅读 · 1 评论 -
TCP/IP详解--TCP/IP连接各个状态转换分析
一、Linux服务器上11种网络连接状态: 图:TCP的状态机通常情况下,一个正常的TCP连接,都会有三个阶段:1、TCP三次握手; 2、数据传送; 3、TCP四次挥手注:以下说明最好能结合”图:TCP的状态机”来理解。SYN: (同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。表示一个新的TCP连接原创 2014-09-18 17:15:25 · 3640 阅读 · 0 评论 -
TCP/IP详解--TCP/IP中三次握手 四次握手状态分析
TCP(Transmission Control Protocol) 传输控制协议TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急原创 2014-09-18 19:40:42 · 1285 阅读 · 0 评论 -
TCP/IP详解--tcp/ip协议栈中实现的几种定时器
这节讨论TCP的定时处理函数。在前面的讨论中,我们看到了与TCP的各种定时器,包括重传定时器、持续定时器和保活定时器,此外TCP中还有几个定时器我们还未涉及。这里总的来看看TCP中的各个定时器。TCP为每条连接总共建立了七个定时器,依次为:1 )“连接建立(connection establishment)”定时器在发送SYN报文段建立一条新连接时启动。如果在75秒内没有收到响应,连接建立将中转载 2014-10-14 11:42:46 · 4109 阅读 · 0 评论 -
TCP/IP详解--ICMP报文分析
一.概述:1. ICMP允许主机或路由报告差错情况和提供有关异常情况。ICMP是因特网的标准协议,但ICMP不是高层协议,而是IP层的协议。通常ICMP报文被IP层或更高层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。2. ICMP报文作为IP层数据报的数据,加上数据报的首部,组成数据报发送出去。3. ICMP报文的种类有两种,即ICMP差错报告报文原创 2014-10-07 21:18:05 · 3623 阅读 · 0 评论 -
TCP/IP详解--流量控制机制 滑动窗口 Nagle算法 糊涂窗口综合征
1. 利用滑动窗口实现流量控制 如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。 利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。 设A向B发送数据。在连接建立时,B告诉了A:“我的接收窗口是 rwnd = 400 ”(这里的 rwnd 表示 receiver原创 2014-04-02 21:54:33 · 3758 阅读 · 0 评论 -
TCP/IP详解--滑动窗口、拥塞窗口、慢启动、Negle算法
TCP的数据流大致可以分为两类,交互数据流与成块的数据流。交互数据流就是发送控制命令的数据流,比如relogin,telnet,ftp命令等等;成块数据流是用来发送数据的包,网络上大部分的TCP包都是这种包。 很明显,TCP在传输这两种类型的包时的效率是不一样的,因此为了提高TCP的传输效率,应该对这两种类型的包采用不同的算法。 总之,TCP的传输原则是尽量减少小分原创 2014-10-11 17:39:53 · 14568 阅读 · 1 评论 -
TCP/IP详解--TCP/UDP优化设置总结& MTU的相关介绍
首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应用层 它们的关系是 数据帧{IP包{TCP或UDP包{Data}}} -----------------------------------------原创 2014-11-08 19:34:37 · 4703 阅读 · 1 评论 -
TCP/IP详解--TCP首部选项字段的作用
1、TCP首部选项字段多达40B,记下一些常用的东西:2、选项结束字段(EOP,0x00),占1B,一个报文段仅用一次。放在末尾用于填充,用途是说明:首部已经没有更多的消息,应用数据在下一个32位字开始处3、无操作字段(NOP, 0x01),占1B,也用于填充,放在选项的开头4、MSS(最大报文段长度),格式如下:种类(1B,值为2),长度(1B,值为4),数值(2B)原创 2014-12-30 12:22:57 · 4870 阅读 · 0 评论 -
TCP/IP详解--TCP首部的TimeStamp时间戳选项
TCP应该是以太网协议族中被应用最为广泛的协议之一,这里就聊一聊TCP协议中的TimeStamp选项。这个选项是由RFC 1323引入的,该C建议提交于1992年,到今天已经足足有20个年头。不过相信大部分程序猿对这个建议还是相当陌生。要理解为啥需要用TimeStamp选项,还需要从TCP协议的几个基本设计说起。TCP协议的几个设计初衷,以及引发的问题:1. 协议规定收端不需要响应每一原创 2014-10-07 12:35:14 · 8437 阅读 · 1 评论 -
TCP/IP详解--TCP/IP可靠的原理 滑动窗口 拥塞窗口
TCP和UDP处在同一层---运输层,但是TCP和UDP最不同的地方是,TCP提供了一种可靠的数据传输服务,TCP是面向连接的,也就是说,利用TCP通信的两台主机首先要经历一个“拨打电话”的过程,等到通信准备结束才开始传输数据,最后结束通话。所以TCP要比UDP可靠的多,UDP是把数据直接发出去,而不管对方是不是在收信,就算是UDP无法送达,也不会产生ICMP差错报文,这一经时重申了很多遍了。原创 2014-09-02 22:51:15 · 4673 阅读 · 0 评论 -
TCP/IP详解--三次握手和四次握手 Dos攻击
TCP连接的状态图TCP建立连接的三次握手过程,以及关闭连接的四次握手过程贴一个telnet建立连接,断开连接的使用wireshark捕获的packet截图。1、建立连接协议(三次握手)(1)客户 端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和S原创 2014-09-01 22:19:14 · 5578 阅读 · 0 评论 -
TCP/IP详解--TCP传输小数据包效率问题
摘要:当使用TCP传输小型数据包时,程序的设计是相当重要的。如果在设计方案中不对TCP数据包的延迟应答,Nagle算法,Winsock缓冲作用引起重视,将会严重影响程序的性能。这篇文章讨论了这些问题,列举了两个案例,给出了一些传输小数据包的优化设计方案。背景:当Microsoft TCP栈接收到一个数据包时,会启动一个200毫秒的计时器。当ACK确认数据包发出之后,计时器会复位,接原创 2013-12-11 21:52:43 · 4355 阅读 · 0 评论 -
TCP/IP协议栈--IP首部选项字段的分析
IP输入函数(ipintr)将在验证分组格式(检验和,长度等)之后,确定分组是否到达目的地之前,对选项进行处理。这表明分组所遇到的每个路由器以及最终的目的主机都对要分组的选项进行处理。IP分组内可以包含某些在分组被转发或被接收之前处理的可选字段。IP实现可以用任意顺序处理选项。标准IP首部之后最多可跟40字节的选项。1.选项格式IP选项字段可能包含0个或多个单独选项。选原创 2014-10-07 13:00:20 · 3887 阅读 · 0 评论 -
TCP/IP详解--TCP首部选项中时间戳选项的作用
在TCP选项字段中为TCP预留有时间戳功能,不管在网络层面还是应用层面,TCP时间戳往往被大家认为是一个系统行为,并忽略其存在。其实在某些环境下,TCP时间戳同样可以成为大家在时延问题troubleshooting定位时的一个利器。首先,让我们先来回顾一下TCP时间戳的理论知识。1) TCP时间戳位于TCP选项中,kind=8;lenth=10;data由timestamp和timesta转载 2014-10-14 11:40:31 · 20924 阅读 · 0 评论 -
TCP/IP模型背后的内涵(二)
1.TCP/IP模型与OSI模型TCP/IP模型从一开始就是从实践走出来的,因此它能更好地迎合实际的应用而不单单停留在纸面上。从TCP/IP的发展史来看,它将IP从TCP独立出来的一部分原因是旨在将复杂度压缩在最少的位置,即主机中。否则中间节点作为传输控制的实现者,太复杂了。最终它仅仅分出了两个层,即TCP over IP。 OSI是在TCP/IP的初稿设计出来以后被提出的。它转载 2014-09-03 11:26:53 · 935 阅读 · 0 评论 -
为何TCP/IP协议栈设计成沙漏型的
前几天有人回复我的一篇文章问,为何TCP/IP协议栈设计成沙漏型的。这个问题问得好!我先不谈为何它如此设计,我一个80后根本就没有资格去评论上世纪80年代已经臻于成熟的一个设计,我只是说一下目前的趋势,然后你就会明白当初的这个设计是如此之好,以至于它不但满足了30年前的需求,并且适配到了现在以至于未来!总体趋势:通信网的退化网络在退化,我指的是IP网络在退化,所有的逻辑全部在纵向上挤向转载 2014-09-03 11:25:45 · 1599 阅读 · 0 评论 -
TCP/IP协议疑难杂症全景解析
说明:1).本文以TCP的发展历程解析容易引起混淆,误会的方方面面2).本文不会贴大量的源码,大多数是以文字形式描述,我相信文字看起来是要比代码更轻松的3).针对对象:对TCP已经有了全面了解的人。因为本文不会解析TCP头里面的每一个字段或者3次握手的细节,也不会解释慢启动和快速重传的定义4).除了《TCP/IP详解》(卷一,卷二)以及《Unix网络编程》以及Linux源代码之外,转载 2014-09-02 22:29:13 · 1963 阅读 · 0 评论 -
TIME_WAIT重用与RFC1337
《TCP的TIME_WAIT快速回收与重用》中提到了“从外部干掉TIME_WAIT”。其实方法就是用RESET来终止一个TW状态的连接。之所以要终止掉这个TW连接是因为某种程度上我们对无聊等待一个行将就木的套接字的愤慨,另一方面也说明了要么我们没有关于old duplicate数据的概念,要么根本就不在乎它带来的损失,比如我们使用了SSL协议对连接进行了保护。 然而,不考虑这些额外转载 2014-09-03 11:01:31 · 973 阅读 · 0 评论 -
糊涂窗口综合症和Nagle算法
TCP/IP详解系列,关于tcp拥塞控制和数据流的地方讲的不细致,或许是涉及概念/算法太多,作者略去了一些对初学者来说比较陌生的细节吧。比如SWS未说明是什么就开始介绍其避免方法,还和nagle扯在了一起,直觉告诉我二者一定有猫腻,边搜索一下,果然很有收获。今天贴在这里,分享给大家。 关键字:糊涂窗口综合症 nagle算法 延迟ACK/clark算法 CORK选项第一部分 糊涂转载 2014-09-01 21:51:58 · 849 阅读 · 0 评论 -
一个数据包的互联网漫游记
尽管大多数最终用户都不关心 Internet 是如何工作的,但是我相信你们当中的仍然会有一些人对 Internet 运转的基本原理非常感兴趣。 在这篇文章中,我们会通过阐释一个数据包从源到目的地的征程,来试着拨开互联网的第一层神秘面纱。由此出发,我们会尽量让本文的内容保持简单基础。 在更进一步之前,让我们先快速简要地理解一下 DHCP 和 DNS 的概念。 DHCP 你有没转载 2014-08-29 10:01:22 · 823 阅读 · 0 评论 -
当你在地址栏输入一个URL地址回车后,将会发生什么事情
原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ 作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等。本文将更深入的研究当你输入一个网址的时候,后台到底发生了一件件什么转载 2014-08-29 09:56:52 · 1394 阅读 · 0 评论 -
TCP/IP详解--TCP/IP工作流程
Intemet采用TCP/IP协议。TCP/IP是一种网际互联通信协议,它包括两个核心协议TCP和IP。TCP称为传输控制协议,IP称为互联网络协议。[编辑]TCP/IP的基本工作原理[2] TCP/IP模型有四层(应用层、传输层、网际层、网络接口层),每层分别具有不同的协议和功能,TCP/IP协议族是一组在不同层上的多个协议的组合。各层在实现自身的功能时,使用它的直接下层提供的原创 2014-03-29 20:41:04 · 6803 阅读 · 0 评论 -
TCP/IP详解--nagle算法和TCP_NODELAY
在客户端一直给服务器发送小数据的时候,接受到一个回应会在很长的时间以后,但是将多个小数据写操作合并成一个写操作,问题就没了。这个事件的缘由可能是TCP_NODELAY的原因现在大概明白,是由于nagle算法在捣乱。TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的原创 2014-04-19 14:38:38 · 2843 阅读 · 2 评论