TCP/IP详解
文章平均质量分 69
昭君出塞
每天进步一点点
展开
-
唯快不破:TCP/IP详解--TCP连接中TIME_WAIT状态过多
TIMEWAIT状态本身和应用层的客户端或者服务器是没有关系的。仅仅是主动关闭的一方,在使用FIN|ACK|FIN|ACK四分组正常关闭TCP连接的时候会出现这个TIMEWAIT。服务器在处理客户端请求的时候,如果你的程序设计为服务器主动关闭,那么你才有可能需要关注这个TIMEWAIT状态过多的问题。如果你的服务器设计为被动关闭,那么你首先要关注的是CLOSE_WAIT。原则TIM转载 2017-11-28 14:18:45 · 190 阅读 · 0 评论 -
唯快不破:TCP/IP详解--接收RST回应的几种情况
出现RST分节的情况可以在三种情况下发生,在连接建立时、在中间发送数据时、在连接关闭时。连接建立时出现RST回应的情况有:发送一个不存在的端口,想一个Listen的套接字或者端口上发送数据分节(不是创建连接的分节)发送数据时出现RST分节的情况有:数据出现错误、不是按照seq要求来发送数据时连接终止时发送RST分节的情况有:如果在关闭的时候设置了套接字选项,l_linger,那么在关闭转载 2017-11-23 10:29:45 · 560 阅读 · 0 评论 -
唯快不破:TCP/IP详解--如何处理TIME_WAIT状态
一、服务器关于网络的状态分布netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'会得到类似下面的结果,具体数字会有所不同:LAST_ACK 1SYN_RECV 14ESTABLISHED 79FIN_WAIT1 28FIN_WAIT2转载 2017-11-22 15:42:47 · 287 阅读 · 0 评论 -
唯快不破:TCP/IP详解--TCP/IP可靠的原理 滑动窗口 拥塞窗口
TCP和UDP处在同一层---运输层,但是TCP和UDP最不同的地方是,TCP提供了一种可靠的数据传输服务,TCP是面向连接的,也就是说,利用TCP通信的两台主机首先要经历一个“拨打电话”的过程,等到通信准备结束才开始传输数据,最后结束通话。所以TCP要比UDP可靠的多,UDP是把数据直接发出去,而不管对方是不是在收信,就算是UDP无法送达,也不会产生ICMP差错报文,这一经时重申了很多遍了。转载 2017-11-17 09:18:41 · 273 阅读 · 0 评论 -
唯快不破:TIME_WAIT状态的快速恢复和重用
声明一点:Linux中是无法修改tcp的TIME_WAIT值的,除非重新编译,起码我是没有找到怎么改。值得注意的是,net.ipv4.tcp_fin_timeout这个参数是FIN_WAIT_2的值,而不是TIME_WAIT的值。我不知道为何很多人都会把它当成是TIME_WAIT的值,想了一下,我觉得是两点:1.TIME_WAIT过于耀眼,以至于所有出现timeout,加上里面有个tcp的转载 2017-11-17 09:14:39 · 993 阅读 · 0 评论 -
唯快不破:TIME_WAIT重用与RFC1337
《TCP的TIME_WAIT快速回收与重用》中提到了“从外部干掉TIME_WAIT”。其实方法就是用RESET来终止一个TW状态的连接。之所以要终止掉这个TW连接是因为某种程度上我们对无聊等待一个行将就木的套接字的愤慨,另一方面也说明了要么我们没有关于old duplicate数据的概念,要么根本就不在乎它带来的损失,比如我们使用了SSL协议对连接进行了保护。 然而,不考虑这些额外转载 2017-11-17 09:09:50 · 350 阅读 · 0 评论 -
唯快不破:TCP/IP详解--TIME_WAIT状态的必要性
1 TCP关闭时的四次握手Tcp连接在关闭的的时候,执行的是一个四次握手的过程,下图是客户端发起的关闭时客户端和服务器的状态转换图具体过程如下:1、 客户端发送FIN报文段,进入FIN_WAIT_1状态。2、 服务器端收到FIN报文段,发送ACK表示确认,进入CLOSE_WAIT状态。3、 客户端收到FIN的确认报文段,进入FIN_WAIT_2状态。4、 服务器端发转载 2017-11-22 10:23:47 · 202 阅读 · 0 评论 -
唯快不破:TCP/IP详解--nagle算法和TCP_NODELAY
在客户端一直给服务器发送小数据的时候,接受到一个回应会在很长的时间以后,但是将多个小数据写操作合并成一个写操作,问题就没了。这个事件的缘由可能是TCP_NODELAY的原因现在大概明白,是由于nagle算法在捣乱。TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够转载 2017-11-22 09:33:08 · 361 阅读 · 0 评论 -
唯快不破:TCP/IP详解--滑动窗口与内核缓冲区之间的关系
在有关TCP连接的很多配置中,有很多选项有的配置net.ipv4.tcp_rmem:这个参数定义了TCP接收缓冲(用于TCP接收滑动窗口)的最小值、默认值、最大值net.ipv4.tcp_wmem:这个参数定义了TCP发送缓冲(用于TCP发送滑动窗口)的最小值、默认值、最大值netdev_max_backlog:当网卡接收数据包的速度大于内核处理的速度时,会有一个队列保转载 2017-11-22 09:15:55 · 288 阅读 · 0 评论 -
唯快不破:当你在地址栏输入一个URL地址回车后,将会发生什么事情
原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ 作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等。本文将更深入的研究当你输入一个网址的时候,后台到底发生了一件件什么转载 2017-11-21 21:09:55 · 300 阅读 · 0 评论 -
唯快不破:TCP/IP详解--TCP三次握手建立连接与四次握手终止连接
1.TCP连接的建立(1)首先是服务器初始化的过程,从CLOSED(关闭)状态开始通过顺序调用SOCKET、BIND、LISTEN和ACCEPT原语创建Socket套接字,进入LISTEN(监听)状态,等待客户端的TCP传输连接请求。 (2)客户端最开始也是从CLOSED状态开始调用SOCKET原语创建新的Socket套接字,然后在需要再调用CONNECT原语,向服务器发送一个转载 2017-11-23 19:05:42 · 214 阅读 · 0 评论 -
唯快不破:TCP/IP详解--拥塞控制 & 慢启动 快恢复 拥塞避免
TCP的拥塞控制1. 拥塞:即对资源的需求超过了可用的资源。若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增大而下降。 拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。转载 2017-11-23 19:36:14 · 225 阅读 · 0 评论 -
唯快不破:TCP/IP详解--连接状态变迁图CLOSE_WAIT
终止一个连接要经过4次握手。这由TCP的半关闭(half-close)造成的。既然一个TCP连接是全双工(即数据在两个方向上能同时传递,可理解为两个方向相反的独立通道),因此每个方向必须单独地进行关闭。这原则就是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向连接。当一端收到一个FIN,内核让read返回0来通知应用层另一端已经终止了向本端的数据传送。发送FIN通常是应用层对socke转载 2017-11-28 09:25:10 · 584 阅读 · 0 评论 -
唯快不破:TCP/IP详解--TCP/IP工作流程
Intemet采用TCP/IP协议。TCP/IP是一种网际互联通信协议,它包括两个核心协议TCP和IP。TCP称为传输控制协议,IP称为互联网络协议。TCP/IP的基本工作原理[2]在分层是有不同的标准将TCP/IP模型分为不同的层次,在OSI模型中分为七层,在TCP/IP中为四层,但是常用的是将两者进行融合,说分成五层(应用层,传输层,网络层,数据链路层,物理层)每一层都有相应的设备,每转载 2017-11-28 08:55:13 · 283 阅读 · 0 评论 -
唯快不破:HTTP协议状态码的含义
附录:HTTP协议状态码的含义 状态代码 状态信息 含义 100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新) 101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新 200 OK 一切正常,对GET和POST请求的应答文档跟在后面。 201 Created 服务器已经创转载 2017-11-28 08:53:54 · 222 阅读 · 0 评论 -
唯快不破:TCP/IP详解--五层协议的作用以及对应的设备
网络协议分层: l链路层:有时也称作链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。他们一起处理与电缆的物理接口细节。 网络层:有时也称为互联网层,处理分组在网络中的活动,例如分组的选路。在TCP/IP协议簇中,网络层协议包括IP协议,ICMP协议(Internet互联网控制报文协议)、以及IGMP协议(Internet组管理协议)(ps:分片是转载 2017-11-27 19:53:00 · 835 阅读 · 0 评论 -
唯快不破:TCP/IP详解--网络层 && IP首部格式
IP是TCP/IP协议簇中最为核心的协议。所有的TCP、UDP、ICMP以及IGMP数据都是以IP数据报的格式传输。IP提供不可靠、无连接的数据报传送符文。 不可靠的意思是它不能保证IP数据报能成功地到达目的地。IP仅提供尽力而为的传输符文。如果发生某种错误时,如某个路由器暂时用完了缓冲区,IP的处理办法就是丢弃,居然后发送ICMP消息报给信源端,任何要求的可靠性必须由上层提供。转载 2017-11-27 19:09:46 · 205 阅读 · 0 评论 -
唯快不破:TCP层的分段和IP层的分片之间的关系 & MTU和MSS之间的关系
首先说明:数据报的分段和分片确实发生,分段发生在传输层,分片发生在网络层。但是对于分段来说,这是经常发生在UDP传输层协议上的情况,对于传输层使用TCP协议的通道来说,这种事情很少发生。1,MTU(Maximum Transmission Unit,MTU),最大传输单元(1)以太网和802.3对数据帧的长度都有一个限制,其最大 值分别是1500和1492个字节。链路层的这个特性称作MTU转载 2017-11-27 10:11:14 · 416 阅读 · 0 评论 -
唯快不破:TCP/IP详解--数据链路层 & 以太网帧格式
链路层上最常见的封装就是以太网和IEEE 802封装,这里就使用以太网作为讲解的对象。一、概述 数据链路层属于计算机网络的底层,使用的信道主要有点对点信道和广播信道两种类型。 在TCP/IP协议族中,数据链路层主要有三个目的: 1)为IP模块发送和接收数据 2)为ARP模块发送ARP请求和接收ARP应答转载 2017-11-27 10:09:51 · 254 阅读 · 0 评论 -
唯快不破:TCP/IP详解--IP路由选择详解 ping命令的过程
一、实例一 在TCP/IP详解这本书中讲解IP路由选择的时候,过程讲解的比较粗略,这里详细介绍下其中的整体过程。在这篇文章中,将通过一个案例,来帮助大家深入了解IP路由的选择过程。希望这篇文章能够帮助大家扫清IP路由选择上的一些误区。如下图,现在这么一个网络。主机甲与主机乙分别在两个不同的网段上,中间通过路由器进行连接。现在假设主机甲要跟主机乙进行通信,那么主机甲如何才能够找到主机转载 2017-11-25 10:26:16 · 753 阅读 · 0 评论 -
唯快不破:TCP/IP详解--ICMP 控制报文和差错报文 && Tracerouter 命令的过程
一。为什么需要ICMP?因为IP协议不提供可靠性且不能保证信息传递,因此发生问题时,通知发送人是很重要的。(IP协议是一种不可靠的协议,无法进行差错控制。但IP协议可以借助其他协议来实现这一功能,如ICMP)二。什么是ICMP? ICMP: Internet Control Message Protocol 即Internet消息控制协议。ICMP报文分为两种类型(1)ICMP差错报告转载 2017-11-24 11:08:33 · 768 阅读 · 0 评论 -
唯快不破:一个数据包的互联网漫游记
尽管大多数最终用户都不关心 Internet 是如何工作的,但是我相信你们当中的仍然会有一些人对 Internet 运转的基本原理非常感兴趣。 在这篇文章中,我们会通过阐释一个数据包从源到目的地的征程,来试着拨开互联网的第一层神秘面纱。由此出发,我们会尽量让本文的内容保持简单基础。 在更进一步之前,让我们先快速简要地理解一下 DHCP 和 DNS 的概念。 DHCP 你有没转载 2017-11-21 20:37:54 · 249 阅读 · 0 评论 -
唯快不破:TCP/IP详解--TIME_WAIT状态存在的原因
1. 实际问题 初步查看发现,无法对外新建TCP连接时,线上服务器存在大量处于TIME_WAIT状态的TCP连接(最多的一次为单机10w+,其中引起报警的那个模块产生的TIME_WAIT约2w),导致其无法跟下游模块建立新TCP连接。 TIME_WAIT涉及到TCP释放连接过程中的状态迁移,也涉及到具体的socket api对TCP状态的影响,下面开始逐步介绍这转载 2017-11-21 18:58:39 · 250 阅读 · 0 评论 -
唯快不破:糊涂窗口综合症和Nagle算法
TCP/IP详解系列,关于tcp拥塞控制和数据流的地方讲的不细致,或许是涉及概念/算法太多,作者略去了一些对初学者来说比较陌生的细节吧。比如SWS未说明是什么就开始介绍其避免方法,还和nagle扯在了一起,直觉告诉我二者一定有猫腻,边搜索一下,果然很有收获。今天贴在这里,分享给大家。 关键字:糊涂窗口综合症 nagle算法 延迟ACK/clark算法 CORK选项第一部分 糊涂转载 2017-11-21 15:37:37 · 225 阅读 · 0 评论 -
唯快不破:TCP/IP详解--TCP/IP中三次握手 四次握手状态分析
TCP(Transmission Control Protocol) 传输控制协议TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急转载 2017-11-14 14:26:35 · 174 阅读 · 0 评论 -
唯快不破:TCP/IP详解--TIME_WAIT状态详解
Socket中的TIME_WAIT状态在高并发短连接的server端,当server处理完client的请求后立刻closesocket此时会出现time_wait状态然后如果client再并发2000个连接,此时部分连接就连接不上了,用linger强制关闭可以解决此问题,但是linger会导致数据丢失,linger值为0时是强制关闭,无论并发多少多能正常连接上,如果非0会发生部分连接转载 2017-11-28 15:31:21 · 6570 阅读 · 0 评论 -
唯快不破:TCP的那些事儿(下篇)
这篇文章是下篇,所以如果你对TCP不熟悉的话,还请你先看看上篇《TCP的那些事儿(上)》 上篇中,我们介绍了TCP的协议头、状态机、数据重传中的东西。但是TCP要解决一个很大的事,那就是要在一个网络根据不同的情况来动态调整自己的发包的速度,小则让自己的连接更稳定,大则让整个网络更稳定。在你阅读下篇之前,你需要做好准备,本篇文章有好些算法和策略,可能会引发你的各种思考,让你的大脑分配很多内存转载 2017-11-14 10:09:44 · 252 阅读 · 0 评论 -
唯快不破:TCP的那些事儿(上篇)
TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获。关于TCP这个协议的细节,我还是推荐你去看W.Richard Stevens的《TCP/IP 详解 卷1:协议》(当然,你也可以去读一下RFC793以及后面N多的RFC)。另外,本文我会使用英文术语,这样方便你通过这些英文关键词来查找相转载 2017-11-13 14:23:40 · 268 阅读 · 0 评论 -
唯快不破:ICMP报文剖析-自己实现ping程序
一.概述:1. ICMP允许主机或路由报告差错情况和提供有关异常情况。ICMP是因特网的标准协议,但ICMP不是高层协议,而是IP层的协议。通常ICMP报文被IP层或更高层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。2. ICMP报文作为IP层数据报的数据,加上数据报的首部,组成数据报发送出去。3. ICMP报文的种类有两种,即ICMP原创 2017-11-11 11:55:39 · 811 阅读 · 0 评论 -
唯快不破:TCP的分段和IP的分片
分组可以发生在运输层和网络层,运输层中的TCP会分段,网络层中的IP会分片。IP层的分片更多的是为运输层的UDP服务的,由于TCP自己会避免IP的分片,所以使用TCP传输在IP层都不会发生分片的现象。我们在学习TCP/IP协议时都知道,TCP报文段如果很长的话,会在发送时发生分段,在接受时进行重组,同样IP数据报在长度超过一定值时也会发生分片,在接收端再将分片重组。转载 2017-11-09 11:56:54 · 264 阅读 · 0 评论 -
唯快不破:tcp/ip协议栈中实现的几种定时器
这里总的来看看TCP中的各个定时器。TCP为每条连接总共建立了七个定时器,依次为:1 )“连接建立(connection establishment)”定时器在发送SYN报文段建立一条新连接时启动。如果在75秒内没有收到响应,连接建立将中止。2 )“重传(retransmission)”定时器在TCP发送某个数据段时设定。如果该定时器超时而对端的确认还未到达,TCP将重传该数据段。转载 2017-11-09 09:08:37 · 311 阅读 · 0 评论 -
唯快不破:谈谈TCP的Nagle算法与TCP_CORK选项
网络利用率与大量小包很多人都把Nagle算法的目的理解为“提高网络利用率”,事实上,Nagle算法所谓的“提高网络利用率”只是它的一个副作用(Side effect...),Nagle算法的主旨在于“避免发送‘大量’的小包”。Nagle算法并没有阻止发送小包,它只是阻止了发送大量的小包!诚然,发送大量的小包是降低了网络利用率,但是,发送少量必须发送的小包也是对网络利用率的降低,想彻底提转载 2017-11-08 16:04:13 · 382 阅读 · 0 评论 -
唯快不破:从TCP协议的原理来谈谈rst复位攻击
在谈RST攻击前,必须先了解TCP:如何通过三次握手建立TCP连接、四次握手怎样把全双工的连接关闭掉、滑动窗口是怎么传输数据的、TCP的flag标志位里RST在哪些情况下出现。下面我会画一些尽量简化的图来表达清楚上述几点,之后再了解下RST攻击是怎么回事。1、TCP是什么?TCP是在IP网络层之上的传输层协议,用于提供port到port面向连接的可靠的字节流传输转载 2017-11-07 13:16:12 · 315 阅读 · 0 评论 -
唯快不破:TCP网络关闭状态变换时序图
TCP共有11个网路状态,其中涉及到关闭的状态有5个。在我们编写网络相关程序的时候,这5个状态经常出现。因为这5个状态相互关联,相互纠缠,而且状态变化触发都是由应用触发,但是又涉及操作系统和网络,所以正确的理解TCP 在关闭时网络状态变化情况,为我们诊断网络中各种问题,快速定位故障有着非常重要的作用和意义。下是是根据W.Richard Stevens的《TCP/IP详解》一书的TCP状态转转载 2017-11-14 14:30:26 · 259 阅读 · 0 评论 -
唯快不破:TCP/IP详解--TCP网络传输数据包1460MSS和1448负载
TCP和14481448字节是实际场景下,单个TCP包的实际运载能力。也就是说,实际场景下,上层调用send(1000KB),下层会把这1000KB封装成多个TCP包进行发送。单个TCP包每次打包1448字节的数据进行发送。详细的TCP在传输情景wireshark截图如图1图1每个TCP包在理论上应该能打包更多数据才对,但是实际场景下TCP传输为什么会以这个1448转载 2017-11-28 19:18:02 · 1267 阅读 · 0 评论 -
唯快不破:为何TCP/IP协议栈设计成沙漏型的
前几天有人回复我的一篇文章问,为何TCP/IP协议栈设计成沙漏型的。这个问题问得好!我先不谈为何它如此设计,我一个80后根本就没有资格去评论上世纪80年代已经臻于成熟的一个设计,我只是说一下目前的趋势,然后你就会明白当初的这个设计是如此之好,以至于它不但满足了30年前的需求,并且适配到了现在以至于未来!总体趋势:通信网的退化网络在退化,我指的是IP网络在退化,所有的逻辑全部在纵向上挤向转载 2017-11-16 09:50:17 · 1228 阅读 · 0 评论 -
唯快不破:TCP/IP模型背后的内涵(二)
1.TCP/IP模型与OSI模型TCP/IP模型从一开始就是从实践走出来的,因此它能更好地迎合实际的应用而不单单停留在纸面上。从TCP/IP的发展史来看,它将IP从TCP独立出来的一部分原因是旨在将复杂度压缩在最少的位置,即主机中。否则中间节点作为传输控制的实现者,太复杂了。最终它仅仅分出了两个层,即TCP over IP。 OSI是在TCP/IP的初稿设计出来以后被提出的。它转载 2017-11-16 09:20:19 · 196 阅读 · 0 评论 -
唯快不破:tcp/ip模型背后的内涵(一)
20世纪最激动人心的东西太多了,我最喜欢的相对论算一个,然而在工程界,我觉得最伟大的发明就是TCP/IP,没有之一!它从单台的计算机互联,到承载着如今爆炸式的互联网以及今后的物联网过程中,一直都很优秀,并且最激动人心的是,它几乎还是保持着它刚出生的样子,如此的稳定!不变性本身就是美,就是永恒!再次读到大师的《The design philosophy of the DARPA internet转载 2017-11-16 09:11:59 · 226 阅读 · 0 评论 -
唯快不破:TCP/IP详解--UDP数据报中的IP分片
1、UDP首部2、UDP分片在第二章,讲链路层是,提到过以太网,刨除数据帧帧头,最多传输的长度为1500,也就是说,如果一个ip数据报,长度大于1500,则需要分片。分片方法:在ip头中3位标志,13位片偏移,这俩东西就是用来分片的。3位标志中:一个更多的片标识,除了最后一个分片,其它分片都要有这个标识,还有一个不分片标识,如果置上,则即便I转载 2017-11-16 09:07:42 · 1808 阅读 · 0 评论 -
唯快不破:TCP/IP详解--三次握手和四次握手 Dos攻击
TCP连接的状态图TCP建立连接的三次握手过程,以及关闭连接的四次握手过程贴一个telnet建立连接,断开连接的使用wireshark捕获的packet截图。1、建立连接协议(三次握手)(1)客户 端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和S转载 2017-11-21 09:01:22 · 637 阅读 · 0 评论