TCP知识点总结

TCP知识点总结

TCP报头

TCP知识点总结
源端口和目的端口,各占2个字节,分别写入源端口和目的端口;

序号,占4个字节,TCP连接中传送的字节流中的每个字节都按顺序编号。例如,一段报文的序号字段值是 301 ,而携带的数据共有100字段,显1然下一个报文段(如果还有的话)的数据序号应该从401开始;

确认号,占4个字节,是期望收到对方下一个报文的第一个数据字节的序号。例如,B收到了A发送过来的报文,其***字段是501,而数据长度是200字节,这表明B正确的收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701;

数据偏移,占4位,它指出TCP报文的数据距离TCP报文段的起始处有多远;

保留,占6位,保留今后使用,但目前应都位0;

紧急URG,当URG=1,表明紧急指针字段有效。告诉系统此报文段中有紧急数据;

确认ACK,仅当ACK=1时,确认号字段才有效。TCP规定,在连接建立后所有报文的传输都必须把ACK置1;

推送PSH,当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应,这时候就将PSH=1;

复位RST,当RST=1,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立连接;

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

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

窗口,占2字节,指的是通知接收方,发送本报文你需要有多大的空间来接受;

检验和,占2字节,校验首部和数据这两部分;

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

选项,长度可变,定义一些其他的可选的参数。

TCP三次握手

TCP知识点总结

第一次握手:建立连接时,客户端发送syn包(syn=1,seq=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers);

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=1,seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手;

为什么需要三次

如果TCP握手是两次:

<1>如果client发给server的SYN报文因为网络原因,延迟发送。由于client没有收到server对SYN的确认报文,会重发SYN报文,服务器和回复ACK,连接建立。数据发送完毕,这条连接被正常关闭。这时,延迟的SYN报文发到了server,server误以为这是client重新发送的同步报文,又回复了一个ACK,和client建立了连接。

<2>如果server给client发送的ACK报文因为网络原因,报文被丢弃,此时server认为已经建立好连接,但是client没有收到确认报文,认为没有建立好连接。client会重发SYN报文,此时server已经处于就绪状态,认为已经建立好连接。

如果TCP的握手是四次:

–1.client给server发送SYN同步报文;

–2.server收到SYN后,给client回复ACK确认报文;

–3.server给client发送SYN同步报文;

–4.client给server发送ACK确认报文。

第2.3步之间,server和client没有任何的数据交互,分开发送相当于多发了一次TCP报文段,SYN和ACK标识只是TCP报头的一个标识位。很明显,这两步可以合并,从而提高连接的速度和效率。

总结来说:

两次握手,B无法确定A是否收到自己的确认包

四次握手,浪费资源

TCP四次挥手

TCP知识点总结

  1. 客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送

  2. 服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号

  3. 服务器B关闭与客户端A的连接,发送一个FIN给客户端A

  4. 客户端A发回ACK报文确认,并将确认序号设置为收到序号加1

为什么需要四次:

TCP是半关闭的,连接的一段在结束发送后依然能够收到对端的数据

客户端发起断开请求,服务器回应确认包,客户端处于等待状态,服务器把剩余数据发送完后,再发送断开请求包,客户端确认,双方断开

TCP的SYN攻击

SYN报文是TCP连接的第一个报文,攻击者通过大量发送SYN报文,造成大量未完全建立的TCP连接,占用被攻击者的资源。

攻击者用带有SYN标志位的数据片断启动握手

受害者用SYN- ACK应答;

攻击者保持沉默,不进行回应;

由于主机只能支持数量有限的TCP连接处于half-open的状态,超过该数目后,新的连接就都会被拒绝;

解决方法:关闭处于Half Open 状态的连接。SynAttackProtect保护机制、SYN cookies技术、增加最大半连接和缩短超时时间。

SCTP协议

SCTP是一种传输协议,在TCP/IP协议栈中所处的位置和TCP、UDP类似,兼有TCP、UDP两者特征。

SCTP是可以确保数据传输的,和TCP类似,也是通过确认机制来实现的。

1.TCP是以字节为单位传输的,SCTP是以数据块为单位传输的(DATA CHUNK)

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

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

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

​ 一条SCTP连接里面,可以区分多条不同的流(stream),不同的流之间的数据传输互不干扰;如果在传输 过程中丢包,则有序传递模式可能会在接收端被阻塞,而无序传输模式不会在接收端被阻塞。

4.TCP连接的建立过程需要三步握手,SCTP需要四步握手(防DoS攻击

​ SCTP的建立过程需要四步握手,server端在收到连接请求时,不会立即分配内存缓存起来,而是返回一个 COOKIE。client端需要回送这个COOKIE,server端校验之后,从cookie中重新获取有效信息(比如对端地 址列表),才会最终建立这条连接。这样,可以避免类似TCP的SYN攻击。