TCP中最前面两个字段是源端口号(16bits)和目的端口号(16bits),端口号是用于应用区分的,如何标识上层的应用是靠源端口和目的端口这两个字段;下面是序列号(sequence number)32bits和应答号(acknowledge number)32bits;下面是4bits的头长度、6bits保留字段、6bits控制位(syn ack);window size(16bits)用于流量的控制;校验信息(16bits);紧急指针(16bits)可选项(32bits);应用数据部分; TCP协议的头有20bits,IP协议头标准长度也是20bits,在传输数据包的时候,包的前面有TCP头20bits、有IP头20bits,也就是40bits的控制信息,头压缩是指这40bits的TCPIP头。
UDP协议头结构: 在校验信息里面并不仅仅是UDP头的数据还包括IP头以及UDP下一层IP头的一些基本的信息,从这点来看UDP和IP之间是一种紧密的捆绑关系,从这点来看TCP\IP的协议并不是完全符合OSI协议的要求(OSI定义了清晰的结构和上下层的应用),在TCP\IP协议栈中,tcpudpip这几个协议通常是绑定在一起由系统统一实现的,并不存在一个厂家的UDP和另一个厂家的IP程序的互操作性的影响。
其他层次的协议区分: 首先,协议区分是一种相对通用的一种东西,有多种应用协议都放在TCP里面,比如HTTP FTP 等等,应用层就是靠Port完成的;在网络层的IP层里是靠protocol区分的,protocol是8bits,其中6表示TCP,17表示UDP,1表示ICMP;对于以太网,以太帧头是用TYPE来区分(16bits),0800表示IP数据包,等等;协议的区分是一个通用的概念。其他层次的可靠性保障应用层:TFTP,简单文件传输协议,本身就有可靠性保障的功能,它自己会做每一个数据块的校验,TFTP提供了一种校验错误和应答的机制,所以就不需要下层去提供可靠性保障了。传输层:TCP 网络层:X.25,一种相对古老的网络层的协议,它所面向的传输的介质是非常差的,比如传统的电话线,产生错误的几率非常高,它本身可以纠错。承载层:许多无线传输方式上,在空中链路极易受到干扰,比如GSM等等有很多自身的数据传输可靠性的保障。在哪层实现可靠性保障取决于性能和可靠性的要求。