TCP

全双工 A-B,B-A

点对点 一对一的

TCP连接建立过程

客户首先发送一个特殊的TCP报文段,服务器用另一个特殊的TCP报文段来相应,最后,客户再用第三个特殊的报文段作为相应,前两个报文段不承载"有效载荷"也就是不包含应用层数据,而第三个报文段可以承载有效载荷。这种连接建立过程被称为三次握手

最大报文段长度(MSS)通常根据最初确定的有本地发送主机发送的最大链路层帧长度(即最大传输单元MTU)

MTU1500字节=TCP/IP首部40字节+MSS1460字节

当TCP发送一个大文件,TCP通常讲文件划分成长度为MSS的若干块(最后一块除外,通常小于MSS)。

首部包括源端口号和目的端口号,被用于多路复用/分解

同UDP一样,TCP首部也包括检验和字段

TCP报文段首部还包括

32比特的序号字段和32比特的确认号字段,用于实现可靠数据传输

假定数据流由一个包含5000000字节的文件组成,其MSS为1000字节,数据流首字节编号0,该TCP将为该数据流构建500个报文段,给第一个报文段分配序号0,第二个分配1000,第三个2000,以此类推

假定主机A已经收到一个来自主机B的包含字节0-535的报文段,以及另一个包含字节900-1000的报文段,由于某种原因没有收到536-899的报文段,主机A为了重新构建主机B的数据流,仍在等待字节536以及其后的字节。因此,A到B的下一个报文段将在确认号字段包含536,。因为TCP只确认该流中至第一个丢失字节为止的字节,所以TCP被成为提供累计确认

15比特的接受窗口字段,用于流量控制

4比特的首部长度字段,该字段指示了以32比特的字为单位的TCP首部长度

可选和变长的选项字段,用于发送放和接收方协商最大报文段长度(MSS)通常为空

6比特标志字段,ACK比特用于指示确认字段的值是有效的,即该报文段包括一个对已被成功接受报文段的确认

RST,SYN,FIN比特用于连接建立和拆除,PSH比特被设置的时候,就指示接受方应立即将数据交给上层,URG比特用来指示报文段里存在这被发送段的上次设置为紧急的数据

估计往返时间

报文段的样本RTT(表示为SampleRTT)就是从某报文段被发出(即交给IP)到对该报文段的确认被收到之间的时间量

TCP维持一个SampleRTT均值(EstimatedRTT)一但获得一个新的SampleRTT,TCP会根据下列公式跟新EstimateRTT

EstimatedRTT=(1-α)×EstimatedRTT+α×SampleRTT

α参考值为0.125

TimeoutInterval=EstimatedRTT+4*DevRTT

TimeoutInterval推荐初始值为1秒

可靠数据传输

超时间隔加倍,每次发送某个报文段超时,超时时间间隔是上次的两倍

流量控制

一条TCP连接每一侧的主机都为该连接设置了接受缓存,当接受到正确按序的字节后,就将字节放入缓存。相关应用从缓存中读取数据,但不一定是数据一到达就立即读取。由于接收方应用可能忙于其他任务,导致读取数据相对缓慢,二发送方发送的太多太快,发送的数据很容易使该连接的接受缓存溢出。

TCP为它的应用程序提供了流量控制服务以消除发送方使接收方缓存溢出的可能性。流量控制因此使一个速度匹配服务。即发送方的发送速率与接收方应用的读取速率相匹配。TCP发送方可能因为IP网络拥塞被遏制,这种形式的发送放控制被成为拥塞控制

TCP通过让发送方维护一个成为接受窗口的变量来提供流量控制,接受窗口用于给发送方一个提示-接受方还有多少可用的缓存空间。因为TCP是全双工,所以双方都各自维护一个接收端口

TCP建立连接的方式

TCP关闭连接

拥塞控制原理

慢启动

计算机网络自顶向下第三章传输层二TCP的更多相关文章

  1. 数据通讯与网络 第五版第24章 传输层协议-TCP协议部分要点

    上一博客记录了UDP协议的关键要点,这部分记录TCP协议的关键要点. 24.3 传输控制协议(TRANSMISSION CONTROL PROTOCOL) TCP(Transmission Contr ...

  2. 第6章 传输层(详解TCP的三次握手与四次挥手)

    第6章 传输层 传输层简介 传输层为网络应用程序提供了一个接口,并且能够对网络传输提供了可选的错误检测.流量控制和验证功能.TCP/IP传输层包含很多有用的协议,能够提供数据在网络传输所需的必要寻址信 ...

  3. Python黑帽编程3.0 第三章 网络接口层攻击基础知识

    3.0 第三章 网络接口层攻击基础知识 首先还是要提醒各位同学,在学习本章之前,请认真的学习TCP/IP体系结构的相关知识,本系列教程在这方面只会浅尝辄止. 本节简单概述下OSI七层模型和TCP/IP ...

  4. UNIX网络编程---传输层:TCP、UDP、SCTP(二)

    UNIX网络编程----传输层:TCP.UDP.SCTP 一.概述 本章的焦点是传输层:包括TCP.UDP.和SCTP(流控制传输协议).SCTP是一个较新的协议,最初设计用于跨因特网传输电话信令. ...

  5. 第8章 传输层(1)_TCP/UDP协议的应用场景

    1. 传输层的两个协议 1.1 TCP和UDP协议的应用场景 (1)TCP协议:如果要传输的内容比较多,需要将发送的内容分成多个数据包发送.这就要求在传输层用TCP协议,在发送方和接收方建立连接,实现 ...

  6. 传输层:TCP 协议

    传输层:TCP 协议 一.概述 TCP 和 UDP 处在同一层——运输层,但是它们有很多的不同.TCP 是 TCP/IP 系列协议中最复杂的部分,它具有以下特点: (1) TCP 提供 可靠的 数据传 ...

  7. 传输层协议TCP和UDP

    本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...

  8. 传输层之TCP

    ---恢复内容开始--- 坞无尘水槛清,相思迢递隔重城. 秋阴不散霜飞晚,留得枯荷听雨声.    --李商隐 上一篇中我们了解了socket编程是基于TCP或者UDP,所以我们有必要对TCP,和UDP ...

  9. 计算机网络自顶向下方法第3章-传输层 (Transport Layer).1

    3.1 概述和运输层服务 运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信(logic communication)功能. 3.1.1 运输层和网络层的关系 网络层提供了主机之间的逻辑通信,而 ...

随机推荐

  1. 第一章:前端布局之display属性

    css布局学习网站:http://zh.learnlayout.com

  2. 使用原app接口进行微信公众号开发

    1.跨域问题 原来的app项目已经上线,然而接下来就有意思了,突然上头说要把app的发件功能复制到微信公众号里.那么问题来了,微信公众号的页面是前端和交互式h5大哥写的. 那么就将页面丢微信里,请求我 ...

  3. SQLServer存储引擎——06.索引的遍历与维护

    一.遍历 索引树的每个节点都是一个页面. 索引树有三种类型的节点:根节点.中间节点.叶子节点. (1) 根节点与中间节点一样,只包含下一层节点的入口值与入口指针,它们称为索引节点: (2) 叶子节点包 ...

  4. 节点流——FileInputStream&FileOutputStream

    import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  5. HTTP协议详解之消息报头

    原文地址:http://www.cnblogs.com/devinzhang/archive/2012/02/06/2340186.html HTTP消息由客户端到服务器的请求和服务器到客户端的响应组 ...

  6. 在vue中使用Element-UI

    Element-UI是一套基于Vue2.0的UI组件库,http://element.eleme.io/#/zh-CN/component/carousel 首先npm install element ...

  7. Static 静态内部类

    Java中的类可以是static吗?答案是可以.在java中我们可以有静态实例变量.静态方法.静态块.类也可以是静态的. java允许我们在一个类里面定义静态类.比如内部类(nested class) ...

  8. Render 使用

    Page页面文件,重新Render 方法,目的是把页面的ViewState信息放在最后,利于页面展示速度和SEO优化. Render方法对于重新Html控件还是很好用的. private static ...

  9. 关于百度富文本编辑器UEdit的初始化内容失败问题

    百度富文本编辑器毫无疑问是强大的,但也会出问题.这个问题是在脚本中普遍存在的,由异步性导致的加载顺序问题. 我们使用 var ue = UE.getEditor('editor', {}); 创建实例 ...

  10. 完美CSS文档的8个最佳实践

      在css的世界,文档没有被得到充分的利用.由于文档对终端用户不可见,因此它的价值常常被忽视.另外,如果你第一次为css编写文档,可能很难确定哪些内容值得记录,以及如何能够高效完成编写. 然而,为C ...