1、Delayed Acknowledgements:TCP通常不会在收到数据之后立即返回一个ACK,而是会有一个延时,希望能ACK报文段中带上一些数据,通常这个延时为200ms

2、Nagle Algorithm:在TCP连接中,只能有一个小的报文段未被确认。即TCP在发送了一个小的报文段之后,会将之后的小数据都收集起来,直到之前的小报文段得到确认,才将收集到的小数据打包成一个报文段发出。这样做的减少了网络中小报文段的数量,减轻了网络的阻塞,提高了传输的效率

3、当一个包到达以后,它首先被设备驱动的中断处理程序处理,然后被添加到IP的输入队列中,最后被送给TCP进行处理,到要发送delayed acknowledgement的时候,就将确认序号置为已经处理过的报文段中同步序号的最大值加1

4、sliding window:即滑动窗口协议,接收方不必为每个接收到的报文段发送ACK确认报文,进行累计确认即可。例如收到了N-1024~N,N~N+1024两个报文段,那么只要返回一个ACK序号为N+1024的报文段即可

5、如上图所示,发送方发送数据的速度大于接受方处理数据的速度,发送方连续发送了四个包含1024个数据字节的报文段,此时已经填满了接收方建议的滑动窗口的大小,于是它停止发送数据。之后,接收方发送了一个ACK进行累计确认并且建议的窗口大小为0,发送方依旧不能发送数据。最后,接收方又发送了一个ACK,该报文段称为window update ,它的作用并不是用来对任何数据进行确认的,而是告诉发送方可以继续发送数据了

6、发送端的滑动窗口如上图所示:方框的大小为发送方能够发送并且未被确认的字节序列的数目,当收到ACK报文时,方框的左边界就会向左移,当接收方的TCP缓存变大时,方框的右边界就会向右移。那么会不会出现右边界向左移动的情况呢?其实是不会的,我们先讨论最坏的情况,那就是接收方没有处理任何新的数据,并且由于接受了新的数据导致缓存又变小了,但是此时我们可以发现对于发送方来说,只是左边界向右移了,而右边界没有发生变化而已。因此最坏的情况只是右边界不移动而已,并不会存在滑动窗口的右边界向左移的情况

7、Slow Start:即慢启动,这个算法基于这样一种观察结果:发送方发包的速率应该和接收方发送确认报的速率相同。因此又引入了一个叫拥塞窗口(congestion window),刚开始传输数据的时候,拥塞窗口的大小为一个报文段的大小,当第一个报文段被确认后,窗口大小变为二,当之后的两个报文段被确认后,拥塞窗口变为四,依次类推。直到发现丢包时,说明拥塞窗口太大了,再对它进行相应的处理。这里需要的注意的是:拥塞窗口和滑动窗口是同时起作用的,通常发送方能够发送的数据的数量是两者的较小值

8、PUSH flag:当TCP报文段中PUSH标志被置位时,意思是发送方要求接收方立即将接收到的数据交给相应的接收方进程。这里的数据包括当前收到的PUSH被置位的报文段中的数据,也包括接收方之前收到的,被放在缓存中的数据。一般来说,现在已经不能通过程序将报文段中的PUSH标志置位了,因为大多数TCP 的实现都能自动确定需不需要置PUSH标志

《TCP/IP详解 卷一》读书笔记-----TCP数据流的更多相关文章

  1. 《TCP/IP详解》读书笔记

    本书以UNIX为背景,紧贴实际介绍了数据链层.网络层.运输层   一.整体概念   1.各层协议的关系,只讨论四层 各层常见的协议:   网络层协议:IP协议.ICMP协议.ARP协议.RARP协议. ...

  2. TCP/IP详解 卷一学习笔记(转载)

    https://blog.csdn.net/cpcpcp123/article/details/51259498

  3. 『TCP/IP详解——卷一:协议』读书笔记——10

    2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...

  4. 『TCP/IP详解——卷一:协议』读书笔记——01

    从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...

  5. 【TCP/IP详解 卷一:协议】第二章:链路层

    2.1 引言 链路层的三个目的: (1)为IP模块发送和接收IP数据报. (2)为ARP模块发送ARP请求和接收ARP应答.地址解析协议:ARP. (3)为RARP模块发送RARP请求和接收RARP应 ...

  6. 『TCP/IP详解——卷一:协议』读书笔记——02

    2013-08-16 20:07:11 1.3 TCP/IP的分层 这是一个很好的图,要多看!!图上有些细节会在今后的笔记中提到,看不懂不必深究. IP是网络层上的主要协议,同时被TCP和UDP(这两 ...

  7. 『TCP/IP详解——卷一:协议』读书笔记——18

    2013-08-27 15:44:52 第7章 Ping程序 7.1 引言 “ping”这个名字来源于声纳定为操作.Ping程序由Mike Muuss编写,目的是为了测试另一台主机是否可达.该程序发送 ...

  8. 『TCP/IP详解——卷一:协议』读书笔记——15

    2013-08-25 13:39:40 第6章 ICMP:Internet控制报文协议 6.1 引言 ICMP经常被认为是IP层的一个组成部分.它传递差错报文以及其他需要注意的信息.ICMP报文同通常 ...

  9. 『TCP/IP详解——卷一:协议』读书笔记——14

    2013-08-25 11:32:06 第5章 RARP:逆地址解析协议 5.1 引言 具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址.但是无盘机,如X终端或无盘工作站,则需要采用其 ...

  10. 『TCP/IP详解——卷一:协议』读书笔记——13

    2013-08-24 16:03:39 4.6 ARP代理 ARP代理(Proxy ARP):如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求.这样可 ...

随机推荐

  1. MySQL SQL模式匹配

    MySQL提供标准的SQL模式匹配,SQL模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符).. 关于SQL模式匹配:http://dev.mysql.com/doc/r ...

  2. Spring RMI Example

    一: 提供服务的远程一端 1-1. applicationContext.xml <?xml version="1.0" encoding="UTF-8" ...

  3. 「C语言」Windows+EclipseCDT下的C语言开发环境准备

    之前写过一篇 「C语言」在Windows平台搭建C语言开发环境的多种方式 ,讨论了如何在Windows下用DEV C++.EclipseCDT.VisualStudio.Sublime Test.Cl ...

  4. nodeJS中npm常见的命令

    常用的nodeJS中npm的命令:npm主要是node包管理和发布的工具.npm常用的命令:1:npm install <name> //(下载包) 下载后的包放在当前路径下面 npm i ...

  5. EntityFramework4.1开发

    常见问题大概为这几个 一.ef4.1 codeFirst 修改表结构 增加字段等 EF code first需要重新生成库导致数据丢失的问题. 二.ef4.1 没有了edmx等复杂的东西 变得简单 干 ...

  6. How to Get SharePoint Client Context in SharePoint Apps (Provider Hosted / SharePoint Access ) in CSOM (Client Side Object Model)

    http://www.codeproject.com/Articles/581060/HowplustoplusGetplusSharePointplusClientplusContex Downlo ...

  7. 利用Android多进程机制来分割组件

    android对于内存有一定的限制,很多手机上对内存的限制是完全不同的.我们的应用程序其实就是一个进程,这个进程是完全独立的,这个进程分配的内存是一定的,所以我们经常会遇到OOM的问题.但,你可能不知 ...

  8. UITabBarController 微信

    AppDelegate.m #import "AppDelegate.h" #import "FirstViewController.h" #import &q ...

  9. Swift开发第六篇——操作运算符也可以重载& func 的参数修饰

    本篇分为两部分: 1.Swift 中重载操作运算符的使用 2.Swfit 中 func 的参数修饰 1.Swift 中重载操作运算符的使用 与别的语言不同,Swift 支持运算符的重载,运算符指的是“ ...

  10. 明明已经执行Log.i,偏偏打不出日志

    Android内打日志用的当然是Log.i(tag,string),调试时的日志输出可以很快的反映一些问题,方便我们跟进. 但是如果连日志都打不出来了怎么办呢,我今天就遇到了比较坑的问题.项目里别的日 ...