一、TCP服务
TCP协议是提供面向连接的、可靠的传输服务,适用于各种可靠的或不可靠的网络。TCP用户送来的是字节流形式的数据,这些数据缓存在TCP实体的发送缓冲区中。一般情况下,TCP实体自主的决定如何把字节流分段,组成TPDU发送出去。在接收端,也就是TCP实体决定何时把积累在接收缓冲区中的字节流提交给用户。分段的大小和提交的频度是由具体的实现根据性能和开销权衡决定的,TCP规范中没有定义。显然,即使两个TCP实体的实现不同,也可以相互操作。
另外,TCP也允许用户把字节流分成报文用推进(PUSH)命令指出报文的界限。发送端TCP实体把PUSH标志之前的所有未发数据组成TPDU立即发送出去,接收端TCP实体同样根据PUSH标志决定提交的界限
二、TCP协议
TCP只有一种类型的PDU,叫作TCP段,段头(也叫TCP头或传输头)的格式如下: 1、源端口(16位):说明源服务访问点。 2目标端口(16位):表示目标服务访问点。 3、发送顺序号(32位):本段中第一个数据字节的顺序号。 4、接受顺序号(32位):捎带接受的顺序号,指明接收方期望接受的下一个数据字节的顺序号 5、偏置值(4位):传输头中32位字的个数。因为传输头有任选部分,长度不固定,所以需要 偏置值。 6、保留字段(6位):未用,所有实现必须把这个字段置全0. 7、标志字段(6位):表示各种控制信息,其中
- URG:紧急指针有效。
- ACK:接受顺序号有效。
- PSH:推进功能有效。
- RST:连接复位为初始状态,通常用于连接故障后的恢复。
- SYN:对顺序号同步,用于连接的建立。
- FIN:数据发送完,连接可以释放。
8、窗口(16位):为流控分配的信息量。 9、校验和(16位):段中所有16位字按模2^16-1相加的和,然后取1的补码。 10、紧急指针(16位):从发送顺序号开始的偏置值,指向字节流中的一个位置,此位置之前的数据是紧急数据。 11、任选项(长度可变):目前只有一个任选项,即建立连接时指定的最大段长。 12、补丁:补齐32位字边界。
三、TCP的三次握手(建立连接)
同步标志SYN用于连接建立阶段。TCP用三次握手过程,建立连接,首先是发起方发送一个SYN标志置位的段,其中的发送顺序号为某个值X,称为初始顺序号 ISN(Initial Sequence Number) ,接收方以SYN和ACK标志置位的端响应,其中接收顺序号应为X+1(表示期望从X+1个字节处开始接收数据),发送顺序号为某个值Y(接受方指定的ISN)。这个段到达发送端后,发起专ACK标志置位,应答顺序号位Y+1的段回答,连接就正式建立了。可见,所谓初始顺序号就是收发双方对连接的标识,也与字节流的位置有关。因而对发送顺序号更准确的解释应该是: 当SYN未置位时,表示本段中第一个数据字节的顺序号;当SYN置位时,它时初始顺序号ISN,而段中第一个数据字节的顺序号应为ISN+1,正好与接收方期望接收的数据字节的位置对应。 如下图
四、TCP连接状态图
总结
文章可能存在知识短板,希望包涵,有错误点请指正!!!
|