赞
踩
本篇内容包括:TCP/IP 传输协议(TCP/IP 传输协议简介,IP 协议,UDP 协议,TCP 协议介绍),TCP 的三次握手、TCP 的四次挥手 以及 TCP 协议是怎么保证有效传输等内容。
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP 协议不仅仅指的是 TCP 和 IP 两个协议,而是指一个由 FTP、SMTP、TCP、UDP、IP 等协议构成的协议簇, 只是因为在 TCP/IP 协议中 TCP 协议和 IP 协议最具代表性,所以被称为 TCP/IP 协议。
TCP/IP 传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和数据链路层都包含其中。
IP 协议也就是我们所说的网络层协议,它的主要目的就是将一个 IP 地址的数据发送到另外一个 IP 地址所代表的设备,这两个 IP 地址有可能是隶属于同一个网段,也有可能隶属于不同的网段
IP 协议,制定了一套新地址,使得我们能够区分两台主机是否同属一个网络,这套地址就是网络地址,也就是所谓的 IP 地址。IP 协议将这个 32 位的地址分为两部分,前面部分代表网络地址,后面部分表示该主机在局域网中的地址。如果两个 IP 地址在同一个子网内,则网络地址一定相同。为了判断 IP 地址中的网络地址,IP 协议还引入了子网掩码,IP 地址和子网掩码通过按位与运算后就可以得到网络地址。
UDP 即用户数据报协议,UDP 协议定义了端口,同一个主机上的每个应用程序都需要指定唯一的端口号,并且规定网络中传输的数据包必须加上端口信息,当数据包到达主机以后,就可以根据端口号找到对应的应用程序了。UDP 协议比较简单,实现容易,但它没有确认机制,数据包一旦发出,无法知道对方是否收到,因此可靠性较差,为了解决这个问题,提高网络可靠性,TCP 协议就诞生了。
TCP 即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,简单来说 TCP 就是有确认机制的 UDP 协议。TCP 数据包和 UDP 一样,都是由首部和数据两部分组成,唯一不同的是,TCP 数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常 TCP 数据包的长度不会超过 IP 数据包的长度,以确保单个 TCP 数据包不必再分割。 当一个连接被建立或被终止时,交换的报文段只包含 TCP 头部,而没有数据。
一个 TCP 连接由一个 4 元组构成,分别是两个 IP 地址和两个端口号。一个 TCP 连接通常分为三个阶段:连接、数据传输、退出(关闭)。通过三次握手建立一个连接,通过四次挥手来关闭一个连接。
TCP协议头最少 20 个字节,包括以下的区域:
三次握手的本质是确认通信双方收发数据的能力。
次数 | 我的发件能力可以 | 我的收件能力可以 | 他的发件能力可以 | 他的收件能力可以 |
---|---|---|---|---|
第一次 | 他知道 | 他知道 | ||
第二次 | 我知道 | 我知道 | 我知道 | 我知道 |
第三次 | 他知道 | 他知道 |
三次握手详细过程:
四次挥手的目的是关闭一个连接
比如客户端初始化的序列号 ISA=100,服务端初始化的序列号 ISA=200。TCP 连接成功后客户端总共发送了 1000 个字节的数据,服务端在客户端发 FIN 报文前总共回复了 2000 个字节的数据:
TCP 是通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输的。
确认应答:TCP 实现可靠传输的方式之一,是通过序列号与确认应答。
连接管理:三次握手、四次挥手
重传机制:但在复杂的网络环境下,并不一定能正常的数据传输,万一数据在传输过程中丢失了呢?所以 TCP 针对数据包丢失的情况,会用重传机制解决。
滑动窗口:我们都知道 TCP 是每发送一个数据,都要进行一次确认应答。当上一个数据包收到了应答了, 再发送下一个。这个模式就有点像我和你面对面聊天,你一句我一句。这样的传输方式有一个缺点:数据包的往返时间越长,通信的效率就越低。
为解决这个问题,TCP 引入了窗口这个概念。即使在往返时间较长的情况下,它也不会降低网络通信的效率。那么有了窗口,就可以指定窗口大小,窗口大小就是指无需等待确认应答,而可以继续发送数据的最大值。窗口的实现实际上是操作系统开辟的一个缓存空间,发送方主机在等到确认应答返回之前,必须在缓冲区中保留已发送的数据。如果按期收到确认应答,此时数据就可以从缓存区清除。
流量控制:发送方不能无脑的发数据给接收方,要考虑接收方处理能力。如果一直无脑的发数据给对方,但对方处理不过来,那么就会导致触发重发机制,从而导致网络流量的无端的浪费。为了解决这种现象发生,TCP 提供一种机制可以让「发送方」根据「接收方」的实际接收能力控制发送的数据量,这就是所谓的流量控制。
接收方会在返回 ACK 时同时把自己的即时窗口填入,发送方就根据报文中窗口的大小控制发送速度。
拥塞控制:前面的流量控制是避免「发送方」的数据填满「接收方」的缓存,但是并不知道网络的中发生了什么。一般来说,计算机网络都处在一个共享的环境。因此也有可能会因为其他主机之间的通信使得网络拥堵。在网络出现拥堵时,如果继续发送大量数据包,可能会导致数据包时延、丢失等,这时 TCP 就会重传数据,但是一重传就会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,这个情况就会进入恶性循环被不断地放大…
所以,TCP 不能忽略网络上发生的事,它被设计成一个无私的协议,当网络发送拥塞时,TCP 会自我牺牲,降低发送的数据量。于是,就有了拥塞控制,控制的目的就是避免「发送方」的数据填满整个网络。
拥塞窗口 cwnd 是发送方维护的一个的状态变量,它会根据网络的拥塞程度动态变化的。其实只要「发送方」没有在规定时间内接收到 ACK 应答报文,也就是发生了超时重传,就会认为网络出现了用拥塞。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。