摘 要:
本文介绍了 TCP 工作原理与帧格式细节。
关键词:
TCP, UDP, 客户端, 服务器
TCP:Transmission Control Protocol 传输控制协议
UDP :User Data Protocol 用户数据报协议
MSS:Maximum Segment Size 最大报文段长度
ISN:Initial Sequence Number 初始序号
AIMD :Additive Increase Multiplicative Decrease 加性增,乘性减
RTT:Round-Trip Time 往返时延
MTU:Maximum Transmission Unit 最大传输单元
ASAP:As Soon As Possible 尽快
IANA:Internet Assigned Numbers Authority 互联网数字分配机构
DDOS:Distributed Denial of service 分布式拒绝服务
1.概述
TCP( Transmission Control Protocol),即传输控制协议。TCP 是一种面向连接(连接导向)的、可靠的、基于字节流的运输层通信协议。在简化的计算机网络 OSI 模型中,它完成第四层传输层所指定的功能, UDP 是同一层内另一个重要的传输协议。
面向连接是指一次正常的 TCP 传输需要通过在 TCP 客户端和 TCP 服务器建立特定的虚电路连接来完成,该过程通常被称为“三次握手”。可靠性可以通过很多种方法来提供保证,在这里我们关心的是数据序列和确认。TCP 通过数据分段( Segment)中的序列号保证所有传输的数据可以在远端按照正常的次序进行重组,而且通过确认保证数据传输的完整性。总之,要通过 TCP 传输数据,必须在两端主机之间建立连接。
1.1 技术特点
①面向连接的传输;
②端到端的通信;
③高可靠性,确保传输数据的正确性,不出现丢失或乱序;
④全双工方式传输;
⑤采用字节流方式,即以字节为单位传输字节序列;
⑥紧急数据传送功能。
2.TCP 介绍
2.1 TCP 的工作原理
图 1 因特网协议族示意图
在因特网协议族( Internet protocol suite)中, TCP 层是位于 IP 层之上,应用层之下的传输层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是 IP 层不提供这样的流机制,而是提供不可靠的包交换。
应用层向 TCP 层发送用于网间传输的、用 8 位字节表示的数据流,然后 TCP 把数据流分割成适当长度的报文段( 长度通常受该计算机连接的网络的数据链路层的最大传送单元—MTU 的限制)。之后 TCP 把结果包传给 IP 层,由它来通过网络将包传送给接收端实体的 TCP层。TCP 为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认( ACK);如果发送端实体在合理的往返时延( RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。
2.2 TCP 帧格式
中间的标志位就是用于协议的一些机制的实现的比特位, 有 6 比特,它们依次如下:URG、ACK、 PSH、 RST、 SYN、 FIN
①URG 表示紧急指针字段有效;
②ACK 置位表示确认号字段有效;
③PSH 表示当前报文需要请求推( push)操作;
④RST 置位表示复位 TCP 连接;
⑤SYN 用于建立 TCP 连接时同步序号;
⑥FIN 用于释放 TCP 连接时标识发送方比特流结束
A.源端口和目的端口:各为 16 比特,用于表示应用层的连接。源端口表示产生数据包的应用层进程,而目的端口则表示数据包所要到达的目的进程。
B.序列号:为 32 比特,表示数据流中的字节数。序列号为首字节在整个数据流中的位置。初始序列号随机产生,并在连接建立阶段予以同步。
C.确认号:表示序号为确认号减去 1 的数据包及其以前的所有数据包已经正确接收,也就是说他相当于下一个准备接收的字节的序号。
D.头部信息:4 比特,用于指示数据起始位置。由于 TCP 包头中可选项的长度可变,因此整个包头的长度不固定。如果没有附加字段,则 TCP 数据包基本长度为 20 字节。
E.窗口:16 位,表示源端主机在请求接收端等待确认之前需要接收的字节数。它用于流量控制,窗口大小根据网络拥塞情况和资源可用性进行增减。
F.校验位:16 位。用于检查 TCP 数据包头和数据的一致性。
G.紧急指针:16 位。当 URG 码有效时只向紧急数据字节。
H.可选项:存在时表示 TCP 包头后还有另外的 4 字节数据。TCP 常用的选项为最大数据包(并非整个 TCP 报文) MSS, MSS 默认值是 536。每一个 TCP 段都包含一个固定的 20 字节的段头。TCP 段头由 20 字节固定头和一些可选项组成。实际数据部分最多可以有 65495 ( 65535-20-20=65495)字节。
2.3 TCP 连接的建立与终止
TCP 协议通过三个报文段完成连接的建立,这个过程称为三次握手(three-way handshake),过程如图 3 所示,而终止一个连接要经过四次握手,这是由 TCP 的半关闭造成的,具体过程如图 4 所示。
2.4 相关术语
2.4.1 滑动窗口协议
TCP 滑动窗口技术通过动态改变窗口大小来调节两台主机间数据传输。每个 TCP/IP 主机支持全双工数据服务, 因此 TCP 有两个滑动窗口:一个用于接收数据,另一个用于发送数据。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。
滑动窗口机制为端到端设备间的数据传输提供了可靠的流量控制机制。然而, 它只能在源端设备和目的端设备起作用, 当网络中间设备(如路由器)发生拥塞时, 滑动窗口机制将不起作用。此时我们可以用ICMP的源抑制机制进行拥塞管理。
图 5 滑动窗口示意图
滑动窗口流量控制的实现方法:
假定发送方向接收方发送一定数量(如窗口大小为 3,就发送 3 个)的数据包,接收方收到数据包,向源设备发送确认报文;发送方收到确认报文, 向接收方发送同样数量的数据包。
如果接收方由于某种原因(例如缓冲区数据溢出等)没有收到全部或部分数据包, 则不向发送方发送后续的确认报文, 发送方通过调节窗口大小, 降低数据传送速率, 重发数据包。当接收方设备要求窗口大小为 0, 表明接收方已经接收了全部数据, 或者接收方应用程序没有时间读取数据, 要求暂停发送。发送接收到携带窗口大小为 0 的确认, 停止这一方向的数据传输。
2.4.2 AIMD
AIMD 是 TCP/IP 模型中,运输层为解决拥塞控制的一个方法,即:加性增,乘性减,或者叫做“和式增加,积式减少”。
当 TCP 发送方感受到端到端路径无拥塞时就线性的增加其发送速度,当察觉到路径拥塞时就乘性减小其发送速度。
2.4.3 端口号
TCP 段结构中端口地址都是 16 比特,可以有在 0~65535 范围内的端口号。对于这 65536个端口号有以下的使用规定:
①端口号小于 256 的定义为常用端口,服务器一般都是通过常用端口号来识别的。任何TCP/IP 实现所提供的服务都用 1~1023 之间的端口号,是由 IANA 来管理的;
②客户端只需保证该端口号在本机上是惟一的就可以了。客户端口号因存在时间很短暂又称临时端口号;
③大多数 TCP/IP 实现给临时端口号分配 1024~5000 之间的端口号。大于 5000 的端口号是为其他服务器预留的。
2.4.4 TCP半开连接数
半开 TCP 连接,简单地说就是发送了 TCP 连接请求,但还没有得到对方应答的状态(实际上要复杂些),也就是连接尚未完全建立起来,双方还无法进行通信交互的状态。TCP 半开连接数最好不超过 50。没有必要设置得太大, 每一个半开连接都会让系统引入额外的开销,如果半开连接数设置过大,将导致系统崩溃还有其它很多 DDoS 攻击手段。限制 TCP 半开连接数,可以有效地防止 DDoS 攻击。
2.5 TCP 协议和 UDP 协议的区别
①TCP 协议面向连接, UDP 协议面向非连接;
②TCP 协议传输速度慢, UDP 协议传输速度快;
③TCP 协议保证数据顺序, UDP 协议不保证;
④TCP 协议保证数据正确性, UDP 协议可能丢包;
⑤TCP 协议对系统资源要求多, UDP 协议要求少
作者: 武汉海翎光电, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-3986637.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论