TCP和SCTP协议的详解

TCP

1、TCP:(Transmission Control Protocol)传输控制协议,是一种面向连接的可靠协议,工作在传输层。
2、面向连接:指的是在发送数据之前,双方都要保证链路的畅通,而且双方都是可以发送数据的。
3、TCP协议的作用:就是用来保证面向连接。
4、报文格式以及每个字段的作用
在这里插入图片描述

  • S和D port表示源目端口

  • seq number表示序列号,TCP链接中传输的数据流中每个字节都编上一个序号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。

  • ack number确认号,是期望收到对方的下一个报文段的数据的第1个字节的序号;

  • header length首部长度,指的是TCP报文的数据距离TCP报文段的起始处有多远

  • resv服务质量,QOS中做流量标记使用

  • urg紧急指针字段,告诉系统此报文中有紧急数据

  • ack确认字段,当ack=1时,确认号字段才有效,用来表示TCP建立成功的状态

  • psh推送位,接收方应该尽快将这个报文段交给应用层,接收到PSH =
    1的TCP报文段,应尽快的交付接收应用进程,而不再等待整个缓存都填满了后再向上交付。

  • rst复位,重建连接标识。当RST=1时,表明TCP连接中出现严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立连接。

  • syn在连接建立时用来同步序号。当SYN=1,ACK=0,表明是连接请求报文,若同意连接,则响应报文中应该使SYN=1,ACK=1;

  • fin用来释放连接。当FIN=1,表明此报文的发送方的数据已经发送完毕,并且要求释放;

  • 窗口,通知接收方用多大的空间来接收数据 校验和,用来校验数据的完整性

  • 紧急指针,指出本报文段中的紧急数据的字节数

  • 选项,可变长,定义一些可选的参数

5、TCP连接的三次握手
在这里插入图片描述
第一次握手:客户端发送syn包请求服务器建立连接,并初始化seq=j,进入SYN_SENT状态,等待服务器确认;第二次握手:服务器收到syn包后,则将自己的ack位制为1表示同意建立,并发送确认号ack number=j+1进行确认,同时发送syn包请求和客户端建立连接,并初始化seq=k,进入syn_recv状态;
第三次握手:客户端收到syn和ack number后,向服务器进行确认发送ack number=k+1,此时客户端和服务器进入ESTABLSHED状态,完成握手。

6、未连接队列
在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于SYN_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。

7、TIME_WAIT状态存在的原因

  • 可靠终止TCP连接。如果最后一个ACK报文因为网络原因被丢弃,此时server因为没有收到ACK而超时重传FIN报文,处于TIME_WAIT状态的client可以继续对FIN报文做回复,向server发送ACK报文。
  • 保证让迟来的TCP报文段有足够的时间被识别和丢弃。连接结束了,网络中的延迟报文也应该被丢弃掉,以免影响立刻建立的新连接。

8、为什么需要三次握手?
因为TCP是可靠的传输控制协议,三次握手能保证数据的可靠传输又能提高传输效率。

  • 两次握手
    (1)客户端给服务器发送SYN由于网络延时,此时可能导致客户端没有收到syn确认报文,就会重复发送syn,服务器收到后就会回复ACK,连接建立,数据发送完毕,连接关闭。这是由于延迟的syn报文到服务器,服务器就会误认为客户端重新同步,又会给回复一个ack和客户端建立连接。
    (2)服务器给客户端的ack由于网络原因丢弃,此时服务器认为已经建立好了连接,但是客户端没有收到ack报文,认为连接没有建立,此时客户端有将会发送syn重新建立连接,此时服务器认为连接已经建立。

  • 四次握手
    1)c给s发送SYN同步报文;
    2)s收到c的SYN,回复ACK报文;
    3)s给c发送SYN同步报文;
    4)c收到s的SYN,回复ACK报文;
    若是4次握手,在第二次和第三次之间没有任何数据的交互,分开发送反而多了一次建立,从而会降低速度和效率;

9、四次挥手
在这里插入图片描述
1>客户端发送FIN,初始化seq=j,用来断开客户端到服务器的连接
2>服务器收到FIN后,回复ACK,确认序号为j+1;
3>服务器关闭客户端的连接,给客户端发送FIN断开请求,初始化seq=k;
4>客户端收到FIN后,回复ACK确认序号为k+1
10、为什么连接的时候是三次握手,关闭的时候却是四次握手?
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

11、为什么是四次?
TCP是全双工的连接,必须两端同时关闭连接,连接才算真正关闭。
如果一方已经准备关闭写,但是它还可以读另一方发送的数据。发送给FIN结束报文给对方对方收到后,回复ACK报文。当这方也已经写完了准备关闭,发送FIN报文,对方回复ACK。两端都关闭,TCP连接正常关闭。

12、syn攻击
服务器端的资源分配是在二次握手时分配的,而客户端的资源是在完成三次握手时分配的,所以服务器容易受到SYN洪泛攻击,SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server则回复确认包,并等待Client确认,由于源地址不存在,因此Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪。
防御SYN攻击

  • 减少超时时间
  • SYN网关和SYN代理
  • 增大半连接数
  • SYNcookies技术

SCTP协议

1、SCTP:流控制传输协议,是一种可靠的传输协议,它在两个端点之间提供稳定、有序的数据传递服务。与TCP和UDP不同,SCTP有过多宿主和多流功能,这两种功能均可提高可用性。
2、SCTP实际上是一个面向连接的协议,但SCTP偶联的概念要比TCP的连接具有更广的概念,SCTP对TCP的缺陷进行了一些完善,使得信令传输具有更高的可靠性,SCTP的设计包括适当的拥塞控制、防止泛滥和伪装攻击、更优的实时性能和多归属性支持。
3、SCTP和TCP的区别
最大的区别就是SCTP可以连接多个宿主和支持多流。

  • 多宿主:

这里的多宿主可以理解为,比如说电脑上有多个网卡,每个网卡都有对应的IP地址,当进行SCTP建立连接时,可以将多个网卡申明在一个组中,利用组和组建立SCTP连接,当组中的一个成员建立连接失败后,另一个网卡直接切换,不需要重新建立连接。
多宿主的优点:

  • 备份,增加了稳定性

  • 提高效率

  • 多流
    在tcp协议中支持的是多字节,而在SCTP中支持的是多字节,不同之处只是SCTP能够在一个联合中支持多流机制。一个联合中的所有流都是独立的,但均与该联合相关。

4、SCTP联合(可以理解为组)与流之间的关系
每个流都给定了一个流编号,它被编码到SCTP报文中,通过联合在网络上传送。多流非常重要,因为阻塞的流(例如等待重传的流会导致报文的丢失)不会影响同一联合中的其他流。这个问题统称为head-of-lineblocking(对头阻塞)。TCP很容易出现这类阻塞问题

5、SCTP自带DOS防御
当恶意客户机使用虚假的源地址来伪造一个IP报文时,TCP就会出现问题了,这会大量TCPSYN报文攻击服务器。服务器在接收SYN报文之前,要为连接分配资源,但是在大量产生SYN报文的情况下,最终会耗尽自己的资源,从而无法处理新的请求。这种情况就称为服务拒绝(DenialofService)(DoS)攻击。

SCTP可以通过一种4次握手的机制并引入cookie的概念来有效地防止这种攻击的产生。在SCTP中,客户机使用一个INIT报文发起一个连接。服务器使用一个INIT-ACK报文进行响应,其中就包括了cookie(标识这个连接的惟一上下文)。客户机然后就使用一个COOKIE-ECHO报文进行响应,其中包含了服务器所发送的cookie。现在,服务器要为这个连接分配资源,并通过向客户机发送一个COOKIE-ACK报文对其进行响应。
6、报文格式
在这里插入图片描述
7、四路连接

  • 客户端发送INIT发起连接。
  • 服务器收到后,利用INIT-ACK进行响应,其中包括ciikie值
  • 客户端收到后,发起cookie-echo进行响应
  • 服务器收到后,发送cookie-ack进行响应

8、三次断开类似TCP的三次握手

  • 客户端发送shutdown断开请求
  • 服务器收到后,回复shutdown-ack进行回复
  • 客户端收到后,回复shutdown-completion断开完成

9、继承了UDP的特点
SCTP可以支持无需发送,每个流之间发送无需考虑顺序。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值