Python基于TCP 协议命令执行
一、什么是 TCP
TCP 即传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基
于字节流的传输层通讯协议。
TCP 是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。
互联网与单个网络有很大的不同,因为互联网的不同部分可能有截然不同的拓补结构、带宽、
延迟、数据包大小和其他参数。TCP 的设计目标是能够动态地适应互联网的这些特性,而且
具备面向各种故障的健壮性。
不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是 IP 层不提供这样的流机
制,而是提供不可靠的包交换。
应用层向 TCP 层发送用于网间传输的、用 8 位字节表示的数据流,然后 TCP 把数据流分区成
适当长度的报文段(通常受计算连接的网络的数据链路层的最大传输单元(MTU)的限制)。
之后 TCP 把结果包传输给 IP 层,有它来通过网络将包传送给接收端实体的 TCP 层。
TCP 为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包
的按序接收。然后接收端实体对已成功接收到的包回一个相应的确认(ACK);如果发送端实
体在合理的往返时延(RTT)内未接收到确认,那么对应的数据包就被假设为已丢失将会被
进行重传。TCP 用一个校验和函数来校验数据是否有误;在发送和接收时都要计算校验。
每台支持 TCP 的机器都有一个 TCP 传输实体。TCP 实体可以时一个库过程、一个用户进程、
或者内核的一部分。在所有这些情形下,它管理 TCP 流,以及与 IP 层之间的接口。TCP 传
输实体接收本地进程的用户数据流,将他们分割成不超过 64KB(实际上去掉 IP 和 TCP 头,
通常不超过 1460 数据字节)的分段,每个分段以单独的 IP 数据报形式发送。当包含 TCP 数
据的数据报到达一台机器时,它们被递交给 TCP 传输实体,TCP 传输实体重构出原始的字节
流。为简化起见,我们有时候仅仅用 TCP 来代表 TCP 传输实体(一段软件)或者 TCP 协议
(一组规则)。根据上下文语义你应该能很清楚的推断出其实际含义。例如,在‘用户将数
据提交给 TCP’这句话中,很显然这里指的是 TCP 实体。
IP 层并不保证数据报一定被正确的提交到接收方,也不只是数据报的发送速度有多块。正
是 TCP 负责纪要足够快的发送数据报,以便使用网络容量,但又不能引起网络阻塞:而且,
TCP 超时后,要重传没有递交的数据报。即使被正确递交的数据报,也可能存在错误的问题,
这也是 TCP 的责任,它必须把接收到的数据报重新装配成正确的顺序,简言之,TCP 必须提
供可靠性的良好性能,这正是大多数用户所期望的而 IP 又没有提供的功能。
二、TCP 的主要特点
当应用层向 TCP 层发送用于网间传输的、用 8 位字节表示的数据流,TCP 则把数据流分割成
适当长度的报文。之后 TCP 把数据包传递给 IP 层,由它来通过网络将包传送给接收端实体
的 TCP 层。
TCP 是一种面向广域网的通信协议,目的是在跨越多个网络通信时,为两个通信端点之间提
供一条具有一下特点的通信方式:
(1)基于流的方式;
(2)面向连接;
(3)可靠通信方式;
(4)在网络情况不佳的时候尽量降低系统由于重传带来的带宽开销;
(5)通信连接维护是面向的两个端点的,而不考虑中间网段和节点。
为满足 TCP 协议的这些特点,TCP 协议做了以下规定:
① 数据分片:在发送端对用户数据进行分片,在接收端进行重组,由 TCP 确定分片的大小
并控制分片和重组;
②到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认;
③超时重发:发送方在发送分片时启动超时定时器,如果在定时器超时之后没有接收到
对应的确认,重发分片;
④滑动窗口:TCP 连接每一方的接收缓冲空间大小都固定,接收端只允许另一端发送接
收端缓冲区所能接纳的数据,TCP 在滑动窗口的基础上提供流量控制,防止较快主机致
使较慢主机的缓冲区溢出;
⑤失序处理:作为 IP 数据报来传输的 TCP 分片到达时可能会失序,TCP 将对接收的数据
进行重新排序,将接收到的数据以正确的顺序交给应用层;
⑥重复处理:作为 IP 数据报来传输的 TCP 分片会发生重复,TCP 的接收端必须丢弃重复
的数据;
⑦数据校验:TCP 将保持它首部和数据的校验和,这是一个端到端的校验和,目的是检
测数据在传输过程中的任何变化。如果收到分片的校验和由差错,TCP 将丢弃这个分片,
并确认接收到此报文段导致对端超时并重发。
三、工作方式
建立连接
TCP 是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出 SYN连接请求后,
等待对方回答 SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止
产生错误的连接,TCP 使用的流量控制协议是可变大小的滑动窗口协议。
TCP 三次握手的过程如下:
(1)客户端发送 SYN(SEQ=x)报文给服务端,进入 SYN_SEND 状态。
(2)服务端接收 SYN 报文,回应一个 SYN(SEQ=y)ACK(ACK=x+1)报文,进入 SYN_RECV 状
态。
(3)客户端收到服务器端的 SYN 报文,回应一个 ACK(ACK=y+1)报文,进入 Established
状态。
三次握手完成,TCP 客户端和服务器端成功的建立连接,可以开始传输数据了。如图:
连接终止
建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由 TCP 的半关闭(halfclose)造成的。
(1)某个应用进程首先调用 close,称该端执行”主动关闭“(active close)。该端的 TCP
于是发送一个 FIN 分节,表示数据分发完毕。
(2)接收到这个 FIN 的对端执行”被动关闭“(passive close),这个 FIN 由 TCP 确认。
注意:FIN 的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排
队等候应用进程接收的任何其他数据报之后,因为,FIN 的接收意味着接收端应用进程相应
连接再无额外数据可接收。
(3)一段时间后,接收到这个文件结束符的应用进程将调用 close 关闭它的套接字,这导
致它的 TCP 也发送一个 FIN。
(4)接收这个最终 FIN 的原发送端 TCP(即执行主动关闭的那端)确认这个 FIN。既然每个
方向都需要一个 FIN 和一个 ACK,因此通常需要 4 个分节。
如下图:
执行系统命令
Services:
Client端:
一、什么是 TCP
TCP 即传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基
于字节流的传输层通讯协议。
TCP 是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。
互联网与单个网络有很大的不同,因为互联网的不同部分可能有截然不同的拓补结构、带宽、
延迟、数据包大小和其他参数。TCP 的设计目标是能够动态地适应互联网的这些特性,而且
具备面向各种故障的健壮性。
不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是 IP 层不提供这样的流机
制,而是提供不可靠的包交换。
应用层向 TCP 层发送用于网间传输的、用 8 位字节表示的数据流,然后 TCP 把数据流分区成
适当长度的报文段(通常受计算连接的网络的数据链路层的最大传输单元(MTU)的限制)。
之后 TCP 把结果包传输给 IP 层,有它来通过网络将包传送给接收端实体的 TCP 层。
TCP 为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包
的按序接收。然后接收端实体对已成功接收到的包回一个相应的确认(ACK);如果发送端实
体在合理的往返时延(RTT)内未接收到确认,那么对应的数据包就被假设为已丢失将会被
进行重传。TCP 用一个校验和函数来校验数据是否有误;在发送和接收时都要计算校验。
每台支持 TCP 的机器都有一个 TCP 传输实体。TCP 实体可以时一个库过程、一个用户进程、
或者内核的一部分。在所有这些情形下,它管理 TCP 流,以及与 IP 层之间的接口。TCP 传
输实体接收本地进程的用户数据流,将他们分割成不超过 64KB(实际上去掉 IP 和 TCP 头,
通常不超过 1460 数据字节)的分段,每个分段以单独的 IP 数据报形式发送。当包含 TCP 数
据的数据报到达一台机器时,它们被递交给 TCP 传输实体,TCP 传输实体重构出原始的字节
流。为简化起见,我们有时候仅仅用 TCP 来代表 TCP 传输实体(一段软件)或者 TCP 协议
(一组规则)。根据上下文语义你应该能很清楚的推断出其实际含义。例如,在‘用户将数
据提交给 TCP’这句话中,很显然这里指的是 TCP 实体。
IP 层并不保证数据报一定被正确的提交到接收方,也不只是数据报的发送速度有多块。正
是 TCP 负责纪要足够快的发送数据报,以便使用网络容量,但又不能引起网络阻塞:而且,
TCP 超时后,要重传没有递交的数据报。即使被正确递交的数据报,也可能存在错误的问题,
这也是 TCP 的责任,它必须把接收到的数据报重新装配成正确的顺序,简言之,TCP 必须提
供可靠性的良好性能,这正是大多数用户所期望的而 IP 又没有提供的功能。
二、TCP 的主要特点
当应用层向 TCP 层发送用于网间传输的、用 8 位字节表示的数据流,TCP 则把数据流分割成
适当长度的报文。之后 TCP 把数据包传递给 IP 层,由它来通过网络将包传送给接收端实体
的 TCP 层。
TCP 是一种面向广域网的通信协议,目的是在跨越多个网络通信时,为两个通信端点之间提
供一条具有一下特点的通信方式:
(1)基于流的方式;
(2)面向连接;
(3)可靠通信方式;
(4)在网络情况不佳的时候尽量降低系统由于重传带来的带宽开销;
(5)通信连接维护是面向的两个端点的,而不考虑中间网段和节点。
为满足 TCP 协议的这些特点,TCP 协议做了以下规定:
① 数据分片:在发送端对用户数据进行分片,在接收端进行重组,由 TCP 确定分片的大小
并控制分片和重组;
②到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认;
③超时重发:发送方在发送分片时启动超时定时器,如果在定时器超时之后没有接收到
对应的确认,重发分片;
④滑动窗口:TCP 连接每一方的接收缓冲空间大小都固定,接收端只允许另一端发送接
收端缓冲区所能接纳的数据,TCP 在滑动窗口的基础上提供流量控制,防止较快主机致
使较慢主机的缓冲区溢出;
⑤失序处理:作为 IP 数据报来传输的 TCP 分片到达时可能会失序,TCP 将对接收的数据
进行重新排序,将接收到的数据以正确的顺序交给应用层;
⑥重复处理:作为 IP 数据报来传输的 TCP 分片会发生重复,TCP 的接收端必须丢弃重复
的数据;
⑦数据校验:TCP 将保持它首部和数据的校验和,这是一个端到端的校验和,目的是检
测数据在传输过程中的任何变化。如果收到分片的校验和由差错,TCP 将丢弃这个分片,
并确认接收到此报文段导致对端超时并重发。
三、工作方式
建立连接
TCP 是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出 SYN连接请求后,
等待对方回答 SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止
产生错误的连接,TCP 使用的流量控制协议是可变大小的滑动窗口协议。
TCP 三次握手的过程如下:
(1)客户端发送 SYN(SEQ=x)报文给服务端,进入 SYN_SEND 状态。
(2)服务端接收 SYN 报文,回应一个 SYN(SEQ=y)ACK(ACK=x+1)报文,进入 SYN_RECV 状
态。
(3)客户端收到服务器端的 SYN 报文,回应一个 ACK(ACK=y+1)报文,进入 Established
状态。
三次握手完成,TCP 客户端和服务器端成功的建立连接,可以开始传输数据了。如图:
连接终止
建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由 TCP 的半关闭(halfclose)造成的。
(1)某个应用进程首先调用 close,称该端执行”主动关闭“(active close)。该端的 TCP
于是发送一个 FIN 分节,表示数据分发完毕。
(2)接收到这个 FIN 的对端执行”被动关闭“(passive close),这个 FIN 由 TCP 确认。
注意:FIN 的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排
队等候应用进程接收的任何其他数据报之后,因为,FIN 的接收意味着接收端应用进程相应
连接再无额外数据可接收。
(3)一段时间后,接收到这个文件结束符的应用进程将调用 close 关闭它的套接字,这导
致它的 TCP 也发送一个 FIN。
(4)接收这个最终 FIN 的原发送端 TCP(即执行主动关闭的那端)确认这个 FIN。既然每个
方向都需要一个 FIN 和一个 ACK,因此通常需要 4 个分节。
如下图:
执行系统命令
Services:
Client端:



