TCP三次握手和四次断开

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介:

TCP,一个大家都熟悉的协议,对于技术人员来说,透彻的理解他,就到代表咱们的半只脚已经踏进了IT的大门。


TCP的特点

TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着是一对一的连接(通常是一个客户端连接一个服务端),在交换数据之前,需要先建立连接。在TCP的连接中,仅有一对一的双方建立连接,多播和广播不属于TCP的连接。


TCP保证其可靠性的机制

  • 应用数据被分割成TCP认为最适合发送的数据块。由TCP传递给IP的信息单位称为报文段或段(segment

  • 超时重传策略。当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

  • 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒.

  • TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。

  • 如果收到段的检验和有差错, TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。

  • 既然TCP报文段作为IP数据报来传输,而 IP数据报的到达可能会失序,因此 TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。

  • 既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。

  • TCP还能提供流量控制。 TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。


    (可参见《TCP/IP详解卷一》)




TCP一些属性说明

  • 端口号:

    每个TCP段都包含源端和目的端的端口号,用于寻找发端和收端应用进程。这两个值加

    上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接。


  • 网络套接字(socket):

    一个IP地址和一个端口号也称为一个socket。它也作为表示伯克利版的编程接口,socket包含客户IP地址、客户端口号、服务器IP地址和服务器端口号的四元组,可唯一确定互联网络中每个TCP连接的双方。


  • 全双工:

    TCP为应用层提供全双工服务。这意味数据能在两个方向上独立地进行传输。因此,连

    接的每一端必须保持每个方向上的传输数据序号。


当我们在Linux系统中使用tcpdump时可以看到一些数据的传输信息,这包含了TCP数据包的一些报头信息:

1
2
3
4
# tcpdump -i eth0 '(( host 192.168.1.210) and ( port 80))'
13:30:19.078214 IP 192.168.1.106.53190 >192.168.1.210.http: Flags [S],  seq  1725365454, win 8192, options [mss1460,nop,wscale 8,nop,nop,sackOK], length 0
13:30:19.078342 IP 192.168.1.210.http >192.168.1.106.53190: Flags [S.],  seq  4163517334, ack 1725365455, win 14600,options [mss 1460,nop,nop,sackOK,nop,wscale 6], length 0
13:30:19.078649 IP 192.168.1.106.53190 >192.168.1.210.http: Flags [.], ack 1, win 68, length 0


上面为一次三次握手建立连接的过程。

其中,格式为: 原地址 > 目的地址 : 标示,[S]标示SYN, 其中win表示窗口大小,也就是数据量的大小,可以用于流量控制,默认为4096,最大为65535,它是由一个16bit的字段表示的。

SYN: 同步序号连接标示,用来发起一个连接。

ACK: 应答标示,用来确认同步序号有效。

FIN:结束连接标示。


TCP三次握手过程

TCP的三次握手过程其实可以用一个简单的图表示:


wKioL1d36NjSl8QZAABnWE_I3B4738.jpg-wh_50


连接过程:

  1. 请求端(通常为客户端)发送一个SYN段的请求,指明了客户端打算连接的服务的端口以及初始序号ISN,假设这个把报文段为SYN0.

  2. 服务器发回包含服务端的初始序号的SYN报文段(SYN1)作为应答,同时在请求端发送的SYN上加1,以ACK的方式返回进行确认。之所以会加1是因为一个SYN将占用一个序号。

  3. 客户端必须将确认序号设置为服务端的ISN加1返回一个ACK,以对服务器端SYN报文进行确认.

这样就建立了连接。

这一个简单的过程可以理解为,你去商店买东西.

你向服务员发起一个请求,说:我要xxx,请你把它给我(SYN0);

服务员说:好的我已经收到你的请求(SYN1)您要的是xxx对吧(ACK=SYN0+1);

你说:是的(Ack).

然后你们就开始进行交易。


TCP 四次断开过程

建立一个连接需要三次握手,而终止一个连接要经过4次握手。这由TCP的半关闭(HALF-CLOSE)造成的。既然一个TCP连接是全双工(即数据在两个方向上能同时传递),因此每个方

向必须单独地进行关闭。这原则就是当一方完成它的数据发送任务后就能发送一个FIN来终止

这个方向连接。当一端收到一个FIN,它必须通知应用层另一端几经终止了那个方向的数据传

送。发送FIN通常是应用层进行关闭的结果。

四次断开的图示如下:


wKiom1d5NPDhJkEYAADm1N_loes166.jpg

断开的过程:

  1. 当有一方要终止连接时,会向对方发送一个FIN的信号n.

  2. 接受方收到信息后,会回复一个ACK(n+1)表示已经收到请求,但此时并不会立即中断连接,而是去尝试关闭自身的连接。

  3. 当响应客户端关闭本地的TCP连接之后,会向请求端重新发送一个新的FIN m,表示此事响应端可以关闭。

  4. 请求端接受到FIN m的信号后,回复一个ACK,同时自己也进入TIME_WAIT状态,而响应端进入close状态。



这里应用TCP/IP协议卷的一张图,说明了主机在TCP交互过程中状态的变化:

wKioL1d5OfXjrel7AACtNzWU-M8554.jpg

其实这些内容只是TCP协议的冰山一角,在这个交互过程中还有很多算法和协议规则,具体的细节大家可以参考TCP/IP协议卷。




 本文转自 酥心糖 51CTO博客,原文链接:http://blog.51cto.com/tryingstuff/1795450

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
缓存 网络协议 安全
TCP通信机制:三次握手、四次挥手、滑动窗口
TCP通信机制:三次握手、四次挥手、滑动窗口
778 1
TCP通信机制:三次握手、四次挥手、滑动窗口
|
网络协议 算法 网络性能优化
理解TCP协议三次握手、四次挥手、流量控制、拥塞控制 、重传机制
TCP概述 TCP是一种面向连接的协议,在发送数据前通信双方必须在彼此间建立一条连接 所谓的连接其实就是客户端和服务器的内存里保存一份关于对方的信息,如IP地址、端口 TCP是一种字节流,它会处理IP层的丢包、重复以及错误问题 在建立连接的过程中,双方交换的一些参数可以放到TCP的头部 总结 :TCP提供了一种可靠、面向连接、字节流、传输层的服务,采用三次握手建立一个连接,四次挥手关闭一个连接
279 2
理解TCP协议三次握手、四次挥手、流量控制、拥塞控制 、重传机制
|
缓存 网络协议 安全
TCP三次握手四次挥手及常见问题解决方案
TCP三次握手四次挥手及常见问题解决方案
TCP三次握手四次挥手及常见问题解决方案
|
网络协议 测试技术
软件测试|TCP三次握手四次挥手
软件测试|TCP三次握手四次挥手
158 0
软件测试|TCP三次握手四次挥手
|
网络协议 网络性能优化
计算机网络【UDP与TCP协议(三次握手、四次挥手)】(下)
计算机网络【UDP与TCP协议(三次握手、四次挥手)】(下)
计算机网络【UDP与TCP协议(三次握手、四次挥手)】(下)
|
缓存 网络协议 网络性能优化
计算机网络【UDP与TCP协议(三次握手、四次挥手)】(上)
计算机网络【UDP与TCP协议(三次握手、四次挥手)】(上)
计算机网络【UDP与TCP协议(三次握手、四次挥手)】(上)
|
网络协议 安全 Linux
《我要进大厂》- 计算机网络夺命连环23问,你能坚持到第几问?(TCP 三次握手、四次挥手
《我要进大厂》- 计算机网络夺命连环23问,你能坚持到第几问?(TCP 三次握手、四次挥手
《我要进大厂》- 计算机网络夺命连环23问,你能坚持到第几问?(TCP 三次握手、四次挥手
|
存储 网络协议 算法
《我要进大厂》- 计算机网络夺命连环20问,你能坚持到第几问?(应用层协议 | TCP三次握手、四次挥手 | TCP可靠传输 | Cookie&Session)(下)
《我要进大厂》- 计算机网络夺命连环20问,你能坚持到第几问?(应用层协议 | TCP三次握手、四次挥手 | TCP可靠传输 | Cookie&Session)
《我要进大厂》- 计算机网络夺命连环20问,你能坚持到第几问?(应用层协议 | TCP三次握手、四次挥手 | TCP可靠传输 | Cookie&Session)(下)
|
网络协议 安全 机器人
《我要进大厂》- 计算机网络夺命连环20问,你能坚持到第几问?(应用层协议 | TCP三次握手、四次挥手 | TCP可靠传输 | Cookie&Session)(上)
《我要进大厂》- 计算机网络夺命连环20问,你能坚持到第几问?(应用层协议 | TCP三次握手、四次挥手 | TCP可靠传输 | Cookie&Session)
《我要进大厂》- 计算机网络夺命连环20问,你能坚持到第几问?(应用层协议 | TCP三次握手、四次挥手 | TCP可靠传输 | Cookie&Session)(上)
|
网络协议 安全 Linux
Linux网络原理及编程(5)——第十五节 TCP的连接(三次握手、四次挥手)
本节我们来介绍TCP连接的建立和断开。我们主要介绍两个过程、两个状态。
200 0
Linux网络原理及编程(5)——第十五节 TCP的连接(三次握手、四次挥手)