计算机网络自顶向下第三章传输层二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 运输层和网络层的关系 网络层提供了主机之间的逻辑通信,而 ...
随机推荐
- python 字符编码与转码
一. 字符编码 ASCII: 一个字节,最多能表示255个字符 GB2312(1980年):一共收录了7445个字符,包括6763个汉字和682个其它符号. GBK1.0(1995年):收录了2188 ...
- java读取文件(更新jdk7及jdk8)
以字节的方式读取: InputStream inputStream = new FileInputStream(file); int temp = -1; StringBuilder sb = new ...
- Strut 2 ValueStack传送带机制
源码与jar包下载(将rar改成jar,直接放在WEB_INF\lib目录中即可) 众所周知,Strut 2的Action类通过属性可以获得所有相关的值,如请求参数.Action配置参数.向其他 ...
- 最简单的动态代理实例(spring基于接口代理的AOP原理)
JDK的动态代理是基于接口的 package com.open.aop; public interface BusinessInterface { public void processBus ...
- 体验devstack安装openstack
由于公司制度,工作环境是不能直接上网的,所以在工作时间从没有体验过devstack或者其他联网方式安装openstack. 因自己购置了一台不错的主机,因而决定尝试安装一番,经过一段为期不短的内心极度 ...
- get_class 方法
get_class 返回对象的类名 get_class (PHP 4, PHP 5) get_class — 返回对象的类名 说明 string get_class ([ object $obj ] ...
- java主要集合类的数据结构学习
http://www.cnblogs.com/beanmoon/archive/2012/11/22/2782442.html 在程序中,集合类每天都在使用,以致于某些代码充斥着List和Map,一直 ...
- iOS-------- Objective-C多态:动态类型识别+动态绑定+动态加载
一.Objective-C多态 1.概念:相同接口,不同的实现 来自不同类可以定义共享相同名称的方法. 动态类型能使程序直到执行时才确定对象所属类型 动态类型绑定能使程序直到执行时才确定要对对象调用的 ...
- Log4j官方文档翻译(七、日志格式化)
apache log4j提供各种layout对象,然后根据自己指定的layouts对象转化日志信息.通常来说都是应用量身定制layout对象转换信息格式. 所有的layout对象从Appender对象 ...
- loj 300 [CTSC2017]吉夫特 【Lucas定理 + 子集dp】
题目链接 loj300 题解 orz litble 膜完题解后,突然有一个简单的想法: 考虑到\(2\)是质数,考虑Lucas定理: \[{n \choose m} = \prod_{i = 1} { ...