目录
- 前言
- 12.1 TCP协议简介
- 12.2 TCP相关的一些概念词
- 12.2.1 MSL
- 12.2.2 MSS
- 12.3 TCP工作特性
- 12.3.1 面向连接
- 12.3.2 全双工通信
- 12.3.3 可靠性
- 12.3.4 缓冲机制
- 12.3.5 拥塞控制
- 12.3.6 基于字节流
- 12.3.7 其它机制
- 12.4 TCP报文
- 12.4.1 TCP报文段封装
- 12.4.2 TCP报文段格式
- 12.4.3 TCP伪首部
- 12.4.4 TCP选项字段
- 12.4.5 选项格式
- 12.4.6 wireshark报文分析
- 12.5 TCP状态变迁图
- 12.6 TCP连接与关闭
- 12.6.1 三次握手
- 12.6.2 四次挥手
- 12.6.3 同时打开
- 12.6.4 同时关闭
- 12.6.5 半关闭
- 12.7 窗口
- 12.7.1 窗口大小通告
- 12.7.2 拥塞窗口
- 12.7.3 发送窗口
- 12.7.4 接收窗口
- 12.7.5 糊涂窗口综合症
- 12.7.5.1 概念
- 12.7.5.2 原因
- 12.7.5.3 解决
- 12.8 拥塞控制&一些可靠算法
- 12.8.1 RTT和RTO计算
- 12.8.1.1 RTT测量
- 12.8.1.2 RTT估计器
- 12.8.1.3 RTT方差
- 12.8.1.4 RTO值计算
- 12.8.2 慢启动
- 12.8.3 拥塞避免
- 12.8.4 拥塞发生
- 12.8.4.1 超时重传
- 12.8.4.2 快速重传
- 12.8.5 快恢复
- 12.8.6 Nagle算法
- 12.8.7 延迟确认
- 12.8.1 RTT和RTO计算
- 12.9 四个定时器
- 12.9.1 重传定时器
- 12.9.2 坚持定时器
- 12.9.3 保活定时器
- 12.9.4 2MSL定时器
- 12.10 常用选项字段分析
- 12.10.1 MSS
- 12.10.2 SACK
- 12.10.3 WSOPT
- 12.10.4 TSOPT
- 12.10.5 UTO
- 12.10.6 TCP-AO
所以把原理篇和源码篇分开写 。
原文:https://www.cnblogs.com/lizhuming/p/16883586.html李柱明博客园:https://www.cnblogs.com/lizhuming/
12.1 TCP协议简介传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义 。
12.2 TCP相关的一些概念词12.2.1 MSLMSL :报文段最大生存时间,它是任何报文段被丢弃前在网络内的最长时间 。
- RFC 793 [Postel 1981c] 指出MSL为2分钟 。现实中的常用值是30秒,1分钟,或2分钟 。
参考:RFC 1122, chap 4.2.2.6
文章插图
12.3 TCP工作特性12.3.1 面向连接TCP是面向连接的传输层协议 。应用程序在使用TCP协议之前,必须先建立TCP连接 。在传送数据完毕后,必须释放已经建立的TCP连接 。
12.3.2 全双工通信在 TCP 连接建立后,那么两个主机就是对等的,任何一个主机都可以向另一个主机发送数据,数据是双向流通的,所以 TCP 协议是一个全双工的协议 。
12.3.3 可靠性TCP通过下列方式来提供可靠性:
- 报文段:应用数据被分割成TCP认为最适合发送的数据块 。由TCP传递给IP的信息单位称为报文段或段(segment) 。
- 确认与重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段 。接收端收到数据后,需要响应一个确认 。这个确认可以不是立即发送,通常将推迟几分之一秒(延迟确认) 。发送端如果超时也未能收到一个确认,将重发这个报文段 。
- 差错控制:
- 校验和:TCP会对TCP首部(包括伪首部)和TCP数据进行校验和验证 。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化 。如果收到段的检验和有差错, TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发) 。
经验总结扩展阅读
- 哪个星座是是天蝎座的情劫
- 水表最后一位红色是1吨还是0.1吨
- 龙舌兰酒为什么不能直接喝
- 长虫是什么动物
- 烈火军校董小姐扮演者是谁?
- 牛仔裤38码是多少尺?
- 小丑女的电影是哪一个?
- 唐艺昕演的穿越剧叫什么名字?
- 霉茶叶有什么用途
- bollycon是哪个国家的美瞳品牌?
- 校验和:TCP会对TCP首部(包括伪首部)和TCP数据进行校验和验证 。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化 。如果收到段的检验和有差错, TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发) 。