今天汇总下IP报头、TCP、UDP的知识,希望可以帮助大家理解IP报头、TCP、UDP。
什么是IP报头?
1、VER 代表版本这里为V4 大小为4bite
2、IHL IP包的头部长度 大小为4bite
注意:整个IP头部一般为20字节 最大为60字节 (1111)*32=480bite
3、Service Type:服务类型 8bite 前3个比特(COS)表示优先级,TOS 第4个比特表示要求有更低的时延,第5个比特表示要求有更高的吞吐量,第6个比特表示要求更高的可靠性,第7个比特表示选择价格更低廉的路由,最后一个比特未用。
4、Packet Length:16bite 数据包的总长度包括报头长度和数据长度 最大为65536字节。
5、Identification:标示符16bite 用于数据分段,一个数据报在传输过程中可能分成若干段,标识符可以区分某分段属于某报文,一个数据报的所有分段具有相同的标识符。
6、Flag:3bite 它是用来标志数据包是不是分段,其中包含DF(do not fragment)和MF(more fragment),当DF的值为1时,则MF的值必为0,DF为1,则说明数据包有分段。同样可以知道当MF为1时,则DF为0,这表示的是数据包没有分段。当然也有可能MF和DF都为0。
7、Frag offset:段偏移 15bite 用于描述此分段在数据包中的位置
TTL:生存时间 8bite TTL最大为255 经过一个路由器减1,减到0时数据包被丢弃
Protocol:协议8bite这个字段指示IP下一步应当把这个数据包发往更高层的协议,如TCP为6,UDP为17。
8、Header Checksum:头部校验和16bite 计算IP 头部的校验和,检查报文头部的完整性
9、Source Address:源地址 32bite Destinaltion Adderss:目标地址 32bite
10、Options:IP可选项 24bite 用于提供一些数据报可选的服务 时间戳、记录路由等
11、Padding:填充项 Options一般为0或者是32bit的倍数 如果不够32bite或者32bite的倍数则由Padding补齐
什么是UDP?
UDP:用户数据报文协议—–传输层标配协议—-非面向连接的不可靠传输协议
内容:16位源端口 16位目标端口
16位的UDP包长度 UDP头部和UDP数据的总长度字节
16位头部校验和 此字段是可选项
仅提供端口号—-0-65535 1-1023注明端口1024-65535动态端口(高端口)
客户端访问服务器时,随机在高端口中分配一个进程号;作为数据包中的源端口—用于区分客户端上的程序进程;使用注明端口来作为目标端口,用于告知所要访问的服务;
什么是TCP
TCP:传输控制协议—-在完成了传输的基本工作(分段、端口)外,还可以保障数据包可靠性
面向连接的可靠传输协议
16位源端口 16位目的端口
32位序列编号 用来解决网络包乱序(reordering)问题。
32位确认序号 ACK 用于确认收到数据包,用来解决不丢包的问题。
4位首部长度 表示该tcp报头有多少个4字节(32个bit)
6位的保留位
6位标志位
URG: 标识紧急指针是不是有效
ACK: 标识确认序号是不是有效
PSH: 用来提示接收端应用程序立刻将数据从tcp缓冲区读走
RST: 要求重新建立连接. 我们把含有RST标识的报文称为复位报文段
SYN: 请求建立连接. 我们把含有SYN标识的报文称为同步报文段
FIN: 通知对端, 本端即将关闭. 我们把含有FIN标识的报文称为结束报文段
16位窗口大小 用来数据传输时的流量控制避免拥塞
16位校验和 发送端填充, 检验形式有CRC校验等. 如果接收端校验不通过, 则认为数据有问题. 此处的校验和不光包含TCP首部, 也包含TCP数据部分
16位紧急指针: 用来标识哪部分数据是紧急数据
在互联网BGP网络、IDC机房中,我们常常会遇到TCP和UDP的问题,感兴趣的可以一起交流。