加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

聊点TCP干货

发布时间:2019-05-29 08:43:47 所属栏目:教程 来源:美码师
导读:我们在平时的开发中,或多或少都会涉猎到网络传输这块。 这篇文章,主要是整理一下 TCP 的一些知识要点,作为一名开发者来说,尽管有那么多的基础设施(框架、组件)帮我们屏蔽了这些细节。但我仍然认为了解它的一些基本原理必有些裨益,尤其是当你在分布式
副标题[/!--empirenews.page--]

我们在平时的开发中,或多或少都会涉猎到网络传输这块。

这篇文章,主要是整理一下 TCP 的一些知识要点,作为一名开发者来说,尽管有那么多的基础设施(框架、组件)帮我们屏蔽了这些细节。但我仍然认为了解它的一些基本原理必有些裨益,尤其是当你在分布式环境上遇到一些棘手问题时,一些原理性的知识可能会让你快速找到答案。

TCP

一、起源

TCP 是传输层的协议,全称是叫做 Transmission Control Protocol,这个协议在 IETF RFC 793 进行了定义。

在互联网产生之前,我们的电脑都是相互独立的,每台机器都有着自己的操作系统并保持着自己的运行。

于是,为了将这些电脑连接起来,并能够基于一种"通道"的形式进行数据、资源的传输及交互,IETF 制定了 TCP 协议。

那么,IETF又是什么? 这是一个令人尊敬的技术组织,叫 Internet Engineering Task Force,即互联网工程任务组。

这是一个成立于1985年的开放性组织,现在我们所提到的 HTTP、TCP、IP 这些重要的网络协议,都是出自于该组织。

可以这么说,IETF 是互联网的始作俑者,没有它就没有现在繁荣的互联网了。

值得一提的是,IETF并非权贵组织,它是一个"来自民间" 的自组织、自管理的团队,非常崇尚于自由平等的精神。

整个互联网的底层机制是由一套标准网络协议组成的,为了更方便于理解,人们便定义了所谓的“网络分层模型"。

在学习计算机网络课程的时候,都会提到两种网络模型,如下:

聊点 TCP 干货

  • OSI 模型,全称为 Open System Interconnection即开放系统互联模型,这个是由 ISO(International Organization for Standardization) 国际标准化组织提出的。 它主要是用来解决当时各个网络技术供应商在协议上无法统一的问题,通过将整个网络体系结构抽象为 7层,从最底层的物理层、数据链路层一直到最上面的应用层都做了定义。

在以前,由于术语众多,有许多人经常被OSI、ISO所迷惑..

  • TCP/IP,即 TCP/IP Protocol Suite(协议套件)是一个以TCP协议和IP协议为核心的通信模型,该模型采用协议堆栈的方式来实现许多通信协议,并将通讯体系抽象为4层。 TCP/IP 模型最早发源于美国国防部(缩写为DoD)的ARPA网项目,此后就交由IETF组织来维护。

从上面的图中可以看出,TCP/IP 基本上是OSI 模型的简化版,当然也更加容易理解。

在网络层以下,物理层、数据链路层所涉及的一些技术手段及概念都相对晦涩难懂,就比如光缆、中继器、交换机等需要一些专业背景才能掌握通透。

对于大多数的软件应用来说,将网络层以下的部分统称为“网络接口层" 无疑是更加简单的。

因此,OSI 模型尽管非常完善且全面,但已经被 TCP/IP 模型所淘汰,在互联网应用盛行的今天很少被提及。

TCP/IP 网络模型

图-TCP/IP 网络模型

二、TCP 协议

TCP 是整个 TCP/IP 协议族中最重要的传输层协议,它定义了一种面向连接的、可靠的、基于流的传输方式。

HTTP 是基于 TCP 的,所以说 TCP 是整个互联网的协议其一并不为过。

同时,我们在使用 HTTP 协议实现应用系统间的交互时,也经常免不了会与 TCP 打上交道。因此有必要了解一些基本机制。

1. TCP 的特点?

  • 首先,TCP 是基于连接的,也就是在进行数据传输之前,客户端与服务端(或者说是通信的双方)需要先建立一个可信的连接。在数据传输结束后,再通过一种协定的方式断开连接,由通信的双方释放资源。这里涉及到的,就是常说的"三次握手"、"四次挥手"
  • 其次,TCP 是可靠的,它定义了一种数据包的"超时重传机制",简单说,就是每一个数据包在发送出去后的都会等待一个响应。如果指定时间内没有收到响应,由发送方进行一定次数的重传来保证数据的可靠传输。
  • 最后,TCP 是基于流的,这是指在传输数据时应用层不需要关注数据包的边界,TCP在数据传输时会自动根据网络环境将数据进行缓冲、分组、合并。

这点跟基于报文的协议(UDP)是截然不同的。当然,基于流的传输也保证了数据收发的有序性,因此每个数据包都附带上一个属于当前连接的序列号。

2. 怎么理解全双工?

全双工是通讯上的术语,一般在软件开发领域提到的并不多。

这是指数据同时在两个方向上传输,TCP 是基于全双工的可信传输协议。

当然 UDP 也可以实现全双工的传输,但 TCP 只能实现点对点的传输,无法支持广播或者多播(分组)

黑板:半双工的区别在于,同一时间只能有一个方向的传输

3. TCP 的数据包如何组织?

透视一个协议的最原始的方法就是看它的数据包,一个TCP 的报文格式如下:

聊点 TCP 干货

这里面的字段就包括了:

(1) 源端口:表明发送端所使用的端口号,用于目标主机回应。

(2) 目的端口:表明要连接的目标主机的端口号。

(3) 序号:表明发送的数据包的顺序,一般为上次发送包中的顺序号+1。

若该数据包是整个TCP连接中的第一个包(SYN包),则该值是随机生成的。

(4) 确认号:表明本端TCP已经接收到的数据,其值表示期待对端发送的下一个字节的序号。

实际上告诉对方,在这个序号减1以前的字节已正确接收。

若该数据包是整个TCP连接中的第一个包(SYN包),则确认号一般为0。

(5) 数据偏移:表示以32位(4字节)为单位的TCP分组头的总长度(首部长度),用于确定用户数据区的起始位置。

在没有可变内容的情况下,TCP头部的大小为20字节,对应该值为5。

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读