tcp知识点汇总

Tcp传输控制协议)Transmission Control Protocol

最近发现以前学tcp的时候,根本并没有理解tcp,整理一下


当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)限制。之后TCP把数据包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。


TCP为了保证报文传输的可靠就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。

tcp报文格式如下:帮助我们理解tcp的建立连接过程和释放连接过程

tcp知识点汇总_第1张图片


tcp三次握手:

tcp知识点汇总_第2张图片


第一次握手:服务器被动打开,客户端主动建立连接,向服务器发送请求,请求包括syn+seq,这里的syn=1是指1为是,0为否,表名tcp报文格式中的syn有意义,seq是报文中的32位序号,seq=x,表明在后面传送数据时的第一个数据字节的序号是x。。此时客户端进行syn-send状态。

第二次握手:服务器收到客户端的请求报文后,发送syn+ack+seq表名自己已收到请求信息。图中写的ACK=1对应的是与SYN处于同一位置的ACK标记置为1,ACK=1,其上的确认序号ack才有意义,此时的ack为收到客户端的seq+1。seq是自己选择的。服务器进入syn-rcvd状态

第三次握手:客户端收到服务器的确认信息后,要跟服务器进行确认。发送ack+seq信息到服务器。seq为第二次握手时ack也就是第一次握手的seq+1.双方进入已建立连接状态,establ-ished

三次握手时每次都有发送的报文都有不同的地方,以此进行判断是那一次握手。


tcp断开连接过程:

tcp知识点汇总_第3张图片


 在数据传输完毕之后,通信双方都可以发出释放连接的请求。
     1)数据传输结束后,主机A的应用进程先向其TCP发出释放连接请求,不在发送数据。TCP通知对方要释放从A到B的连接,将发往主机B的TCP报文段首部的终止比特FIN置为1,序号seq等于已传送数据的最后一个字节的序号加1。
     2)主机B的TCP收到释放连接通知后发出确认,其序号为u+1,同时通知应用进程,这样A到B的连接就释放了,连接处于半关闭状态。主机B不在接受主机A发来的数据;但主机B还向A发送数据,主机A若正确接收数据仍需要发送确认。
     3)在主机B向主机A的数据发送结束后,其应用进程就通知TCP释放连接。主机B发出的连接释放报文段必须将终止比特置为1,并使其序号w等于前面已经传送过的数据的最后一个字节的序号加 1,还必须重复上次已发送过的ACK=u+1。
     4)主机A对主机B的连接释放报文段发出确认,将ACK置为1,ACK=w+1, seq=u+1。这样才把从B到A的反方向连接释放掉,主机A的TCP再向其应用进程报告,整个连接已经全部释放。

各个状态描述如下

状 态

描 述

CLOSED

关闭状态,没有连接活动或正在进行

LISTEN

监听状态,服务器正在等待连接进入

SYN RCVD

收到一个连接请求,尚未确认

SYN SENT

已经发出连接请求,等待确认

ESTABLISHED

连接建立,正常数据传输状态

FIN WAIT 1

(主动关闭)已经发送关闭请求,等待确认

FIN WAIT 2

(主动关闭)收到对方关闭确认,等待对方关闭请求

TIMED WAIT

完成双向关闭,等待所有分组死掉

CLOSING

双方同时尝试关闭,等待对方确认

CLOSE WAIT

(被动关闭)收到对方关闭请求,已经确认

LAST ACK

(被动关闭)等待最后一个关闭确认,并等待所有分组死掉


关于tcp协议的一些关键点:

SYN
SYN(synchronous)是TCP/IP建立连接时使用的握手信号,tcp建立连接的第一个握手是发送syn,因此在黑客攻击中可利用第一次握手的机制向指定主机放松大量的请求,但不做回应,就是半连接请求,耗费目的主机cpu和内存资源。达到攻击的目的

三次握手中,第三次握手的必要性:

假定出现一种异常情况,即A发出的第一个连接请求报文段并没有丢失,而是在某些网络结点长时间滞留了,一直延迟到连接释放以后的某个时间才到达B,本来这是一个早已失效的报文段。但B收到此失效的连接请求报文段后,就误认为是A又发出一次新的连接请求,于是就向A发出确认报文段,同意建立连接。假定不采用三次握手,那么只要B发出确认,新的连接就建立了,这样一直等待A发来数据,B的许多资源就这样白白浪费了

四次挥手中,最后主机a发送报文信息后等待2msl的意义:

  • 第一,为了保证A发送的最有一个ACK报文段能够到达B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN和ACK报文段的确认。B会超时重传这个FIN和ACK报文段,而A就能在2MSL时间内收到这个重传的ACK+FIN报文段。接着A重传一次确认。
  • 第二,就是防止上面提到的已失效的连接请求报文段出现在本连接中,A在发送完最有一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。

Transmission Control Protocol

你可能感兴趣的:(网络)