您好,欢迎来到百家汽车网。
搜索
您的当前位置:首页TCP协议 STCP与TCP比较

TCP协议 STCP与TCP比较

来源:百家汽车网

可靠性是计算机系统的基础应用程序信赖于底层计算机系统数据 的可靠传 输,系统保证数据传送到底层后不会丢失和重复。保证端对端数据传输的可靠 性 ,是通过传输层来实现的。

传输层定义了主机应用程序之间端到端的连通性。传输层中最为常见的两个协议分别是传输控制协议TCP(Transmission Control Protocol)和用户数据包协议UDP(User Datagram Protocol)。

面向连接就是在正式通信前必须要与对方建立起连接。比如你给别人打电话,必须等线路接通了、对方拿起话筒才能相互通话。
面向无连接是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。面向无连接是在每个中间节点对非面向连接的包和数据包进行路由。比如发送手机短信,当你发短信的时候,只需要输入对方手机号而不必在意对方是否确认接收。
TCP使一个面向连接的协议,他需要两个端点都同意连接才能进行通信。在TCP进行互联网络通信之前,连接双方的应用程序必须建立连接。采用客户及服务模式建立这种连接,客户方应用程序主动打开请求,通知操作系统要建立一个连接,服务方应用程序通知操作系统,希望建立一个输入的连接,即被动打开的功能。连接建立好后,应用程序开始进行数据传输。
TCP(传输控制协议)属于面向连接的网络协议
TCP是一种面向连接的传输层协议,可提供可靠的传输服务。

tcp端口号

TCP报文:

TCP三次握手

TCP传输过程

TCP流量控制

TCP断开连接
主机在关闭连接之前,要确认收到来自对方的ACK。

TCP窗口机制
窗口大小 决定了在收到确 认前可以发送的字节数
确认号 是期望接收的下一 个TCP segment的序列号
握手为什么需要三次
TCP传输控制协议 称为面向连接的可靠传输协议
先来说一下三次握手的目的:
第一次握手是客户端发送SYN,服务端收到了。得出结论客服端的发送能力和服务端的接收能力正常。
第二次握手服务端发SYN,ACK,客户端收到了SYN。得出结论:服务端的接收、发送能力 和客户端的发送能力均正常。此时服务端还不能确定客户端的接收能力是否正常。
第三次握手:客户端发ACK,服务端收到了。这时候服务端就得出结论,客户端的接收功能也正常。
因此,需要三次握手才能确认双方的接收与发送能力是否正常。‘

为什么要进行三次握手?
3次握手完成两个重要的功能,要双方都做好发送数据的准备工作,且双方都要知道对方准备好了,同时也要双方对初始序列号进行协商,序列号在握手过程中被发送和确认。
如果客户端发出连接请求,因连接请求报文丢失而未收到确认,于是客户端再重传一次连接请求。后来收到确认,建立了连接。数据传输完毕后,就释放了连接。客户端共发了两个连接请求报文段,其中第一个丢失,第二个到达。但是第一个只是在某些网络结点长时间滞留了,延误到连接释放后某个时间到达服务端,此时服务端误认为是客户端又发出的新的连接请求,于是发送确认,同意连接。不采用三次握手,只要客户端发送确认,就建立新的连接了,此时客户端忽略服务端发来的确认,也不发数据,则服务端一直等待客户端发送数据,就会造成资源浪费。

为什么断开需要四次,三次不行吗?
这是由TCP的半关闭造成的,半关闭就是TCP提供了连接的一端在结束发送后还能接收来自另一端数据的能力。
需要断开时,首先客户端发送SYN请求,当服务端接到客户端的SYN请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是在关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭,所以只能先回复一个ACK报文,告诉客户端,收到了FIN报文。只有等到服务端所有报文都发送完了,服务端才发送FIN报文,因此不能同时发送。等客户端收到了服务端发送的FIN报文后在发送ACK报文给服务端,最后断开连接。故需要四次断开。

以下为转载:
SCTP 是一种传输协议,在TCP/IP协议栈中所处的位置和TCP、UDP类似,兼有TCP/UDP两者特征。
SCTP是可以确保数据传输的,和TCP类似,也是通过确认机制来实现的。和TCP不同的是:

TCP接收端确认的是收到的字节数,SCTP接收端确认的是接收到的数据块。SCTP的这种数据块(被称为DATA CHUNK)通常会携带应用的一个数据包,或者说是应用要发送的一个消息。

在实际的应用中,TCP发送方的可以将应用程序需要发送的多个消息打包到一个TCP包里面发出去。比如,应用程序连续调用两次send()向对端发送两条消息,TCP协议可能把这两条消息都打包放在同一个TCP包中。接收端在收到这个TCP包时,回给对端的ACK只是表明自己接收到了多少个字节,TCP协议本身并不会把收到的数据重新拆散分成两条应用层消息并通知应用程序去接收。事实上,应用程序可能只需要调用一次receive(),就会把两条消息都收上来,然后应用需要根据应用程序自己定义的格式去拆成两条消息。

与TCP不同,SCTP是将应用程序的每次调用sendmsg()发送的数据当作一个整体,放到一个被称为DATA CHUNK的数据块里面,接收端也是以DATA CHUNK为单位接收数据,并重新组包,通知应用程序接收。通常,应用程序每次调用recvmesg()都会收到一条完整的消息。

在SCTP的发送端,多条短的应用层消息可以被SCTP协议打包放在同一个SCTP包中,此时在SCTP包中可以看到多个DATA CHUNK。另一方面,一条太长(比如,超过了路径MTU)的应用层消息也可能被SCTP协议拆分成多个片段,分别放在多个DATA CHUNK并通过不同的SCTP包发送给对端。这两种情况下,SCTP的接收端都能重新组包,并通知应用程序去接收。

  1. TCP通常是单路径传输,SCTP可以多路径传输

TCP的两端都只能用一个IP来建立连接,连接建立之后就只能用这一对IP来相互收发消息了。如果这一对IP之间的路径出了问题,那这条TCP连接就不可用了。

SCTP不一样的地方是,两端都可以绑定到多个IP上,只要有其中一对IP能通,这条SCTP连接就还可以用。

  1. TCP是单流有序传输,SCTP可以多流有序/无序传输

一条SCTP连接里面,可以区分多条不同的流(stream),不同的流之间的数据传输互不干扰。这样做理论上的好处是,如果其中某一条流由于丢包阻塞了,那只会影响到这一条流,其他的流并不会被阻塞。但是实际上,如果某一条流由于丢包阻塞,其他的流通常也会丢包,被阻塞,最后导致所有的流都被阻塞,SCTP连接中断。

在同一条stream里面,SCTP支持有序/无序两种传输方式,应用程序在调用sendmsg()的时候,需要指定用哪一条stream传输,以及指定这条要发送的消息是需要有序传输还是无序传输的。如果在传输过程中丢包,则有序传递模式可能会在接收端被阻塞,而无序传输模式不会在接收端被阻塞。
4. TCP连接的建立过程需要三步握手,SCTP连接的建立过程需要四步握手

TCP连接建立过程,容易受到DoS攻击。在建立连接的时候,client端需要发送SYN给server端,server端需要将这些连接请求缓存下来。通过这种机制,攻击者可以发送大量伪造的SYN包到一个server端,导致server端耗尽内存来缓存这些连接请求,最终无法服务。

应用程序对此感知不到,对应用程序来说,不管是TCP还是SCTP,都只需要在server端listen一个socket,client调用connect()去连接到一个server端。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baijiahaobaidu.com 版权所有 湘ICP备2023023988号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务