趣谈网络8讲| TCP

上一讲讲的是 UDP 协议,UDP 协议的特性像是一个小孩子,只知道一股脑的向网络发送数据包,没有任何的反馈机制以及安全机制。TCP 协议对比 UDP 协议,那 TCP 就像个成年人一样,考虑颇多。下面先给出 TCP 头的格式

从一个头的格式中我们就可以看到 TCP 的一些特性。

源端口号和目的端口号 : 这个不管在那种协议,都会存在

包的序号 : 通过给包编号,防止乱序

确认序号 : 发出去的包应该有确认,这个可以解决不丢包的问题

状态位 : 用来标记 TCP 连接过程中出现的一些状态

窗口大小 : 这个是用来标记滑动窗口的大小

校验和 : 为了保证传输数据的安全,通过校验和来识别数据在传输过程中是否被篡改。

通过对 TCP 头的解析,要掌握 TCP 协议,应该关注以下几个问题:

  • 顺序问题
  • 丢包问题
  • 链接维护
  • 流量控制
  • 拥塞控制

TCP 三次握手

下面用一张图直接给出三次握手的详细过程

刚开始的时候,客户端和服务端都处于 CLOSED 的状态。先是服务端主动监听某个端口,处于 LISTEN 状态。然后客户端主动发起连接 SYN ,之后处于 SYN-SENT 状态。 服务端收到发起的连接,返回 SYN,并且 ACK 客户端的 SYN ,之后处于 SYN-RCVD 状态。 客户端收到服务端的 SYN 和 ACK 之后,发送 ACK 的 ACk,之后处于 ESTABLISHED 状态,因为它一发一收成功了,服务端收到 ACK 的 ACK 之后,处于 ESTAABLISHED 的状态,因为服务端也一收一发了。

三次握手除了保证连接的可靠性、安全性之外,也保证了包的顺序性。为什么需要第三次握手呢?因为第三次握手是为了防止在网络中拥塞的请求再次发起对服务端的请求。

四次挥手

TCP 连接的时候采用 三次握手,那么 TCP 断开连接的过程是怎么样的呢?下面给出 TCP 断开连接的时序图,即 四次挥手

在上图中需要解释一些,为什么 TIME-WAIT 设置为 2MSL,MSL 是 Maximum Segment Lifetime, 报文最大生存时间,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。因为 TCP 报文是基于 IP 协议的,而 IP 头中有一个 TTL 域,是 IP 数据包可以经过的最大路有数,每经过一个路由它的路由器此值就减一,当此值减为0时,数据包就会被丢弃,同时发送 ICMP 报文通知源主机。

TCP 状态机

将 TCP 连接建立和连接断开的两个时序图综合起来,就是著名的 TCP 的状态机。

在这个图中,加黑加粗的部分是上面说到的主要流程,其中阿拉伯数字的序号,是连接过程中的顺序,而大写中文数字的序号,是连接断开的顺序。加粗的实线是客户端 A 的状态变迁,加粗的虚线是服务端 B 的状态变迁。

说点什么

avatar
  Subscribe  
提醒

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部