TCP的报文格式以及它的安全可靠性

TCP和UDP是TCP/IP中传输层中两个最具代表性的协议,TCP提供可靠的通信传输,UDP则是常被应用于广播和细节控制(相比而言,不太可靠)


可是,TCP的可靠性表现在哪里??它的报文格式又是咋样的呢??


TCP

1.   是一种基于字节流的传输,我们称之为段(segment),发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端,字节流的无间隔行

2.   面向连接,也就是说tcp在传输之前,首先有一个建立连接的过程

3.   tcp的可靠性传输,也就是说它能在逻辑上保证传输是可靠的,顺序控制(不失序),重发机制(数据丢失),端到端校验和(传输错误),拥塞控制等功能

4.   缓冲传输,就是说TCP可能不会立即发送这个段,它可能会把这些段放入缓冲区,等到一定的时机然后再发送出去

5.   全双工,发送的同时也可以接收数据(每一台联网的主机都可以发送信息,也可以接收服务端的信息),而半双工(只能发送或只能接收,例如收音机就是只能接收的)

6.   流量控制,通过窗口控制达到流量控制的目的




我们可以看到IP报文里面封装了很多的东西,有IP头部(占用20字节),TCP头部(占用20字节),接下来就是TCP数据了,同时,称TCP头部和TCP数据为IP的数据,这也就是不断封装的过程,同理当传过去之后,就有了解封的过程


TCP报文:

TCP的报文格式以及它的安全可靠性_第1张图片

我们可以看到:TCP报文 = TCP头部  +  数据

TCP头部是20个字节:

1.    先是源端口号和目的端口号各占2个字节(结合IP头部的源IP地址,目的IP地址,就已经构成了简单地TCP连接)

2.    然后是序列号(这个报文段的第一个数据字节序号),确定号各占4个字节(仅当ACK为1时有效,表示期望收到的下一个字节的序号,三次握手,四次挥手中会提到)

3.    再就是头部长度,占4位(最大是15,但是单位是4字节,也就是15*4 = 60个字节),接下来就是6位的保留,必须全部为0

4.    6个标志位

URG为1是,紧急指针有效

ACK为1时, 确认号有效

PSH为1时, 接收方应尽快将这个报文段交给应用层

RST为1时, 连接重置

SYN为1时, 用来发起一个连接

FIN为1时,   表示要终止一个连接

5.    接下来窗口尺寸(起到流量控制的功能)

6.    2字节的TCP校验和(采用端对端的网际校验和,但是这个是对头部和数据都进行校验的),2字节的紧急指针(是一个正的偏移量,与序号字段中的值相加,表示紧急数据最后一个字节的序号,是发送端向另一端发送紧急数据的一中方式),还有4字节的选项(必须是4的整数倍,否则用0来填充,最常见的可选字段是MSS(Maximum  Segment Size)最长报文大小,每一个连接方通常都在第一个报文中指定这个选项,它指明了所能接收的最大报文长度,值得注意的是:以太网的MTU为1500,路由器的MTU为576,,为了减少这个分片的过程,所以:20(IP头部)+20(tcp头部)+536 = 576,也就说明了默认的MSS为536(为了最大化的传输)



tcp:应用数据被分割成TCP认为最合适发送的数据块,称之为段,发送给IP层

不可靠表现在以下几个方面:传输出错,丢包,重复(粘包), 失序,

出错:会通过网际校验和进行检验(如果数据在传输的过程中校验和丢失或出错,那么TCP将直接丢弃这个报文段,并且不产生确认(导致重传))

失序:报文头部会有一个序号,来保证传输的正常进行

重复:(基于字节流的传输,无边界,不能严格意义上的断开,说是一个字节一个字节的传,所以发送给目的端的时候,它接受的有时是不止一个流,可能一个,可能两个,我们不知道的,所以)也通过序号来保证不重复

丢包:超时重传机制  +  确认机制(一定时间内没有收到确认的消息就会启动重传,当TCP发出一个段之后,会启动一个定时器,等待目的端确认收到这个报文段,通常这个确认不是立即发送,而是推迟几分之一,如果源端不能收到确认,启动重传机制



你可能感兴趣的:(syn,ack,段,tcp报文,TCP特性)