一、概念
全称 transmission control protocol ,传输控制协议,属于传输层协议,面向连接
二、报文格式
src.port(2byte):源端口
des.port(2byte):目的端口
seq.num(4byte):序列号,表示自己发送到了哪个数据
ack.num(4byte):确认号:表示从到此之前的数据已经接收,需要接受该号数以及之后的数据
header.lenth(4bit):1代表4个字节,以为最大为1111,所以tcp首部最大长度为60,且为4的倍数
保留(6bit)
URG(1bit):紧急控制位,为1时,urgent pointer才有效
ACK(1bit):确认位,为1时ack.num才有效
PSH(1bit):push位,为1时直接推送给上一层
RST(1bit):reset位,为1时进行重新连接
SYN(1bit):同步位,三次握手时使用
FIN(1bit):结束位,结束时使用
windows size(2byte):窗口位,控制窗口大小
check sum(2byte):校验和
urgent pointer(2byte):紧急指针,指向数据中优先部分的最后一个字节,URG为1时有效
三、三次握手
0、在三次握手之前,服务器与客户端建立传输控制块,存放连接表,指针等;
1、客户端发送连接请求报文(SYN=1),进入同步已发送状态;
2、服务器接收此报文后,发送确认报文(SYN=1 ACK=1),进入同步已接收状态;
3、客户端收到后,发送确认报文(ACK=1),进入链接已建立状态;
4、服务器收到该确认后,进入链接已建立状态
四、四次挥手
1、客户机向服务器发送FIN报文,进入终止等待1状态;
2、服务器收到后,发送ACK确认报文,进入关闭等待状态,但此时是属于半关闭,服务器可以给客户机发送消息,客户机收到后进入终止等待2状态;
3、服务器向客户机发送FIN报文,进入最后确认状态;
4、客户机收到后,发送ACK确认报文,进入时间等待状态;
5、服务器收到之后,进入关闭状态,客户机在等待2MSL的时间之后进入关闭状态
五、SYN flood
SYN泛洪攻击,攻击方通过向服务器单播发送虚假的SYN消息,服务器收到后,发送ACK回应,此时,服务器会建立一个socket在他的半连接列表中,当有许多的虚假SYN发送时,服务器就会处理不过来正常TCP请求
六、防御
1、代理:客户机将SYN请求发送给代理,代理回复一个SYN ACK请求,若是接收到了ACK,则代理与客户机建立连接,之后代理和服务器再建立三次握手,该链接的报文就可以直接传输给服务器了
2、源探测:防火墙收到SYN请求后,返回一个虚假的AYN ACK报文,若是收到了一个RST报文,则将该客户机设置为白名单,就可以正常连接了
七、一些问题
1、为什么是三次握手
为了防止已经失效的SYN消息传送到服务器造成错误
2、为什么是四次挥手
因为TCP是全双工,所以两边都要释放
3、isn是什么
初始化序列号,随机数
4、四次挥手时为什么要等待2MSL
为了防止ACK报文丢失之后服务器不能关闭
5、半连接队列是什么
服务器收到SYN信息后,会建立相应的socket,半连接队列就是存储这些同步已建立状态的socket
6、第三次握手丢失之后,服务器会怎么做
会再次发送SYN ACK报文,默认是5次,超过次数则断开连接
7、连接与释放状态可以接收数据吗
只要没有SYN或者FIN,并且连接已建立就可以传输数据
<该文档为复习自用,如果能给你有什么启发,非常开心,如果能帮忙指出错误,万分感谢>