TCP(Transmission Control Protocol)------传输控制协议
学习传输层协议,要知道端口号是什么,端口号主要是用来区分不同的网络服务。端口号有公知端口号(0~1023)和动态端口号(>1024),但括号内的范围并不绝对。常见的公知端口号有FTP(21、20)------文件传输;HTTP(80)------超文本传输;SMTP(25)------邮件;Telnet(23)------远程登录;TFTP(69)------简单文本传输;HTTPS(443)------安全超文本传输;在封装数据时,如果网络服务对应端口号为公知端口号,则source port为该公知端口号。若网络服务对应的端口号为动态端口,则source port为随机选择的一个较大的值。
下面介绍TCP报文格式
TCP段首部长度在20~60字节之间,由定长部分(20字节)和变长部分(0~40字节)组成
source port------源端口,16bits
destination------目的端口,16bits
sequence number------序号字段,16bits,TCP传输的数据流中每个字节都被标上了序号,序号字段指的是报文段发送的第一个字节的序号。
ackonwledgment number------确认号,16bits,是希望收到的对方下一个报文段的第一个字节的序号。例如,上次成功接收了字节序号为1001的序号字段,则返回的的ackonwledgment number为1002。只有ACK标识为1,该字段才有效。
header length------头部长度,4bits(data offset------数据偏移,4bites,也表示首部长度)
reserved------保留字段,6bits,必须填0。
URG------紧急指针有效标识,1bit,告诉系统此报文段中有紧急数据,应尽快传送。和urgent point配合使用,当URG=1时,urgent point 有效。urgent point指出本报文段中紧急数据的最后一个字节的序号。
ACK------acknowledgment number有效标识,1bit,只有当ACK=1时才有效。
PSH------1bit,标识接收方尽快将这个报文给应用层,而不再等待缓存满了之后再向上交付。PSH=1时有效。
RST------重建连接标识,1bit,当RST=1时,表明TCP连接中出现严重错误,必须释放连接,再重新建立连接。
SYN------同步序号标识,1bit,用来发起连接,SYN=1表示这是一个连接请求或连接接收请求。
FIN------发端完成任务标识,用来释放一个连接。1bit,FIN=1有效。
window------窗口,用于TCP流量控制
checksum------校验字段,16bits,包括TCP首部和TCP数据。一定是由发端负责计算和存储,并由收端进行验证。在计算校验和时,要在TCP报文段的前面加上12字节的伪首部。
urgent point------紧急指针,16bits,只有当URG=1时才有效。紧急数据放在本报文段的最前面。
options------选项字段,选项表结束、无操作、最大报文段长度、窗口扩大因子、时间戳
padding------填充字段,用来补位,使整个首部长度是4字节的整数倍。
data------TCP负载
备注:
URG和PSH的区别:PSH位在telnet中用的较多,当键入一个命令时,总希望能快速响应,PSH置1,不用等待更多的数据形成TCP段,接收方根据PSH=1立即将缓存区的数据送入应用程序。URG置1,可以不用排队发送数据,例如发现前面发送的数据有错误需要紧急停止时,可以发送URG置1的报文,紧急数据将被插入到前面进行发送。
计算校验和时,引入伪首部的目的是验证TCP数据段是否正确的信宿端。由于TCP数据段本身只包含源端口、目的端口,不能构成完整的信宿端应用进程的标识,所以通过伪首部来补充其他信息。TCP伪首部信息是来自IP数据报的首部。TCP的发送方和接收方在计算校验和时都会加上伪首部信息,若接收方验证了校验和时正确的,则发送正确,否则数据发送错误。在TCP/IP协议栈中,TCP校验和是保证数据正确性的唯一手段。
TCP伪首部格式
或许存在错误,还请各位看客多多指教!