TCP协议详解

栏目: 服务器 · 发布时间: 5年前

内容简介:小到基于应用层做网络开发,大到生活中无处不在的网络。我们在享受这个便利的时候,没有人会关心它如此牢固的底层基石是如何搭建的。而这些基石中很重要的一环就是tcp协议。翻看一下“三次握手”和“四次挥手”,本以为这就是tcp了,其实不然。它仅仅解决了连接和关闭的问题,传输的问题才是tcp协议更重要,更难,更复杂的问题。回头看tcp协议的原理,会发现它为了承诺上层数据传输的“可靠”,不知要应对多少网络中复杂多变的情况。简单直白列举一下:其中任何一个小环节,都凝聚了无数的算法,我们没有能力理解各个算法的实现,但是需

小到基于应用层做网络开发,大到生活中无处不在的网络。我们在享受这个便利的时候,没有人会关心它如此牢固的底层基石是如何搭建的。而这些基石中很重要的一环就是tcp协议。翻看一下“三次握手”和“四次挥手”,本以为这就是tcp了,其实不然。它仅仅解决了连接和关闭的问题,传输的问题才是tcp协议更重要,更难,更复杂的问题。回头看tcp协议的原理,会发现它为了承诺上层数据传输的“可靠”,不知要应对多少网络中复杂多变的情况。简单直白列举一下:

  • 怎么保证数据都是可靠呢?---连接确认!关闭确认!收到数据确认!各种确认!!
  • 因为网络或其他原因,对方收不到数据怎么办?--超时重试
  • 网络情况千变万化,超时时间怎么确定?--根据RTT动态计算
  • 反反复复,不厌其烦的重试,导致网络拥塞怎么办?---慢启动,拥塞避免,快速重传,快速恢复
  • 发送速度和接收速度不匹配怎么办?--滑动窗口
  • 滑动窗口滑的过程中,他一直告诉我处理不过来了,不让传数据了怎么办?--ZWP
  • 滑动窗口滑的过程中,他处理得慢,就理所当然的每次让我发很少的数据,导致网络利用率很低怎么办?---Nagle

其中任何一个小环节,都凝聚了无数的算法,我们没有能力理解各个算法的实现,但是需要了解下tcp实现者的思路历程。

梳理完所有内容,大概可以知道:

tcp提供哪些机制保证了数据传输的可靠性?

tcp连接的“三次握手”和关闭的“四次挥手”流程是怎么样的?

tcp连接和关闭过程中,状态是如何变化的?

tcp头部有哪些字段,分别用来做什么的?

tcp的滑动窗口协议是什么?

超时重传的机制是什么?

如何避免传输拥塞?

一. 概述

1. tcp连接的特点

  • 提供面向连接的,可靠的字节流服务
  • 为上层应用层提供服务,不关心具体传输的内容是什么,也不知道是二进制流,还是ascii字符。

2. tcp的可靠性如何保证

  • 分块传送:数据被分割成 最合适的 数据块(UDP的数据报长度不变)
  • 等待确认:通过定时器等待接收端发送确认请求,收不到确认则重发
  • 确认回复:收到确认后发送确认回复(不是立即发送,通常推迟几分之一秒)
  • 数据校验:保持首部和数据的校验和,检测数据传输过程有无变化
  • 乱序排序:接收端能重 排序 数据,以正确的顺序交给应用端
  • 重复丢弃:接收端能丢弃重复的数据包
  • 流量缓冲:两端有固定大小的缓冲区(滑动窗口),防止速度不匹配丢数据

3. tcp的首部格式

3.1 宏观位置

TCP协议详解
  • 从应用层->传输层->网络层->链路层,每经过一次都会在报文中增加相应的首部。 参考之前的文章http协议
  • TCP数据被封装在IP数据报中

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数学之美

数学之美

吴军 / 人民邮电出版社 / 2012-5-1 / 45.00元

几年前,“数学之美”系列文章原刊载于谷歌黑板报,获得上百万次点击,得到读者高度评价。读者说,读了“数学之美”,才发现大学时学的数学知识,比如马尔可夫链、矩阵计算,甚至余弦函数原来都如此亲切,并且栩栩如生,才发现自然语言和信息处理这么有趣。 今年,作者吴军博士几乎把所有文章都重写了一遍,为的是把高深的数学原理讲得更加通俗易懂,让非专业读者也能领略数学的魅力。读者通过具体的例子学到的是思考问题的......一起来看看 《数学之美》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码