Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > Linux网络--传输层--TCP协议

Linux网络--传输层--TCP协议基础详解

作者:s_little_monster_

这篇文章主要介绍了Linux网络--传输层--TCP协议基础,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、TCP协议格式

TCP(传输控制协议)报文结构是网络通信中重要的基础概念,用于实现可靠的数据传输

源端口与目的端口

序号

确认序号

首部长度

标志位

用来区分TCP报文的类型

窗口大小

校验和

紧急指针

选项与填充

常见选项

数据部分

TCP与UDP的对比

特性TCPUDP
连接性面向连接(需三次握手)无连接(直接发送)
可靠性可靠(重传、校验)不可靠(尽力而为)
首部开销20~60字节(含选项)8字节
适用场景文件传输、HTTP等视频流、DNS查询等

通过以上结构,TCP能够实现可靠、有序、流量可控的数据传输,是互联网核心协议之一

二、TCP协议机制

TCP拥有发送缓冲区和接收缓冲区两个缓冲区,发送信息的流程是:

这里发送和接收的数据就是上面我们提到的协议格式下的报文

三、确认应答机制

TCP确认应答机制是确保数据可靠传输的核心机制之一,也是区别于UDP的核心特点之一,在保证可靠性的同时,尽可能优化传输效率

基本概念

工作流程

序号

确认号

确认应答机制

确认类型

累积确认

选择性确认

优化策略

延迟确认

确认应答压缩

示例说明

这个确认应答呢我有一个小技巧来记忆,发送方发送数据段之后,比如说发送了序号1000,它代表着1000~1999,那我下一个是不是就要要2000了,那么我们确认应答发送的就是2000

四、捎带应答

我们将捎带应答这个解释过程简化为两张图,黑色斜线表示通信双方,正常情况下如下图所示,左边给右边发送一个报文,右边要给左边一个应答,表示已经收到数据,当然这里的应答也是严格按照TCP报文结构来的,发送的也是一个完整的TCP报文(至少有报头),之后右边再给左边发送报文,左边再给右边发送一个应答

但是这样的效率会很低,在正常情况下,双方不会这样进行通信,而是将应答和要发送的TCP数据整合成一条报文,此时发送的这条报文既是应答又是数据,减少开支

五、三次握手和四次挥手

1、应用层行为

这边我们举一个客户端和服务端的例子

三次握手

数据传输

四次挥手

2、三次握手—建立连接

三次握手的机制就是建立在捎带应答上的,捎带应答不仅是通信时的一种策略,并且是建立连接时的策略

三次握手也可以是四次握手,理由和上面一样,这里的第二次握手本来也是两条消息合并发送而已

3、四次挥手—断开连接

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

您可能感兴趣的文章:
阅读全文