通过实验取证:TCP三次握手的过程
理解TCP/IP协议的工作原理
多年来TCP/IP协议一直被公众称呼为“一个协议”,事实上它是一组协议的集合,IP工作在OSI七层模型的网络层,提供网络传输,但是并不提供其可靠性传输控制。而TCP工作在OSI七层模型的传输层,并提供其可靠性传输控制。那么首先需要说明的是:“什么是可靠性传输控制?”所谓可靠性传输控制是指面向连接的一种确认数据交付方式,具体的说,就是在数据正式传输之前,利用一种触发和认定的方式来保证发送方与接收方之间的可靠性,以防止数据在传输的过程中出现丢包及其他传输不可达的现象。这好比人类世界在交换价值产品之前,必须保证接收的人能真正地收到发出的产品,接收方在收到产品之后用一种回应的方式告知发送方,产品已经成功到达。
TCP协议的特点:由于提供了面向连接的可靠交付,所以TCP协议常用于可靠性较差的网络环境中,比如Internet。但是,正是由于TCP协议面向连接的可靠交付使其传输的速度较慢,至少比UDP协议更慢,这无疑证实了技术界的一个观念:“无所谓最好的传输协议,一切皆应需而动,任何技术都是一把“双刃剑”,如果需求是稳定,那么就必须牺牲速度,如果需求是速度,就必须牺牲可靠性!”
注意:上面描述了TCP协议的核心价值是确保传输的可靠性,并使用了人类世界在交换价值产品的一个实例来说明了如何完成可靠性交付。但是现在的问题在于在计算机网络技术领域里,两台通信设备或者计算机之间将采用一种什么样的方式来完成可靠性交付?
TCP协议的“三次握手”是学习的核心
TCP协议的“三次握手”是完成可靠性交付过程的核心,所以本小节将以描述TCP协议的网络世界中著名的“三次握手”为重点。
TCP协议是一个相互触发、相互确认的过程。客户机要触发服务器,服务器也要触发客户机。建立握手状态的标记syn=1表示开始触发,ack=1表示对触发的回应确认。并且在TCP建立可靠连接时只会使用这两个标记。正确的TCP握手过程如图4.44所示。
n客户机要触发服务器,向服务器发出syn=1的信号。
n服务器向客户机发送ack=1的确认信号。
n服务器再向客户机发送syn=1的触发信号,以达到相互触发的效果。
n客户机再回应服务器的触发信号ack=1。
上述为TCP握手过程,但是过程却就是四次握手了,并非所谓的“TCP三次握手”。那么为什么会叫“TCP三次握手”呢?这是因为服务器与其将给客户机的ack=1确认信息和触发客户机的syn=1分成两次发送,倒不如将其两次合并成一个信号:syn=1,ack=1。其实syn=1是触发客户机的,而ack=1是响应客户机触发的消息。所以将四次握手变三次,这是“TCP三次握手”的得名,也是对TCP正确的理解,如图4.45所示。
关于TCP的滑动窗口与确认机制
在面向连接的数据传办输过程中,任何数据在传递的过程中都可能损坏、丢失、或者重传,在这种情况下如果没有一种保障机制,那么数据在传输的过程中可能导致协议出错。所以面向连接的协议提出了一种保障机制,让接收方在收到数据后进行确认,如下图4.46所示,发送方发送1,接收方接收1并反回发送确认ACK2,发送方收到接收的ACK2就发送2,这种方式叫做TCP使用期待确认方式,也就是确认号就是所期待发送的下一数据。当接收方收到接收2后发送确认ACK3,发送方收到ACK3后发送数据3。这个过程中TCP的窗口大小为1,也就是收送一个数据,确定一个数据,然后再发送一个数据,这种方式确保了数据的可靠性,但是丧失了效率,那么网络的吞吐量将变得很低,更好的办法是将TCP窗口的大小调高,比如将原有窗口1调整为3,如下图4.47所示,发送方一次发送三次1、2、3接收方接收1、2、3后返回确认ACK4,后继发送同理,通过调整TCP窗口后,网络的吞吐量与使用率明显提高。事实上这是TCP的一种流控机制,这一点应试人员要特别小心,后面会出现相应的试题分析。
当分段的数据到达目的地如何重组:
在OSI模型的传输层为了方便更好的传输数据,会对大型数据进行分段,将其分割更小的数据块,以便于传输。由于Internet传输系统的原因,比如:一个被分割的原始数据的分段,可能通过不同的路由路径到达目标的数据分段,可能存在着先后不同的到达顺序,或者是出现了损环或者重传,在这种情况下,目标主机怎样重新组合并还原这些分段,如何对这些分段进行确认将是一个问题。大型数据被分段后,传输层协议会为这些分段分别打上序列号,到达目标后可以根据这些序列号来还原数据,关于确认这些分段可靠性的方案是对这些数据分段采取期待确认,比如一个数据分段的序列号是100,那么目标将返回101的序列确认,至于到底是对每个数据分段进行确认还是一次性确认多个数据分段这和TCP的滑动窗口有关。
关于TCP协议的安全威胁
TCP三次握手的漏洞如图4.48所示。TCP在数据正式发送以前必须与对等端完成三次握手的状态,然后再进行真正的数据转发,那么在这个TCP三次握手的状态完成前,TCP将会处于半开会话状态。现在假想一种情况:202.202.1.100/24是一个发动恶意***的***,想要***202.202.1.254的Web服务器,于是利用一个假IP为192.168.1.100的地址作为源IP地址,不断地向202.202.1.254的服务器发送TCP连接请求。服务器收到了许多的TCP的源地址为192.168.1.100的syn=1的数据报文,肯定会对该TCP会话作ack=1的确认,并发出syn=1的触发192.168.1.100主机的二次会话,但是这个192.168.1.100地址根本就不存在,服务器将永远都等不到192.168.1.100给它的最后确认。这时的服务器上会存放许多半开的TCP会话,这将直接导致服务器的NIC、内存、CPU的占用率超载,这种***方式叫做基于TCP半开会话的洪水***,是属于denial of service(DOS)拒绝式服务***的一种。
演示:取证TCP/IP协议的三次握手过程
演示目标:在实时通信的环境下取证TCP协议的“三次握手”过程。
演示环境:如图4.49所示的演示环境。
4.49
演示背景:为了演示环境更真实,可将192.168.0.100这台计算机构建成一台Web服务器,然后192.168.0.101这台计算机去访问192.168.0.100所提供的Web服务,然后捕获并分析整个通信过程中的数据帧,重点观察TCP协议“三次握手”的取证的过程。
演示步骤:
第一步:为演示环境中的两台计算机配置IP地址,并测试连通性,如下图4.50所示为在192.168.0.101的客户机上对192.168.0.100的Ping检测。
第二步:配置192.168.0.100为Web服务器,建议这个过程由CCNA的教员完成。并在该服务器上启动Wireshark协议分析器软件,开启捕获功能,然后在192.168.0.101的客户机上打开IE,并在地址栏输入“http://192.168.0.100”去访问服务器。当完成访问后,可在Wireshark协议分析器看到如下图4.51所示的TCP三次握手的整体效果。
第三步:现在拆分TCP三次握手的三个数据帧,如图4.52所示为TCP协议的第一次握手;如图4.53所示为TCP协议第二次握手;如图4.54所示为TCP协议第三次握手。
本文是西门子开放式TCP通信的第2篇,上一篇我们讲了使用西门子1200PLC作为TCP服务器的程序编写,可以点击下方链接阅读:【公众号dotNet工控上位机:thinger_swj】基于Socket访问西门子PLC系列教程(一)在完成上述步骤后,接下来就是编写上位机软件与PLC之间进行通信。上位机UI界面设计如下图所示:从上图可以看出...
我有一个大型数据集,列出了在全国不同地区销售的竞争对手产品。我希望通过使用这些新数据帧名称中的列值的迭代过程,根据区域将该数据帧分成几个其他区域,以便我可以分别处理每个数据帧-例如根据价格对每个地区的信息进行排序,以了解每个地区的市场情况。我给出了以下数据的简化版本:Competitor Region ProductA Product...
作为一名IT从业者,我来回答一下这个问题。首先,对于具有Java编程基础的人来说,学习Python的初期并不会遇到太大的障碍,但是要结合自己的发展规划来制定学习规划,尤其要重视学习方向的选择。Java与Python都是比较典型的全场景编程语言,相比于Java语言来说,当前Python语言在大数据、人工智能领域的应用更为广泛一些,而且大...
这段时间通过学习相关的知识,最大的变化就是看待事物更加喜欢去了解事物后面的本质,碰到问题后解决问题思路也发生了改变。举个具体的例子,我在学习数据分析,将来会考虑从事这方面的工作,需要掌握的相关专业知识这个问题暂且按下不表,那哪些具体的问题是我需要了解的呢,以下简单罗列:1、了解数据分析师这个岗位在各个地区的需求情况?2、数据分析师的薪...
这一节将开始学习python的一个核心数据分析支持库---pandas,它是python数据分析实践与实战的必备高级工具。对于使用 Python 进行数据分析来说,pandas 几乎是无人不知,无人不晓的。今天,我们就来认识认识数据分析界鼎鼎大名的 pandas。目录一. pandas主要数据结构 SeriesDataFrame二...
3GPP组织概述 1. TSG/WG 3GPP是以工作组开展工作的,目前有3个大的技术规范组:RAN, SA, CT, 这一级别的工作组英语写为 TSG (Technical Specification Group)。每个TSG下面又分了很多工作组(WG: work group). 详见下表: https://www.3gpp.o...
文章目录前言1. HTTP协议通信的问题1.1 tcpdump 抓取http 请求包1.2 报文分析1.3 HTTP 协议问题2. SSL & TLS 协议的基本介绍和历史演进3. TLS 1.2 实现加密传输的过程3.1 TLS HandShake 协议概览3.2 第一次握手:ClientHello3.3 第二次握手:从Server...
函数描述
头文件
一、ARP协议 ARP(Address Resolution Protocol)地址解析协议,将IP地址解析成MAC地址。 IP地址在OSI模型第三层,MAC地址在OSI第二层,彼此不直接通信; 在通过以太网发生IP数据包时,先封装第三层(32位IP地址)和第二层(48位MAC地址)的报头; 但由于发送数据包时只知道目标IP地址,不...
#vi /etc/httpd/conf/httpd.conf 添加下面配置 NameVirtualHost *:80