TCP协议

一、概念

        全称 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 ACK=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,并且连接已建立就可以传输数据

<该文档为复习自用,如果能给你有什么启发,非常开心,如果能帮忙指出错误,万分感谢>

你可能感兴趣的:(tcpip)