1、以太网协议
2、ARP协议
- 以太网前两个字段目的地址和以太网源地址中,如果目的地址为全一则代表广播地址。
- 帧类型:表示后面数据的类型。0x0806表示ARP请求与应答
- 硬件类型:表示硬件地址的类型。为1表示以太网地址。
- 协议类型:表示要映射的协议地址类型,0x0800表示IP地址,它的值与以太网数据帧中类型字段的值一样。
- 硬件地址长度与协议地址长度:硬件地址和协议地址的长度。对于以太网IP地址的ARP请求/应答,值为6和4。
- op:操作字段。ARP请求:1,ARP应答:2;RARP请求:3,RARP应答:4;
3、IPV4数据报格式
- 4位版本:以IPV4为例,协议的版本号为4;
- 4位首部长度:IP头部的长度是多少个32bit,也就是length*4的字节数;4bit表示的最大长度是15,所以IP头部最大长度是60个字节;
- 8位服务类型:3位优先权字段(已经弃用),4 bit的TOS子字段和1 bit未用位但必须置0。4 bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。这四者相互冲突,4 bit中只能置其中1 bit。如果所有4 bit均为0,那么就意味着是一般服务。对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要;
- 16位总长度:IP数据报整体占多少字节;
- 16位标识:唯一的标识主机发送的报文,如果IP报文在数据链路层被分片了,那么每一片里面的id也是相同的。
- 3位标志:第一位保留,第二位为1表示禁止分片,这时候如果数据报文长度超过MTU,ip模块就会丢弃报文;第三位表示更多分片,最后一个分片置0,其他是1,类似一个结束标记。
- 13位分片偏移:是分片相对于原始IP报文开始处的偏移,其实就是表示当前分片在原始报文中是处于什么位置。实际偏移的字节数是这个值*8得到的;因此除了最后一个报文外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。
- 8位生存时间:数据报到达目的地的最大报文跳数,一般是64,每次经过一个路由,TTL-=1;如果一直减到0还没到达,那么就丢弃了,这个字段主要用来防止出现路由循环。
- 8位协议:表示上层协议的类型
- 16位首部校验和:使用CRC进行校验,来鉴别头部是否损坏
- 32位源端/目的端地址:表示发送端和接收端
4、UDP数据报
- 16位源端口号:标记发送进程
- 16位源端口号:标记接收进程
- 16位UDP长度:UDP首部和UDP数据的字节长度,最小值为8字节。
- 16位UDP校验和:检测UDP用户数据报在传输中是否有错,有错就丢弃。
-
5、TCP数据段格式
- 16位源端口号和目的端口号:用于寻找发送进程和接收进程。这两个值加上IP首部中的源端IP地址和目的端IP唯一确定一个TCP连接
- 32位序号/确认序号:表示从TCP发端向TCP收端发送的数据字节流,表示在这个报文段中的第一个数据字节。保证TCP数据的有序交付
- 4位首部长度:tcp报头长度(并不包含数据),以4字节为单位,tcp报头大小范围:20~60字节
- URG(紧急):URG=1表示紧急指针字段有效。它告诉系统此报文段有紧急数据,应当尽快传送。
- ACK(确认):ACK=1时,确认号字段才有效。
- PSH(推送):让对方立即收到响应。
- RST(复位):RST=1时,表明TCP链接中出现严重差错,必须释放链接,然后再重新链接。
- SYN(同步):在链接建立时用来同步序号。当SYN=1,ACK=0时表示请求报文。SYN=1,ACK=1表示链接接受。因此SYN=1表示一个链接请求或链接接受报文。
- FIN(终止):用来释放一个链接。
- 16位窗口大小:窗口指的是发送本报文段一方的接收窗口。窗口值是指从确认号算起,允许对方发送的数据量。也就是谁发的报文段,就是谁的接受窗口大小。
- 16位校验和:校验接收的数据与发送的数据是否一致
- 16位紧急指针:带外数据