聊点TCP干货
副标题[/!--empirenews.page--]
我们在平时的开发中,或多或少都会涉猎到网络传输这块。 这篇文章,主要是整理一下 TCP 的一些知识要点,作为一名开发者来说,尽管有那么多的基础设施(框架、组件)帮我们屏蔽了这些细节。但我仍然认为了解它的一些基本原理必有些裨益,尤其是当你在分布式环境上遇到一些棘手问题时,一些原理性的知识可能会让你快速找到答案。 一、起源 TCP 是传输层的协议,全称是叫做 Transmission Control Protocol,这个协议在 IETF RFC 793 进行了定义。 在互联网产生之前,我们的电脑都是相互独立的,每台机器都有着自己的操作系统并保持着自己的运行。 于是,为了将这些电脑连接起来,并能够基于一种"通道"的形式进行数据、资源的传输及交互,IETF 制定了 TCP 协议。 那么,IETF又是什么? 这是一个令人尊敬的技术组织,叫 Internet Engineering Task Force,即互联网工程任务组。 这是一个成立于1985年的开放性组织,现在我们所提到的 HTTP、TCP、IP 这些重要的网络协议,都是出自于该组织。 可以这么说,IETF 是互联网的始作俑者,没有它就没有现在繁荣的互联网了。 值得一提的是,IETF并非权贵组织,它是一个"来自民间" 的自组织、自管理的团队,非常崇尚于自由平等的精神。 整个互联网的底层机制是由一套标准网络协议组成的,为了更方便于理解,人们便定义了所谓的“网络分层模型"。 在学习计算机网络课程的时候,都会提到两种网络模型,如下:
在以前,由于术语众多,有许多人经常被OSI、ISO所迷惑..
从上面的图中可以看出,TCP/IP 基本上是OSI 模型的简化版,当然也更加容易理解。 在网络层以下,物理层、数据链路层所涉及的一些技术手段及概念都相对晦涩难懂,就比如光缆、中继器、交换机等需要一些专业背景才能掌握通透。 对于大多数的软件应用来说,将网络层以下的部分统称为“网络接口层" 无疑是更加简单的。 因此,OSI 模型尽管非常完善且全面,但已经被 TCP/IP 模型所淘汰,在互联网应用盛行的今天很少被提及。 图-TCP/IP 网络模型 二、TCP 协议 TCP 是整个 TCP/IP 协议族中最重要的传输层协议,它定义了一种面向连接的、可靠的、基于流的传输方式。 HTTP 是基于 TCP 的,所以说 TCP 是整个互联网的协议其一并不为过。 同时,我们在使用 HTTP 协议实现应用系统间的交互时,也经常免不了会与 TCP 打上交道。因此有必要了解一些基本机制。 1. TCP 的特点?
这点跟基于报文的协议(UDP)是截然不同的。当然,基于流的传输也保证了数据收发的有序性,因此每个数据包都附带上一个属于当前连接的序列号。 2. 怎么理解全双工? 全双工是通讯上的术语,一般在软件开发领域提到的并不多。 这是指数据同时在两个方向上传输,TCP 是基于全双工的可信传输协议。 当然 UDP 也可以实现全双工的传输,但 TCP 只能实现点对点的传输,无法支持广播或者多播(分组) 黑板:半双工的区别在于,同一时间只能有一个方向的传输 3. TCP 的数据包如何组织? 透视一个协议的最原始的方法就是看它的数据包,一个TCP 的报文格式如下: 这里面的字段就包括了: (1) 源端口:表明发送端所使用的端口号,用于目标主机回应。 (2) 目的端口:表明要连接的目标主机的端口号。 (3) 序号:表明发送的数据包的顺序,一般为上次发送包中的顺序号+1。 若该数据包是整个TCP连接中的第一个包(SYN包),则该值是随机生成的。 (4) 确认号:表明本端TCP已经接收到的数据,其值表示期待对端发送的下一个字节的序号。 实际上告诉对方,在这个序号减1以前的字节已正确接收。 若该数据包是整个TCP连接中的第一个包(SYN包),则确认号一般为0。 (5) 数据偏移:表示以32位(4字节)为单位的TCP分组头的总长度(首部长度),用于确定用户数据区的起始位置。 在没有可变内容的情况下,TCP头部的大小为20字节,对应该值为5。 (编辑:鹰潭站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |