十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
TCP的可靠传输是基于连续ARQ协议的,ARQ协议中有两个重要的概念: 滑动窗口 和 累计确认 。但是我认为TCP能实现可靠传输不仅仅是靠连续ARQ协议,还依靠了:
创新互联公司是一家专业提供镇赉企业网站建设,专注与成都网站制作、网站设计、外贸网站建设、H5页面制作、小程序制作等业务。10年已为镇赉众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。
1.通过三次握手、四次挥手来保证信道的可连接性 ;
2.采用停止等待协议、连续ARQ协议(自动重传)来保证数据的正确性;
3.序列号和确认应答号保证了数据的有序性,
4.校验和:如果收到字节的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
TCP通过三次握手来确定这是一个可靠的连接,三次握手的目的是为了确定客户端和服务端都有正常的 【收发】 能力,即 客户端 可以 发送 和 接收 消息, 服务器 也可以 发送 和 接收 消息。
那么如果只有两次握手,则 【客户端】 的 【接收】 能力并没有得到确认,不能确定这是一个可靠的连接。同时,为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤,如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。
这三个协议的目的,都是为了保证了客户端和服务器的数据,能确保传送到对面。如果数据在中途丢失或者延迟,则需要重新发送,一直到对面接收到为止。
A每发送完一个报文M,就等候B对其确认;如果没收到确认,则不能继续发送,收到确认后再继续发送。缺点是一个个字节发送效率太低。
数组分组在传输过程中发生错误时有两种情况:
在这两种情况下,接收方都不会发送任何信息。发送方在一定时间内没有收到确认,就认为分组丢失,然后重传该数据分组,这就叫超时重传。
停止等待ARQ协议就是通过这种确认和重传的机制,在不可靠的网络上实现可靠通信。
显然,每次只发送一个报文然后等待确认效率太低。连续 ARQ 协议可提高信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。如果中间发生丢失包的情况,A需要回退到确认的报文重新发送。
A的发送窗口大小是根据B接受窗口设置的。也就是说A发送的报文速度不能超过B处理报文的速度。
TCP中对于超时重传时间的选择是根据平均往返时间RTT来计算的。也就是说,如果A超过一个报文平均往返时间没有收到确认,就会重新发送报文。
选择重传ARQ协议是指在接收方收到未按序排列的数据流时,通知发送方重传缺失的数据,而不是重传全部数据。TCP数据段首部中添加选择确认选项SACK可以实现该目的。
如图所示,假设上述分组都在发送窗口中,收到三个不连续的分组。三个分组的边界分别为:[4000,5001]、[6000,7001]、[8000,9001]。在建立TCP连接时,连接双方先商定好,在首部选项中加入“允许SACK”的选项。在之后的TCP报文段中增加SACk选项,以便接收方向发送方报告不连续的字节块的边界。
因为序号是32位,因此指明一个边界需要4个字节,说明一个字节块的边界需要8个字节。另外需要一个字节指明是SACK选项,一个字节指明这个选项的大小。TCP报文段首部选项最大为40个字节,因此最多指明4个字节块的边界信息。
TCP标准并未指明发送方应该如何响应SACK,因此大多数实现还是重传所有未被确认的数据分组。
利用滑动窗口机制可以实现对发送方的流量控制。在TCP连接建立时,接收方会在确认报文段中给出自己接收窗口的大小。在每次发送确认报文时能够根据情况动态调整接收窗口的大小,并将告知发送方。如下图所示:
发送方发送序号从1开始的100字节的数据,接收方在确认报文中声明自身的接收窗口大小为300字节。之后发送方发送300字节数据,接收方在确认报文中声明自身接收窗口大小调整为50字节。发送方再发送50字节数据之后,收到接收方传来的确认报文,在该报文中声明接收窗口为0。
在接收方接收窗口为0时,发送方不再发送数据,直到接收方发送确认报文表明窗口大小发生改变。可是这个确认报文不一定能够被发送方接收到,如果一旦该确认报文丢失,双方都将处于等待中,形成死锁。为防止这种情况出现,TCP规定在收到对方接受窗口为0时,启动一个坚持定时器周期性的发送探测报文,以确定对方接收窗口为0的状态是否改变。
另外,TCP标准规定:接收方接收窗口为0时,不再接收正常数据,但是可以接收零窗口探测报文段、确认报文段、携带紧急数据的报文段。
当主机开始发送数据时,如果立即将较大的发送窗口的全部数据注入网路中,那么由于不清楚网络的情况,有可能引起拥塞。比较好的方式是试探一下,即从小到大逐渐增大发送端的拥塞控制窗口数值。cwnd以指数增长的形式增长。
接收方收到M1之后发送对M1的确认报文,M2报文丢失,之后接收方收到M3、M4、M5时每次都发送对M1报文的重复确认。快重传算法规定当收到三次重复确认后,发送方就认为M2报文段丢失,立即重传M2报文段。
TCP/IP协议主要安全隐患:
1、链路层上的攻击
在TCP/IP网络中,链路层这一层次的复杂程度是最高的。其中最常见的攻击方式通常是网络嗅探组成的TCP/IP协议的以太网。
以太网卡有两种主要的工作方式,一种是一般工作方式,另一种是较特殊的混杂方式。这一情况下,很可能由于被攻击的原因而造成信息丢失情况,且攻击者可以通过数据分析来获取账户、密码等多方面的关键数据信息。
2、网络层上的攻击
如果ARP识别链接错误,这样的话ARP直接应用可疑信息,那么可疑信息就会很容易进入目标主机当中。ARP协议没有状态,不管有没有收到请求,主机会将任何受到的ARP相应自动缓存。
如果信息中带有病毒,采用ARP欺骗就会导致网络信息安全泄露。因此,在ARP识别环节,应加大保护,建立更多的识别关卡,不能只简单通过IP名进行识别,还需充分参考IP相关性质等。
3、传输层上的攻击
在传输层还存在网络安全问题。如在网络安全领域中,IP欺骗就是隐藏自己的有效手段,主要是通过将自身IP地址进行伪造,并向目标主机发送恶意的请求,攻击主机,而主机却因为IP地址被隐藏而无法准确确认攻击源。或者通过获取目标主机信任而趁机窃取相关的机密信息。
4、应用层上的攻击
对于因特网而言,IP地址与域名均是一一对应的,这两者之间的转换工作,被称为域名解析。而DNS就是域名解析的服务器。DNS欺骗指的是攻击方冒充域名服务器的行为,使用DNS欺骗能将错误DNS信息提供给目标主机。所以说,通过DNS欺骗可误导用户进入非法服务器,让用户相信诈骗IP。
扩展资料
TCP/IP协议能够迅速发展起来并成为事实上的标准,是它恰好适应了世界范围内数据通信的需要。它有以下特点:
1、协议标准是完全开放的,可以供用户免费使用,并且独立于特定的计算机硬件与操作系统。
2、独立于网络硬件系统,可以运行在广域网,更适合于互联网。
3、网络地址统一分配,网络中每一设备和终端都具有一个唯一地址。
4、高层协议标准化,可以提供多种多样可靠网络服务。
首先确定下传输层的作用
例子:
.在OSI参考模型中,自下而上第一个提供端到端服务的层次是 传输层
解析
传输层,传输层的是作用是负责为两台主机中应用进程之间的通信提供服务,而对于网络层来说,提供的是主机到主机之间的通信,所谓的端到端是指应用进程到应用进程。
SYN(synchronous)是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。
在第一次发送信息中,A随机选取一个序列号x作为初始化序列号发送给B。
第二次B使用ack对A的数据报进行确认,因为已经收到了序列号为x的数据包,准备接收序列号为x+1的包,所以ack=x+1,同时发送自己的初始化序列号seq=y
TCP连接的第一个包,非常小的一种数据包。SYN 攻击包括大量此类的包,由于这些包看上去来自实际不存在的站点,因此无法有效进行处理。每个机器的欺骗包都要花几秒钟进行尝试方可放弃提供正常响应。
如下图所示,IP 地址在IP 数据报的首部,而硬件地址则放在MAC 帧的首部。在网络层以上使用的是IP 地址,而链路层及以下使用的是硬件地址。
TCP的连接端点称为 套接字(socket),根据TCP协议的规定,端口号拼接到IP地址即构成了套接字。
也就是说TCP连接的端点不是主机,不是IP不是应用进程,而是套接字。
套接字 socket = (IP地址:端口号)
套接字 socket = (IP地址: 端口号)
TCP 连接 ::= {socket1, socket2} = {(IP1: port1), (IP2: port2)}
Socket连接是一个五元组,包括协议类型,源IP,源端口,目标地址和目标端口
TCP是面向字节流的,每一个字节对应一个序列号。
TCP每次发送的报文段的首部中的序列号是该报文段的第一个字节的序号。
接收端返回的确认号是收到数据的最高序号加1
一个 TCP报文段的数据部分最多是
IP数据报 的最大长度=2^16-1=65535(字节)
TCP报文段的数据部分= IP数据报 的最大长度- IP数据报 的首部-TCP报文段的首部=65535-20-20=65495(字节)
在IP 层抽象的互连网上,我们看到的只是IP 数据报,路由器根据目的站的 IP地址进行选路。在具体的物理网络的链路层,我们看到的只是 MAC 帧,IP 数据报被封装在 MAC帧里面。
MAC 帧在不同的网络上传送时,其MAC 帧的首部是不同的。这种变化,在上面的IP 层上是看不到的。每个路由器都有IP 地址和硬件地址。使用IP 地址与硬件地址,尽管连接在一起的网络的硬件地址体系各不相同,但 IP层抽象的互连网却屏蔽了下层这些很复杂的细节,并使我们能够使用统一的、抽象的IP 地址进行通信。
当某个路由器发现一数据报的检验和有差错时,会直接丢弃。
思考
如何理解TCP/IP 协议本是为非实时数据业务而设计的
例:为什么在 TCP 首部中有一个首部长度字段,而 UDP 的首部中就没有这个字段?
答:这是TCP 与UDP 包的区别,TCP 包的首部字段可以更好的保证数据传输的可靠安全,而UDP 就不能保证,所以UDP 比TCP 快,不间断但是不可靠,例如QQ 视频就是使用UDP,经常出现人不动,就是这个原因
分组交换根据其通信子网向端点系统提供的服务,还可以进一步分为面向连接的虚电路方式和无连接的数据报方式。这两种服务方式都由网络层提供。
虚电路在发送方和接受方会建立一条逻辑上的连接,并不是一条真正的物理连接。
电路交换的电话通信是先建立一条真正的物理连接,因此分组交换的虚电路和电路交换的连接只是类似,并不完成一样。
1 数据报服务发送分组前不需要建立连接
2 虚电路网络中的每个结点上都维持一张虚电路表,它的每一项记录了一个打开的虚电路的信息,包括在接受链路和发送链路的虚电路号,前一结点和下一结点的标识。
关于拥塞上一张脑图
发生拥塞控制的原因:资源(带宽、交换节点的缓存、处理机)的需求 可用资源。作用:拥塞控制就是为了防止过多的数据注入到网络中,这样可以使网络中的路由器或者链路不至于过载。拥塞控制要做的都有一个前提:就是网络能够承受现有的网络负荷。
对比流量控制:拥塞控制是一个全局的过程,涉及到所有的主机、路由器、以及降低网络相关的所有因素。流量控制往往指点对点通信量的控制,是端对端的问题。流量控制只关心发送方和接收方点对点的发送量。它的任务是处理发送能力大于接受能力。
网络中存在太多的数据包,导致数据包被延迟和丢失,从而降低传输性能,这种情况称为拥塞。网络层和传输层共同承担着处理拥塞的责任。
TCP连接的每一端都必须设有两个窗口,一个发送窗口,一个接收端口。
TCP可靠传输机制用字节的序号进行控制。TCP所有的确认基于序号还不是基于报文。TCP 每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。TCP协议用于控制数据段是否需要重传的依据是设立 重传定时器。
保护数据不受主动攻击(数据的伪造和变动)的措施称为报文认证技术。
自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中运输层的错误纠正协议之一。它包括停止等待ARQ协议和连续ARQ协议,错误侦测(Error Detection)、正面确认(Positive Acknowledgment)、逾时重传(Retransmission after Timeout)与负面确认继以重传(Negative Acknowledgment and Retransmission)等。
TCP协议用于控制数据段是否需要重传的依据是设立 重发定时器