传输控制协议(TCP)
一、TCP协议的特点
1、TCP是面向连接的传输层协议。也就是说,应用程序在使用TCP协议之前,必须先建立TCP连接。在传输数据完毕后,必须释放已经建立的TCP连接。这就是说,应用进程之间的通信好像在“打电话”。通话前要先拨号建立连接,通话结束后要挂机释放连接。
2、每一条TCP连接只能有两个端点(end point) ,只能是点对点的一对。
3、TCP提供可靠交付的服务。也就是说,通过TCP连接传送的数据,无差错、不丢失、不重复且按序发送和接收。
4、TCP提供全双工通信。
5、TCP面向字节流。TCP中的“流”(steam) 指的是流入到进程或从进程流出的字节序列。
6、TCP面向字节流的概念,如下图所示:
注意:
■TCP连接是一条虚连接而不是一条真正的物理连接。
■TCP对应用进程一次把多长的报文发送到TCP的缓存中是不关心的。
■TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP发送的报文长度是应用进程给出的)。
■TCP可把太长的数据块划分短一些再传送。
■ TCP 也可等待积累有足够多的字节后再构成报文段发送出去。
二、TCP报文的首部格式
1、序号,取值范围是0~,共个序号2的32次方。TCP是面向字节流的,在一个TCP连接中传送的字节流的每一个字节都要按顺序编号,整个要传送的字节流的起始序号必须在连接建立时设置。若干个字节形成一个TCP报文段,TCP报文段以本报文段所发送的数据的第一个字节的序号作为本报文段的标识,也就是TCP报文首部中的“序号”,因此报文段首部中的“序号”字段,也可称为“报文段序号”。
2、确认号,它的值是期望收到发送方下一个报文段序号,即下一个报文段第一个数据字节的序号。所以,我们应当记住:若确认号是N,则表明到序号N-1位置的所有数据都已确认收到。
3、数据偏移。这个字段实际上是指出TCP报文段的首部长度。
4、确认ACK。仅当ACK=1时确认号字段才有效。
5、紧急URG (Urgent)。 当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不要按原来的排队顺序传送。
6、推送PSH。当PSH=1时,希望在键入一个命令后立即就能收到对方的回应,可以使用此操作。
7、复位RST。当RST=1时,必须释放连接,然后重新建立传输连接。
8、终止FIN。用来释放一个连接。当FIN=1时,表此报文段的发送方的数据已发送完毕,并要求释放传输连接。
9、窗口。接收方目前允许对方发送的数据量。窗口值在收发过程中是会改变的。
10、校验和。检验传输数据的准确性。
11、紧急指针。紧急指针仅在URG=1时才有意义,它指出了紧急数据的末尾在报文段的位置。当所有数据都处理完,TCP 就告诉应用程序恢复到正常操作。如下图所示:
三、TCP可靠传输的实现
1、停止等待协议的要点
①概念:发送方每次只发送一个分组, 在收到确认后再发送下一个分组,这种方式就是停止等待协议。
②编号。对发送的每个分组和确认都进行编号。
③自动重传请求。 发送方为每个发送的分组设置一 个超时计时器。若超时计时器超时,发送方会自动重传分组。
④简单,但信道利用率太低。
2、停止等待协议的两种工作模式
通常A最终总是可以收到对所有发出的分组的确认。如果A不断重传分组但总是收不到确认,就说明通信线路太差,不能进行通信。
■使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。
■上述的自动重传请求ARQ意思是重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的分组。
3、连续ARQ协议和滑动窗口协议——改进的停止等待协议
虽然停止等待协议可以实现可靠传输,但效率比较低,因此使用了ARQ协议和滑动窗口协议。如下图所示:
4、选择确认(SACK)
连续ARQ协议和滑动窗口协议都采用累积确认的方式。
TCP通信时,如果发送序列中间的某个数据包丢失,TCP 会重传最后确认的分组后续的分组,这样原先已经正确传输的分组也可能重复发送,降低了TCP性能。为改善这种情况,发展出选择确认( SACK) 技术,使TCP只重新发送丢失的包,而不用发送后续所有的分组,并提供相应机制使接收方能告诉发送方哪些数据丢失,哪些数据已经收到等。
四、流量控制
1、概念:流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。在客户端向服务器发送TCP连接请求时,TCP首部会包含客户端的接收窗口大小,服务器就会根据客户端的接收窗口大小调整发送窗口。分析数据包时的Win是接收窗口大小。
2、拥塞控制的原因
从上图中可看出,随着提供的负载的增大,网络吞吐量的增长速率逐渐减小。也就是说,在网络吞吐量还未达到饱和时,就已经有一部分输入分组被丢弃了。当网络的吞吐量明显地小于理想吞吐量时,网络就进入了轻度拥塞状态。更值得注意的是,当提供的负载达到某一数值时, 网络的吞吐量反而随提供的负载的增大而下降,这时网络就进入了拥塞状态。当提供的负载继续增大到某一数值时,网络的吞吐量就下降到零,网络已无法工作。这就是所谓的死锁(Deadlock)。
3、拥塞控制的方法:慢开始、拥塞避免、快重传和快回复。
五、发送窗口的上限
拥塞控制和接收方对发送方的流量控制一起考虑, 那么很显然,发送方的窗口的上限值应当取为接收方窗口rwnd和拥塞窗口cwnd这两个变量中较小的一个,也就是说:
-当rwnd<cwnd时,是接收方的接收能力限制发送方窗口的最大值。
-反之,当cwnd<rwnd时,是网络的拥塞限制发送方窗口的最大值。
传输控制协议(TCP)相关推荐
- 计算机网络tcp传送,计算机网络基础课程—传输控制协议(Tcp)
原标题:计算机网络基础课程-传输控制协议(Tcp) •TCP和UDP都使用相同的网络层(IP),但TCP向应用层提供与UDP完全不同的服务. •TCP提供一种面向连接的.可靠的字节流服务. •UDP提 ...
- 【RFC7414 传输控制协议 (TCP) 规范文档的路线图】(翻译)
原文 rfc7414 (ietf.org) A Roadmap for Transmission Control Protocol (TCP) Specification Documents 传 ...
- 传输控制协议---TCP协议【详解】
目录 一.协议简介 二.TCP报文格式 1.字段解析 2.报文解析 三.TCP的重传机制 1.超时重传 2.快速重传 3. SACK 方法 4.Duplicate SACK 四.TCP的滑动窗口机制 ...
- 网际传输协议和传输控制协议(IP,TCP,IP)
文章目录 1 简介 2 IP 2.1 简介 2.2 IP的可靠性 2.1 IP Header 2.3 IP分片和重组 3 TCP 3.1 简介 3.2 TCP Header 3.3 TCP 三次握手 ...
- 传输控制协议(TCP)知识点总结
文章目录 传输控制协议(TCP)知识点总结 介绍 数据包格式 TCP连接的建立和关闭 三次握手 四次挥手 一张图展示这些过程 TCP的特点 流量控制 拥塞控制 检测丢失的报文段 处理乱序数据 处理损坏 ...
- TCP 传输控制协议(转)
开头先说几个协议: IP:网际协议 TCP:传输控制协议 Http:超文本传输协议 AMQP:高级消息队列协议 一:TCP是什么? TCP(Transmission Control Protocol ...
- TCP(传输控制协议)简介
TCP是一个面向连接的.端到端的可靠的传输层协议.位于TCP/IP网络分层架构中的第三层,底层是IP协议.IP把TCP段封装在数据报中发送到网络上. TCP的正式标准是RFC793,后序又有许多其他R ...
- 传输层-传输控制协议(TCP)
目录 TCP 协议概述 TCP 报文段结构 TCP连接管理 三次握手 四次挥手 TCP 可靠数据传输 TCP拥塞控制 TCP 协议概述 传输控制协议(TCP)是Internet传输层协议.提供面向连接 ...
- TCP/IP 中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议
原文地址:http://hi.baidu.com/albyuyrgqgbbhoq/item/65006d2d002ab33195f62ba1 TCP/IP(Transmission Control P ...
- TCP 传输控制协议(Transmission Control protocol)
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的.可靠的.基于字节流的通信协议,数据在传输前要建立连接(三次握手),传输完毕后还要断开连接(四次挥手) ...
最新文章
- 一张心酸得不想起名字的照片,人艰就别拆了好吗 | 每日趣闻
- 使用python的Flask实现一个RESTful API服务器端
- 嵌入式FreeRTOS系统,在中断中调用FreeRTOS系统的API函数
- DEV控件Grid显示行号
- 软件测试 学习之路 linux 基础命令 (三)
- Centos7常用命令[网络]
- linux下proc文件的读写(部分转载)
- 1110 Complete Binary Tree (25 分)(搜索)
- VB.net Socket Udp收、发数据包示例源码
- 《出版专业基础(初级)》2020版学习笔记2~8章
- 04:AD采样【MSP430F5529】
- Python3 大型网络爬虫实战 003 — scrapy 大型静态图片网站爬虫项目实战 — 实战:爬取 169美女图片网 高清图片
- Python攻城师的成长——ORM(choices字段)、AJAX
- 二级路由器的设置上网
- 做自媒体应该选择哪个?头条和头条极速版哪个赚钱快又好用?
- 搜索引擎相关站点收集
- PULUODY LIMS系统实操
- CICD详解(十四)——Gitlab忘记密码恢复
- [区间DP]JZOJ 3095 秘密文件
- win7快捷图标显示异常的解决方法
热门文章
- Scrapy管道爬取图片
- 家用低功耗文件服务器,家用小型低功耗服务器配置
- The incoming request has too many parameters. The server supports a maximum of 2100 parameters.
- Matplotlib系列(六):路径、面片和集合
- php 扩展函数openssl_decrypt 使用注意事项
- Codeforces 260B - Ancient Prophesy
- JavaScript - 唤醒 app store 跳转到苹果商店内下载指定应用页面
- byte转int出现负数的情况
- ResNext残差结构理解
- 百万并发量苹果官网准备好了吗?——一分钟学会服务器压力测试