- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
TCP 协议详解
本文描述了 TCP 协议,首先简单介绍了 TCP 完成了一些什么功能;介绍了 TCP 报文格式,以及典型报文的数据格式;
接着从链路控制和数据传输两个方面进行了介绍,在 TCP 中链路控制和数据传输是通过同一个通道进行的,并没有区分控制
通道和数据通道;在网络中传输数据(控制或真实数据),网络可能发生拥堵,因此接下来简单描述了主机端进行拥塞控制
所采取的方法,也简单提及了中间路由器/交换机进行拥塞避免所采取的主动措施;最后介绍了在 TCP 中性能分析的一些基
本概念点,在开发网络应用程序的时候,需要对应用的网络需求进行一个估计。
本文不是 TCP 的入门资料,阅读之前需要对TCP 有一些基本认识,如三次握手、四次挥手、滑动窗口等。
TCP 概述
通常说到 TCP ,我们都会很自然的想到其为上层提供了一个面向连接、可靠的、端到端的数据流服务,也通常用电话线
路来类比一个 TCP 连接。但这种类比对刚接触到 TCP 的人来说极易造成误会,我们需要仔细审视这些概念,你将会发现TCP
并不是那么面向连接的、也不是那么可靠的、数据也仍然是通过报文的方式进行传输的。实际上 TCP 是提供了一种 “尽力而
为”的数据传输模型;同时,它也提供了防止网络拥塞的主机端拥塞控制,试图去了解整个网络的状况,并采取合适的策略
(貌似不是TCP 应该干的事?)。
TCP 的连接并不是指一条实际的或虚拟的链路存在于数据交换的两端,而是指连接的双方都维护了一些资源(如输入输
出缓冲区、多种定时器)以及链路状态的信息,并通过双方的控制报文交互管理状态、向用户提供接口修改这些资源的分配。
在 “连接控制”小节,我们将会仔细审视资源和状态(包括控制状态的报文),若控制报文丢失,那么连接就会处于一种不
一致状态,TCP 通过一些手段去试图解决这些问题(如持活定时器、保持定时器等等)。
TCP 提供了可靠的数据传输服务,其采取的措施是对控制报文和数据报文进行确认、并在超时之后进行重传;并利用滑
动窗口协议解决数据数传乱序、收发双方进行流量控制。具体来说就是,对于发送方,TCP 按照其认为最合适的长度发送数
据报文,并在发出报文之后,启动一个定时器,等待数据的确认报文,若定时器超时后仍没有收到确认报文,则重传该报文;
对于接收方,收到数据后,首先检查报文校验和,错误则直接丢弃该报文,不确认(发送端会注意到这个事实,从而重传);
收到重复报文,丢弃,不确认;通过双方维护的滑动窗口,TCP 会将乱序报文排好序后才提交给上层应用程序。需要注意的
是,流量控制与拥塞控制并不是同一回事,流量控制的目的在于防止发送端发送大量数据,超过接收端的处理能力,从而导
致丢包等;拥塞控制则在于防止网络中发生拥堵,中间路由器或交换机丢弃报文的情况。
TCP 提供数据流服务,上层应用传给 TCP 的数据,TCP 并不加以区分,仅仅是按照自己的需求组合、拆分数据,然后
传送给对端,对端 TCP 协议栈再将数据以发送的顺序递交给上层应用。TCP 的数据传送仍然是以 IP 报文的方式发送到对端
的,每次尽力发送 MSS 大小的报文,在 “数据传输”小节我们会看到诸如 Nagle 算法、TCP_CORK 等对流中报文的控制。
TCP 本身并不提供报文边界之类的东西,但提供了紧急数据、PUSH 标志(并没有提供对外接口)等方式可以模拟报文。
通常,TCP 数据流的划分是应用程序的事,应用程序定义好格式,并自己解析,常见的方案有:
先传输固定大小的报文长度字段;
按行进行分割(或其他分隔符);
固定长度记录;
各种编码方案,如 xml、json 、ASN.1、tlv 等。
1 / 6
TCP 报文
TCP 报文格式
TCP 报文最终是由 IP 层发送出去的,封装报文如下:
TCP 报文格式如下:
通常使用一个四元组唯一的表示一个 TCP 连接(client-ip, client-port, server-ip, server-port) ,但需要注意以下事实:
监听服务器在 server-port 窗口接受来自客户端的连接,并 fork 一个子进程处理连接,此时,该四元组却在服务器
对应了两个进程(监听进程只处理 SYN 报文,而子进程却只能处理数据报文和 FIN 等);
连接的化身,这在后面会详细描述。
文档评论(0)