资讯专栏INFORMATION COLUMN

TCP协议小结

Freelander / 830人阅读

摘要:协议的定义属于传输层协议,提供了一种端到端的连接。如果两次校验和一致说明数据是正确的,否则将认为数据被破坏,接收端将丢弃该数据紧急指针尽在紧急控制位为时有效。结尾是一个非常复杂的协议,这里稍微总结了一下,随着学习时间增加,继续补充。

TCP协议的定义

TCP属于传输层协议,提供了一种端到端的连接。

是面向连接的、可靠的的进程到进程通信的协议

TCP提供全双工服务,即数据可在同一时间双向传播

TCP将若干个字节构成一个分组,此分组称为报文段(Segment)

TCP的功能

将数据进行分段打包传输

对每个数据包编号控制顺序

运输中丢失、重发和丢弃处理

流量控制避免拥塞

TCP数据包封装 

源端口号和目标端口号,计算机通过端口号识别访问哪个服务,比如http服务或ftp服务,发送方端口号是进行随机端口,目标端口号决定了接收方哪个程序来接收

32位序列号 TCP用序列号对数据包进行标记,以便在到达目的地后重新重装,假设当前的序列号为 s,发送数据长度为 l,则下次发送数据时的序列号为 s + l。在建立连接时通常由计算机生成一个

确认应答号 它等于下一次应该接收到的数据的序列号。假设发送端的序列号为 s,发送数据的长度为 l,那么接收端返回的确认应答号也是 s + l。发送端接收到这个确认应答后,可以认为这个位置以前所有的数据都已被正常接收。

首部长度:TCP 首部的长度,单位为 4 字节。如果没有可选字段,那么这里的值就是 5。表示 TCP 首部的长度为 20 字节。

控制位 TCP的连接、传输和断开都受这六个控制位的指挥

URG 紧急指针:控制位为 1 时有效。表示紧急数据的末尾在 TCP 数据部分中的位置。通常在暂时中断通信时使用(比如输入 Ctrl + C)。

ACK(acknowledgement 确认)为1表示确认号

PSH(push急迫位) 缓存区将满,立刻传输速度

RST(reset重置位) 连接断了重新连接

SYN(synchronous建立联机) 同步序号位 TCP建立连接时要将这个值设为1

FIN发送端完成位,提出断开连接的一方把FIN置为1表示要断开连接

窗口大小:用于表示从应答号开始能够接受多少个 8 位字节。如果窗口大小为 0,可以发送窗口探测。 窗口值 说明本地可接收数据段的数目,这个值的大小是可变的。当网络通畅时将这个窗口值变大加快传输速度,当网络不稳定时减少这个值可以保证网络数据的可靠传输。它是来在TCP传输中进行流量控制的

校验和: 用来做差错控制,TCP校验和的计算包括TCP首部、数据和其它填充字节。在发送TCP数据段时,由发送端计算校验和,当到达目的地时又进行一次检验和计算。如果两次校验 和一致说明数据是正确的,否则 将认为数据被破坏,接收端将丢弃该数据

紧急指针:尽在 URG(urgent紧急) 控制位为 1 时有效。表示紧急数据的末尾在 TCP 数据部分中的位置。通常在暂时中断通信时使用(比如输入 Ctrl + C)

TCP的握手与断开

 建立连接时的三次握手

第一次握手主机A通过一个标识为SYN标识位的数据段发送给主机B请求连接,通过该数据段告诉主机B希望建立连接,需要B应答,并告诉主机B传输的起始序列号

第二次握手是主机B用一个确认应答ACK和同步序列号SYNC标志位的数据段来响应主机A,一是发送ACK告诉主机A收到了数据段,二是通知主机A从哪个序列号做标记。

第三次握手是主机A确认收到了主机B的数据段并可以开始传输实际数据。

断开连接时的四次请求

主机A发送FIN控制位发出断开连接的请求

主机B进行响应,确认收到断开连接请求

主机B提出反方向的关闭要求

主机A确认收到的主机B的关闭连接请求

为什么要四次分手?

TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工 模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2, 它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文 段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN 报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此 就会愉快的中断这次TCP连接。

结尾

TCP是一个非常复杂的协议,这里稍微总结了一下,随着学习时间增加,继续补充。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/107598.html

相关文章

  • Java NIO 的前生今世 之二 NIO Channel 小结

    摘要:通常来说所有的的操作都是从开始的一个类似于一个和对比我们可以在同一个中执行读和写操作然而同一个仅仅支持读或写可以异步地读写而是阻塞的同步读写总是从中读取数据或将数据写入到中类型有文件操作操作操作操作使用在服务器端这些通道涵盖了和网络以及文件 Java NIO Channel 通常来说, 所有的 NIO 的 I/O 操作都是从 Channel 开始的. 一个 channel 类似于一个 ...

    JasonZhang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<