TCP通信简单梳理

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,同步至SelectDB 1个月
简介: 一、什么是TCP协议 TCP协议是一种面向连接的可靠的通信协议,最重要的两个特点:连接、可靠。 二、TCP是如何进行通信的 TCP通过三次握手建立连接后客户端服务端的内核都分别开辟资源,这时候开始进行数据传输,最终通过四次挥手断开连接,释放资源,整体流程如下: 1、三次握手 三次握手流程如下: 1)

TCP通信简单梳理


一、什么是TCP协议


TCP协议是一种面向连接可靠的通信协议,最重要的两个特点:连接、可靠。


二、TCP是如何进行通信的


TCP通过三次握手建立连接后客户端服务端的内核都分别开辟资源,这时候开始进行数据传输,最终通过四次挥手断开连接,释放资源,整体流程如下:


 

1、三次握手


三次握手流程如下:


1)客户端向服务端发送SYN包告诉服务端我的初始序列号为X;


2)服务端接收后回复ACK包表示我收到了;


3)服务端也通过一个SYN包告知客户端我的序列号为Y;


4)客户端收到后回复服务端ACK包表示我也收到了。


从上面的流程上可以看出来,三次握手就是为了让客户端、服务端都能确认自己能发数据也能收数据即自己的输入输出是正常的,这时有人可能问了那应该四次握手啊?


这是因为实际应用中为了减少客户端与服务端直接交互次数,将服务端发送ACK包和SYN包合并处理,因而最终只需交互三次即可建立连接。


2、数据传输


TCP是一种可靠的传输协议,那么它可靠在哪呢?—— 确认机制。在数据传输过程中每一次数据包的传递都需要发送ACK包进行确认,通过这样的方式确保每一次传输都是可靠的。


3、四次挥手


由于连接的资源总是有限的,所以当数据传输完毕我们需要关闭连接由于TCP是全双工的,所以要断开连接,两边都需要拆除连向对端的通信信道,所以四次挥手流程如下:


1)客户端发送一个 FIN 包来告诉服务端我已经没数据需要发送了;


2)服务端收到后回复一个 ACK 确认包说我知道了;


3)然后服务端在自己也没数据发送给客户端后,服务端也发送一个 FIN 包给客户端告诉客户端我也已经没数据发送了;


4)客户端收到后,就会回复一个 ACK 确认包说我知道了。

下面通过一个实际例子进行展示,我们通过tcpdump进行抓包,详细看下整个tcp通信过程。


首先通过如下命令监听80端口:


yangye@test:~$ sudo tcpdump -nn -i ens33 port 80
[sudo] password for yangye:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes


接着我们通过curl请求百度首页:


curl www.baidu.com


我们来看一下抓包情况:


# 客户端发送SYN包
07:59:59.841169 IP 172.16.194.129.58766 > 110.242.68.3.80: Flags [S], seq 3215627872, win 64240, options [mss 1460,sackOK,TS val 1796006028 ecr 0,nop,wscale 7], length 0
# 服务端返回ACK和SYN包
07:59:59.944579 IP 110.242.68.3.80 > 172.16.194.129.58766: Flags [S.], seq 2542675112, ack 3215627873, win 64240, options [mss 1460], length 0
# 客户端发送ACK包,这时三次握手结束,连接建立
07:59:59.944614 IP 172.16.194.129.58766 > 110.242.68.3.80: Flags [.], ack 1, win 64240, length 0
# 客户端请求首页
07:59:59.945103 IP 172.16.194.129.58766 > 110.242.68.3.80: Flags [P.], seq 1:78, ack 1, win 64240, length 77: HTTP: GET / HTTP/1.1
# 服务端确认收到请求
07:59:59.945488 IP 110.242.68.3.80 > 172.16.194.129.58766: Flags [.], ack 78, win 64240, length 0
# 服务端返回数据包
07:59:59.968917 IP 110.242.68.3.80 > 172.16.194.129.58766: Flags [P.], seq 1:2782, ack 78, win 64240, length 2781: HTTP: HTTP/1.1 200 OK
# 客户端确认收到
07:59:59.968955 IP 172.16.194.129.58766 > 110.242.68.3.80: Flags [.], ack 2782, win 62780, length 0
# 客户端告诉服务端我要关闭连接
07:59:59.970750 IP 172.16.194.129.58766 > 110.242.68.3.80: Flags [F.], seq 78, ack 2782, win 62780, length 0
# 服务端返回ACK
07:59:59.970959 IP 110.242.68.3.80 > 172.16.194.129.58766: Flags [.], ack 79, win 64239, length 0
# 服务端告诉客户端它也要关闭连接
07:59:59.993361 IP 110.242.68.3.80 > 172.16.194.129.58766: Flags [FP.], seq 2782, ack 79, win 64239, length 0
# 客户端返回ACK
07:59:59.993397 IP 172.16.194.129.58766 > 110.242.68.3.80: Flags [.], ack 2783, win 62780, length 0
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
网络协议 物联网 开发者
NB-IoT 通信之 TCP 收发数据 | 学习笔记
快速学习 NB-IoT 通信之 TCP 收发数据
NB-IoT 通信之 TCP 收发数据 | 学习笔记
|
网络协议 安全 网络安全
网络编程:基于socket的TCP/IP通信。
网络编程:基于socket的TCP/IP通信。
|
网络协议 安全 Java
Java网络编程入门涉及TCP/IP协议理解与Socket通信。
【6月更文挑战第21天】Java网络编程入门涉及TCP/IP协议理解与Socket通信。TCP/IP协议包括应用层、传输层、网络层和数据链路层。使用Java的`ServerSocket`和`Socket`类,服务器监听端口,接受客户端连接,而客户端连接指定服务器并交换数据。基础示例展示如何创建服务器和发送消息。进阶可涉及多线程、NIO和安全传输。学习这些基础知识能助你构建网络应用。
115 1
|
网络协议
计算机通信地址【图解TCP/IP(笔记六)】
计算机通信地址【图解TCP/IP(笔记六)】
241 0
|
网络协议 安全 Java
Java网络编程入门指南:TCP/IP协议与Socket通信
Java网络编程入门指南:TCP/IP协议与Socket通信
219 1
|
SQL 网络协议 前端开发
🚀超级简单的图解TCP/IP,看不懂来打我:OSI模型与通信示例🚀
🚀超级简单的图解TCP/IP,看不懂来打我:OSI模型与通信示例🚀
|
存储 网络协议 前端开发
OSI参考模型通信处理例子【图解TCP/IP(笔记四)】
OSI参考模型通信处理例子【图解TCP/IP(笔记四)】
362 0
|
监控 网络协议 安全
一文了解HTTP、HTTPS、TCP、UDP、Websocket(论点:概念、通信流程、异同点、应用领域)
一文了解HTTP、HTTPS、TCP、UDP、Websocket(论点:概念、通信流程、异同点、应用领域)
|
网络协议
Netty实现TCP通信
Netty实现TCP通信
|
网络协议 Unix Linux
linux网络编程(三) TCP通信时序与多进程/线程并发服务器的编写
linux网络编程(三) TCP通信时序与多进程/线程并发服务器的编写
463 0
linux网络编程(三) TCP通信时序与多进程/线程并发服务器的编写