计算机网络自顶向下第三章传输层二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 运输层和网络层的关系 网络层提供了主机之间的逻辑通信,而 ...
随机推荐
- Leetcode 592.分数加减运算
分数加减运算 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分 ...
- python 打印9*9乘法表
# -*- coding: utf8 -*- # Author:wxq 1. for i in range(1,10): for j in range(1,i+1): print "%d*% ...
- 删除 node 【笔记】
sudo npm uninstall npm -g sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receip ...
- PAT1021
给定一个k位整数N = dk-1*10k-1 + ... + d1*101 + d0 (0<=di<=9, i=0,...,k-1, dk-1>0),请编写程序统计每种不同的个位数字 ...
- BZOJ 1087:[SCOI2005]互不侵犯King(状压DP)
[SCOI2005]互不侵犯King [题目描述] 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子 ...
- 一道背包神题-Petrozavodsk Winter-2018. Carnegie Mellon U Contest Problem I
题目描述 有\(n\)个物品,每个物品有一个体积\(v_i\),背包容量\(s\).要求选一些物品恰好装满背包且物品个数最少,并在这样的方案中: (1)求出中位数最小的方案的中位数(\(k\)个元素的 ...
- HDU 5289 Assignment(二分+RMQ-ST)
Assignment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- MySql数据类型和Java数据类型对应一览
类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java.lang.String 12 CHAR N ...
- Android注入完全剖析
0 前沿 本文主要分析了一份实现Android注入的代码的技术细节,但是并不涉及ptrace相关的知识,所以读者如果不了解ptrace的话,最好先学习下ptrace原理再来阅读本文.首先,感谢源代码的 ...
- [暑假集训--数论]poj3518 Prime Gap
The sequence of n − 1 consecutive composite numbers (positive integers that are not prime and not eq ...