计算机网络自顶向下第三章传输层二TCP
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的更多相关文章
- 数据通讯与网络 第五版第24章 传输层协议-TCP协议部分要点
上一博客记录了UDP协议的关键要点,这部分记录TCP协议的关键要点. 24.3 传输控制协议(TRANSMISSION CONTROL PROTOCOL) TCP(Transmission Contr ...
- 第6章 传输层(详解TCP的三次握手与四次挥手)
第6章 传输层 传输层简介 传输层为网络应用程序提供了一个接口,并且能够对网络传输提供了可选的错误检测.流量控制和验证功能.TCP/IP传输层包含很多有用的协议,能够提供数据在网络传输所需的必要寻址信 ...
- Python黑帽编程3.0 第三章 网络接口层攻击基础知识
3.0 第三章 网络接口层攻击基础知识 首先还是要提醒各位同学,在学习本章之前,请认真的学习TCP/IP体系结构的相关知识,本系列教程在这方面只会浅尝辄止. 本节简单概述下OSI七层模型和TCP/IP ...
- UNIX网络编程---传输层:TCP、UDP、SCTP(二)
UNIX网络编程----传输层:TCP.UDP.SCTP 一.概述 本章的焦点是传输层:包括TCP.UDP.和SCTP(流控制传输协议).SCTP是一个较新的协议,最初设计用于跨因特网传输电话信令. ...
- 第8章 传输层(1)_TCP/UDP协议的应用场景
1. 传输层的两个协议 1.1 TCP和UDP协议的应用场景 (1)TCP协议:如果要传输的内容比较多,需要将发送的内容分成多个数据包发送.这就要求在传输层用TCP协议,在发送方和接收方建立连接,实现 ...
- 传输层:TCP 协议
传输层:TCP 协议 一.概述 TCP 和 UDP 处在同一层——运输层,但是它们有很多的不同.TCP 是 TCP/IP 系列协议中最复杂的部分,它具有以下特点: (1) TCP 提供 可靠的 数据传 ...
- 传输层协议TCP和UDP
本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...
- 传输层之TCP
---恢复内容开始--- 坞无尘水槛清,相思迢递隔重城. 秋阴不散霜飞晚,留得枯荷听雨声. --李商隐 上一篇中我们了解了socket编程是基于TCP或者UDP,所以我们有必要对TCP,和UDP ...
- 计算机网络自顶向下方法第3章-传输层 (Transport Layer).1
3.1 概述和运输层服务 运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信(logic communication)功能. 3.1.1 运输层和网络层的关系 网络层提供了主机之间的逻辑通信,而 ...
随机推荐
- 对CRC32的小结加上bugku一道题目:好多压缩包
CRC32就是校验值,一般来说不同的文件校验值不一样,所以我们可以挨个爆破,当然这是在文件比较小的时候.下面是几种情形. 1. 我新建了一个flag.txt文档,里面是我的生日20180818 然后我 ...
- 踩坑 Uncaught RangeError: Maximum call stack size exceeded
今天遇到了一个错误, 堆栈溢出,很好奇就是一个简单ajax请求怎么会报这个错误,研究了一下,发现犯了一个很低级的错误,data的参数错误了: passWord是未定义的变量,值为空,然后导致了这个问题 ...
- LeetCode118 杨辉三角 Python
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 示例:输入: 5 输出: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] cl ...
- 【LeetCode】移除元素(Remove Element)
这道题是LeetCode里的第27道题. 题目描述: 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原 ...
- DNS 劫持、HTTP 劫持与 DNS 污染
本文为本人的学习笔记,不保证正确. DNS 劫持 指DNS服务器被控制,查询DNS时,服务器直接返回给你它想让你看的信息.这种问题常为 ISP 所为. 由于一般的的电脑的 DNS 服务器 的配置都为自 ...
- springboot的api测试
- vue.js单文件组件中非父子组件的传值
最近在研究vue.js,总体来说还算可以,但是在web开发群里有一些人问在单文件组件开发模式中非父子组件如何传值的问题,今天在这里讲讲,希望对大家有所帮助! 在官网api中的这段讲解很少,也很模糊:官 ...
- HDOJ 1398 Square Coins
Square Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- eclipse去除所有调试断点 (转)
今天调试的时候发现之前加了太多断点,想去除所有断点,才想起来一直都没有使用过这个功能,放狗搜了一下,很快找到,记录一下. 方法一: 在工作界面,点window菜单栏,选中Preperences,在Ge ...
- the project was not built since its build……
[问题描述] 用eclipse编译程序时,出现下面错误: The project was not built since its build path is incomplete. Cannot fi ...