




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
TCP包头分析 2010-05-25 10:06SYN同步序号,用来发起一个连接。syn位用于建立连接的过程(如TCP三次握手)。ACK建立连接和数据发送,关闭连接都用。 ack位被设置为1表示ack_seq是有效的。如果ack为0,则该数据段不包含确认信息,所以,ack_seq域应该被忽略。RST连接异常。FIN用于释放一个连接。它表示发送方已经没有数据要传输了。SEQ等于该主机选择本次连接的初始序号加上报文段中第一个字节在整个数据流中的序号。在连接建立的时候,会随机选择一个初始序号。序号是32 bit的无符号数。WINDOW16 位滑动窗口的大小,单位为字节。接受方用来通知发送方接受 buffer 的大小,发送方不能过分的发送,导致接受方的 buffer 溢出。 PSH接收方在收到数据后应立即请求将数据递交给应用程序,而不是将它缓冲起来直到整个缓冲区接收满为止(这样做的目的可能是为了效率的原因) URG发送紧急数据。这个设施可以代替中断信息。TCP 的重传机制 Go-Back-N 接受方不断发送 ACK 信息和 32 位的 acknowledge seq number, 用来通知发送方,期望接收到数据包的序号,同时也表示已经正确接收的数据。acknowledge seq number 不一定要连续。Delayed ACK TCP 并不是对收到的数据立即发送 ACK 信息,而是希望ACK 信息随着数据一起发送。如果在 200 ms 内,没有数据需要发送,那么就发送一个不含数据的 ACK 数据包。这个数据包不应该增加 TCP 的顺序编号,接受方应该从数据长度上判断出这个包是一个控制包。 还有一种算法是如果接收到一个数据包之后,启动一个计时器,在计时器超时之前没有可供 piggy back 的数据发送,那么就发送一个 纯 ACK ,一个不带数据包的 ACK 消息。滑动窗口 当收到 ACK 的时候,发送方的窗口变大,也叫开窗, 当发送数据的时候,发送方的窗口变小,也叫关窗。在窗子完全关闭的时候,不能在发送数据了。下面要用到的一些术语的定义:数据段(segment):一个数据段就是任意的TCP/IP数据或确认包(或两者兼备)。发送端最大数据段尺寸(SMSS):SMSS是发送端能发送的最大数据段的尺寸。接收端最大数据段尺寸(RMSS):RMSS是接收端愿意接收的最大数据段的尺寸。满尺寸数据段:一个包括允许最大数目数据的数据段(也就是说,一个包括SMSS字节数据的数据段)。拥塞窗口(the congestion window:cwnd):是对发送端收到确认(ACK)之前能向网络传送的最大数据量的一个发送端限制。接收端窗口(rwnd):是对未完成数据量的接收端限制。Cwnd和rwnd的最小值决定了数据传送。慢启动阀值(ssthresh),被用来确定是用慢启动还是用拥塞避免算法来控制数据传送。初始窗口(iw):初始窗口是三次握手完成后发送端的拥塞窗口的尺寸。丢失窗口(lw):丢失窗口是在一个TCP根据它的重传定时器检测到了数据丢失之后,拥塞窗口的尺寸。重启窗口(rw):重启窗口是TCP在一段闲置期之后重新开始传送后拥塞窗口的尺寸(如果使用慢启动算法;参见4.1节以获取更多的讨论)。传送尺寸:已经被发送但还没有确认的数据的总量。拥塞控制算法 (四种:慢启动,拥塞避免,快速重传和快速恢复) 1.慢启动和拥塞避免 慢启动算法在cwndssthresh时使用。当cwnd和ssthresh相等时,发送端既可以使用慢启动也可以使用拥塞避免。cwndssthresh时 慢启动 发送方收到一个 ACK ,增加cwnd 。 cwnd = cwnd + MSS (MSS ssthresh时: 拥塞避免 收到一个 ACK 的时候,增加 cwnd。 cwnd = cwnd + MSS*MSS/cwnd 如果有 3 各重复的 ACK ,那么应该进入 FastRecovery 的过程。如果有重传,那么应该进入 Slow Start 的过程。可以重传第一个 Unacknowledged segment ,也可以重传许多。DUP ACK 不能增加 2.快速重传/快速恢复 快速重传算法以三个重复ACK的到达(收到四个一样的ACK,其间没有任何其他包到达)为一个数据段已经丢失的标志。在收到三个重复ACK之后,TCP不等重传定时器超时就重传看来已经丢失的数据段。 当一个TCP用重传定时器检测到数据段丢失时,ssthresh的值必须设定大于等式中给出的值: ssthresh = max (FlightSize / 2, 2*SMSS) (FlightSize是仍在网络中传送的数据量) 快速重传 当收到 3 各 DUPACK 的时候会进入 Fast Recovery .重传第一个 unacknowledged segment. 改变 ssthres , sshres = max(flightsize/2, 2*SMSS) 改变 cwnd , cwnd = 3*SMSS 重置重传定时器。 如果还有新的 DUPACK 到来,那么 cwnd 还会增加, 每次增加 SMSS, 当有 ACK 确认最新的数据,那么 cwnd 设置成为 sshres , 进入 Congestion Avoid 的过程。 如果在 fast Recovery 的过程中,出现重传, 应该进入 Slow Start 的过程。 发生重传的处理 cwnd = MSS sshres = max(flightsize/2, 2*MSS) 重置对于 DUPACK 的计数器 RTO = min(2*RTO, 64 seconds) 如果一个包超过重传 4 次,那么 TCP 连接关闭。 重置关于重传的计时器。 停止测量 RTT 和 RTO 。 不再发送新的数据包 当所有 on the fly 的包都得到确认之后,启动关于重传的计时器,进入 slow start 的过程 如果在重传的过程中,还发生了重传,也就是计时器超时。 重新分组。发送方不一定重传和原来一模一样的包,也可以在重传的包内包含新的数据,以增加吞吐量. 尤其是有很多小包的时候。应该发送出去多少个重传的包呢? 如果在 slow start 的时候超时,应该传送一个 cwnd 那么多的包,cwnd = MSS. 如果在 congestion avoid 的时候超时,应该传送一个 cwnd 那么多的包,cwnd = MSS. 如果因为三个 dup ack ,那么应该发送 1 个包。 如果在 fast recover 的过程中, 每收到一个 DUP ACK ,增加 cwnd 一个 MSS ,发送一个新包。 RTO 和 RTT 的测量 RTT_Err = RTT_Delay - RTT_Ave RTT_Ave = RTT_Ave + 0.125 RTT_Err RTT_Dev = 0.75 RTT_Dev + 0.25 | RTT_Err | RTO = RTT_Ave + 4 RTT_Dev 根据实现不同,可能所有的包都作测量,也可能选择某些包作测量。 乱序的包 如果收到乱序的包,那么就应该立即发送 ACK ,以确保对方知道 DUPACK ,然后及时重传。 今天对网络数据抓包!查了一下TCP的资料!觉得对大家可能有用就放在这里吧!TCP 的包头SEQ 等于该主机选择本次连接的初始序号加上报文段中第一个字节在整个数据流中的序号。在连接建立的时候,会随机选择一个初始序号,如果发送的数据包中的字节是整个数据流中的第 256 字节到 512 字节。 WINDOW 16 个字节,接受方用来通知发送方,我的接受 buffer 的大小,发送方不能过分的发送,导致接受方的 buffer 溢出。 单位是字节。 SYN 建立连接用的。 ACK 建立连接和数据发送,关闭连接都用。 RST 连接异常。 FIN 关闭连接。 PSH 表示接受方应该尽快把数据发送给应用程序, 现在的 TCP 模块一般都可以自动识别处理 PSH 。 URG 发送带外数据。 TCP 的重传机制 Go-Back-N接受方不断发送 ACK 信息和 32 位的 acknowledge seq number, 用来通知发送方,期望接收到数据包的序号,同时也表示已经正确接收的数据。acknowledge seq number 不一定要连续。 Delayed ACKTCP 并不是对收到的数据立即发送 ACK 信息,而是希望 ACK 信息随着数据一起发送。 如果在 200 ms 内,没有数据需要发送,那么就发送一个不含数据的 ACK 数据包。 这个数据包不应该增加 TCP 的顺序编号,接受方应该从数据长度上判断出这个包是一个控制包。 还有一种算法是如果接收到一个数据包之后,启动一个计时器,在计时器超时之前没有可供 piggy back 的数据发送,那么就发送一个 pure ACK ,一个不带数据包的 ACK 消息。 Nagle 算法要解决得的问题 只传一个字节的数据,需要带上 20 bytes 的 IP header, 20 bytes 的 TCP header , 效率很低。 解决办法 让 TCP 的连接只允许一个 TCP 的小包发送出去而没有得到确认。也就是说,如果发送了一个小包出去, 那么在没有收到确认消息之前,不能在发送新的小数据包。 分析 如果往返时间很短的话,在下一个小数据包到来之前, 就收到了对于上一个这个数据包的确认信息,所以在这种情况下, Nagle 算法不会起作用。字节的数据在以太网上的 RTT 大约是 16 ms 。 如果往返时间很长的话,在发送下一个小数据包的时候,还没有接收到上一个小数据包的确认信息,那么就算拥塞算法允许发送数据包,也不可以发送,这就是 Nagle 算法,这样就可以把很多小的数据积累起来, 在一个数据包中一起发送。尤其适用于 Rlogin 等交互式服务。 滑动窗口当收到 ACK 的时候,发送方的窗口变大,也叫开窗, 当发送数据的时候,发送方的窗口变小,也叫关窗。 在窗子完全关闭的时候,不能在发送数据了。 慢启动cwnd ,表示拥塞窗口的大小,单位是字节。初始化的时候, cwnd 是一个数据段的大小。cwnd 的增加是一个数据段的长度。 发送方收到一个 ACK 那么就增加 cwnd 。 cwnd = cwnd + MSScwnd = min(cwnd,awnd)问题, 如果是 DUPACK ,那么也应该增加。 问题, 一个 segment 的大小是可变的,假设是个固定值 当出现 3 个 DUPACK 的时候,进入 Fast Recovery 过程。 ?当出现超时重传,则进到 Congestion Avoid 的过程。 当 cwnd 大于 ssthrd ,那么进入 Congestion Avoid 的过程。 Congestion Avoid 收到一个 ACK 的时候,增加 cwnd。 cwnd = cwnd + MSS * MSS / cwndcwnd = min(cwnd,awnd)如果有 3 各重复的 ACK ,那么应该进入 Fast Recovery 的过程。 如果有重传,那么应该进入 Slow Start 的过程。可以重传第一个 Unacknowledged segment ,也可以重传许多。 DUP ACK 不能增加 Fast Recovery 当收到 3 各 DUPACK 的时候会进入 Fast Recovery . 重传第一个 unacknowledged segment. 改变 ssthres , sshres = max(flightsize/2, 2*MSS) 改变 cwnd , cwnd = sshres + 3 重置重传定时器。 如果还有新的 DUPACK 到来,那么 cwnd 还会增加, 每次增加 MSS, 当有 ACK 确认最新的数据,那么 cwnd 设置成为 sshres , 进入 Congestion Avoid 的过程。 问题,如果在 fast Recovery 的过程中,出现重传, 应该进入 Slow Start 的过程。 发生重传的处理cwnd = MSS sshres = max(flightsize/2, 2*MSS) 重置对于 DUPACK 的计数器 RTO = min(2*RTO, 64 seconds) 如果一个包超过重传 4 次,那么 TCP 连接关闭。 重置关于重传的计时器。 停止测量 RTT 和 RTO 。 不再发送新的数据包 当所有 on the fly 的包都得到确认之后,启动关于重传的计时器,进入 slow start 的过程 如果在重传的过程中,还发生了重传,也就是计时器超时。 重新分组。发送方不一定重传和原来一模一样的包,也可以在重传的包内包含新的数据,以增加吞吐量. 尤其是有很多小包的时候。 应该发送出去多少个重传的包呢? 如果在 slow start 的时候超时,应该传送一个 cwnd 那么多的包,cwnd = MSS. 如果在 congestion avoid 的时候超时,应该传送一个 cwnd 那么多的包,cwnd = MSS. 如果因为三个 dup ack ,那么应该发送 1 个包。 如果在 fast recover 的过程中, 每收到一个 DUP ACK ,增加 cwnd 一个 MSS ,发送一个新包。 RTO 和 RTT 的测量RTT_Err = RTT_Delay - RTT_AveRTT_Ave
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年影视行业报告:工业化制作流程与质量控制关键节点解析
- 节后复工培训课件
- 教师招聘之《小学教师招聘》能力测试备考题及参考答案详解
- 教师招聘之《小学教师招聘》通关试卷提供答案解析附答案详解(基础题)
- 教师招聘之《幼儿教师招聘》模拟题库讲解及答案详解【全优】
- 演出经纪人之《演出经纪实务》模拟考试高能及完整答案详解(夺冠)
- 教师招聘之《小学教师招聘》提分评估复习及答案详解(全优)
- 2025年教师招聘之《幼儿教师招聘》练习题库包(含答案详解)
- 2025年教师招聘之《幼儿教师招聘》模拟题库完整答案详解
- 2025年教师招聘之《幼儿教师招聘》考前冲刺练习题库附参考答案详解(典型题)
- 中石化某装置设备、管道保温及保冷施工方案
- 耳鼻喉科眼科门诊临床技术操作规范2022版
- 党章党纪党规知识竞赛案例分析30题(含答案)
- 火力发电厂节水导则DLT783-2023年
- 艾滋病梅毒丙肝检测与解释
- GB/T 22076-2008气动圆柱形快换接头插头连接尺寸、技术要求、应用指南和试验
- GB/T 12325-2008电能质量供电电压偏差
- CJJ28-2014城镇供热管网工程施工及验收规范
- 新《高等教育学》考试复习题库450题(含各题型)
- 三字经全文带拼音注释打印版
- 《绿色建筑评价标准》解读
评论
0/150
提交评论