第三讲:TCP协议 本期专家技术干货是由西门子工业专家天团的冯学卫带来的《网络协议详解之TCP协议》,本期篇幅略长,建议收藏后慢慢观看。 冯工擅长的产品及领域: 西门子全集成自动化系统和技术,包括S7-PLC自动化系统,网络通讯,Profinet网络,工厂网络系统,工业远程通信,工业信息安全,工业边缘计算。 关于他的更多内容,请观看视频👇 (下划进入正文) TCP协议简介 UDP是一种没有复杂控制,提供面向无连接通信服务的一种协议。换句话说,它将部分控制转移给应用程序去处理(例如TFTP),自己却只是提供作为传输层协议的最基本功能。 TCP与UDP不同,TCP则“人如其名”,可以说对“传输、发送、通信”进行“控制”的“协议”。 TCP与UDP区别相当大。它充分地实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在UDP中都没有。此外,TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。 TCP VS UDP TCP提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好通信两端之间的准备工作。 UDP是一种面向无连接的通信协议,因此不检查对端是否可以通信,直接将UDP包发送出去。TCP与此相反,它会在数据通信之前,通过TCP首部发送一个SYN包作为建立连接的请求等待确认应答。如果对端发来确认应答,则认为可以进行数据通信。如果对端的确认应答未能到达,就不会进行数据通信。此外,在通信结束时会进行断开连接的处理(FIN包)。 可以使用TCP首部用于控制的字段来管理TCP连接,一个连接的建立与断开,正常过程至少要来回7个包才能完成。 TCP首部报文格式
1、URG (Urgent Flag) 该位为1时,表示包中有需要紧急处理的数据。对于需要紧急处理的数据,会在后面的紧急指针中再进行解释。 2、ACK (Acknowledgement Flag) 该位为1时,确认应答的字段变为有效。也就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1,为1的时候表示应答域有效,反之为0。 3、PSH(Push Flag) 该位为1时,表示需要将收到的数据立刻传给上层应用协议。PSH为0时,则不需要立即传而是先进行缓存。 4、RST(Reset Flag) 该位为1时,这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包。 5、SYN(Synchronize Flag) 表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1,ACK=0;连接被相应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送一个只有SYN的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口;但是由于这种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全的主机将会强制要求一个连接严格的进行TCP的三次握手。 6、FIN(FIN Flag) 该位为1时,表示今后不会再有数据发送,希望断开连接(单项传输断开)。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换FIN位置1的TCP段。每个主机又对对方的FIN包进行确认应答以后就可以断开连接。不过,主机收到FIN设置为1的TCP段以后,不需要马上回复一个FIN置位的段给对方,而是可以等缓冲区中的所有数据都已经成功发送而被自动删除之后再发(半闭连接)。 7、ECE (ECN-Echo) 8、CER (Congestion Window Reduced) TCP支持使用TCP头中的两个标记(Flag)来支持ECN。分别用于回传拥塞指示(即指示发送者应减少信息发送量)和确认接收到了拥塞指示回应。这两个标记位就是ECE和CWR位。 在TCP连接上使用ECE是可选的。当ECE被使用时,必须在连接创建时通过SYN和SYN-ACK段中包含适当选项来协商。 当在一个TCP连接上协商ECE后,发送方指示连接上的TCP段携带IP分组传输流量,将支持ECE的传输用ECT码点标记。这是支持ECE的中间路由器可以标记具有ECE码点的IP分组而不是丢弃它们,以指示即将发生的阻塞。 当接收到具有遇到阻塞码点时,TCP接收者使用TCP头中的ECE标记回传这个阻塞指示。当一个端点收到TCP带有ECE位的段时,它减少其拥塞窗口来代替丢包。然后,它设置段的CWR位来确认阻塞指示。 节点保持传输设置有ECE位的TCP段,直到它接收到设置有CWR的段。
TCP的校验和是必需的,而UDP的校验和是可选的。 TCP和UDP一样在计算校验和的时候使用TCP伪首部,如上图。为了让其全长为16位的整数倍,需要在数据部分的最后填充0。首先将TCP校验和字段设置为0。然后以16位为单位进行1的补码和计算,再将它们总和的1的补码和放入校验和字段。 接收端在收到TCP数据段以后,从IP首部获取IP地址信息构造TCP伪首部,再进行校验和计算。
TCP连接的建立与终止 TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。 这种两端间连接的建立与无连接协议如UDP不同。UDP向另一端发送数据报时,无需任何预先的握手。
TCP三次握手的抓包分析 TCP连接的终止
TCP连接的终止抓包分析 Python代码实现Socket TCP Server Python代码实现Socket TCP Client Python代码 Client连接Server实验环境 Python代码 TCP Client连接TCP Server的测试步骤 1、查看防火墙的当前运行状态 2、运行Python TCP Server 3、运行Wireshark抓包分析 4、运行Python TCP Client 5、查看Wireshake的抓包情况 6、关闭Python TCP Server的防火墙 7、再次运行Python TCP Client 8、再次查看Wireshake的抓包情况 Python代码实现 Scapy模拟TCP通信 Python TCP Client代码: Python代码实现 Scapy模拟TCP通信 完整过程实验环境 运行Python TCP Client代码的结果 |
|
来自: 阿明哥哥资料区 > 《89.网络.电脑.手机.软件》