TCP包头:
1.源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个程序需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个
2.序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从 0 开始
3.确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送发:我希望你(指发送方)下次发送的数据的第一个字节数据的编号是这个确认号
4.数据偏移:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节
URG:表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent
pointer)只有当URG=1时才有效
ACK:表示是否前面的确认号字段是否有效。ACK=1,表示有效。只有当ACK=1时,前面
的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段
PSH:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空
间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中
RST:如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必
须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,
带RST标志的TCP报文段称为复位报文段
SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段
FIN:表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:
“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段
6.窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段
的确认号开始允许对方发送的数据量
7.校验和:提供额外的可靠性
8.紧急指针:标记紧急数据在数据字段中的位置
9.选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表
示,选项部分最长为:(2^4-1)*4-20=40字节
常见选项:
最大报文段长度:Maxium Segment Size,MSS 期望对方发送TCP报文段时那个数据字段的长度。默认是536字节。
窗口扩大:Windows Scaling
为了扩大窗口,由于TCP首部的窗口大小字段长度是16位,所以其表示的最大数是
65535。但是随着时延和带宽比较大的通信产生(如卫星通信),需要更大的窗口
来满足性能和吞吐率,所以产生了这个窗口扩大选项
时间戳: Timestamps
可以用来计算RTT(往返时间),发送方发送TCP报文时,把当前的时间值放入时间
戳字段,接收方收到后发送确认报文时,把这个时间戳字段的值复制到确认报文中,
当发送方收到确认报文后即可计算出RTT。
IP 报头
1.版本:占4位,指 IP 协议的版本目前的IP协议版本号为4
2.首部长度:占4位,可表示的最大数值是15个单位,一个单位为4字节,因此IP 的首部
长度的最大值是60字节
3.区分服务:占8位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使
用过.后改名为区分服务.只有在使用区分服务(DiffServ)时,这个字段才起作用.一般的
情况下都不使用
4.总长度:占16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为
65535 字节.总长度必须不超过最大传送单元 MTU
5.标识:占16位,它是一个计数器,通常,每发送一个报文,该值会加1, 也用于数据包
分片,在同一个包的若干分片中,该值是相同的
6.标志(flag):占3位,目前只有后两位有意义
7.DF: Don‘t Fragment,中间的一位,只有当 DF=0 时才允许分片
8.MF: More Fragment,最高位,MF=1表示后面还有分片。MF=0 表示最后一个分片
9.片偏移:占12位,指较长的分组在分片后,该分片在原分组中的相对位置.片偏移以8个字节为偏移单位
10.生存时间:占8位,记为TTL (Time To Live) 数据报在网络中可通过的路由器数的
最大值,TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字
RFC 指定,当前值为 64.发送 ICMP 回显应答时经常把 TTL 设为最大值 255
11.协议:占8位,指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据
部分上交给哪个处理过程, 1表示为 ICMP 协议, 2表示为 IGMP 协议, 6表示为
TCP 协议, 17表示为 UDP 协议
12.首部检验和:占16位,只检验数据报的首部不检验数据部分.这里不采用 CRC 检验
码而采用简单的计算方法
13.源地址和目的地址:都各占4字节,分别记录源地址和目的地址
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/97269