目录

                                                       各种通讯协议头解析

 

一、TCP头分析

二、UDP协议

三、IP 头格式 

四 、以太网头


      

 

一、TCP头分析

先来分析一下TCP头的格式以及每一个字段的含义:

TCP、UDP分析

字段 长度bit 含义
源端口号 16 该报文段是哪个服务发出的
目的端口号 16 该报文段需要哪个服务接收。进行TCP通信时,客户端通常使用系统自动选择的临时端口号,而服务器则使用知名服务端口号。1.3节中提到过,所有知名服务使用的端口号都定义在/etc/services文件中。
序号(sequence number) 32 一次TCP通信(从TCP连接建立到断开)过程中某一个传输方向上的字节流的每个字节的编号。假设主机A和主机B进行TCP通信,A发送给B的第一个TCP报文段中,序号值被系统初始化为某个随机值ISN(Initial Sequence Number,初始序号值)。那么在该传输方向上(从A到B),后续的TCP报文段中序号值将被系统设置成ISN加上该报文段所携带数据的第一个字节在整个字节流中的偏移。例如,某个TCP报文段传送的数据是字节流中的第1025~2048字节,那么该报文段的序号值就是ISN+1025。另外一个传输方向(从B到A)的TCP报文段的序号值也具有相同的含义。
确认号(acknowledgement number) 32 用作对另一方发送来的TCP报文段的响应。其值是期待下一次收到的TCP报文段的序号值。假设主机A和主机B进行TCP通信,那么A发送出的TCP报文段不仅携带自己的序号,而且包含对B发送来的TCP报文段的确认号。反之,B发送出的TCP报文段也同时携带自己的序号和对A发送来的报文段的确认号。
头部长度(header length)课件中标识为offset 4 标识该TCP头部有多少个32bit字(4字节)。因为4位最大能表示15,所以TCP头部最长是60字节。
标志位 6 包含如下几项:
URG标志,表示紧急指针(urgent pointer)是否有效。
ACK标志,表示确认号是否有效。我们称携带ACK标志的TCP报文段为确认报文段。
PSH标志,提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间(如果应用程序不将接收到的数据读走,它们就会一直停留在TCP接收缓冲区中)。
RST标志,表示要求对方重新建立连接。我们称携带RST标志的TCP报文段为复位报文段。
SYN标志,表示请求建立一个连接。我们称携带SYN标志的TCP报文段为同步报文段。(三次握手)
FIN标志,表示通知对方本端要关闭连接了。我们称携带FIN标志的TCP报文段为结束报文段。
窗口大小(window size) 16 是TCP流量控制的一个手段。这里说的窗口,指的是接收通告窗口(Receiver Window,RWND)。它告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。
校验和(TCP checksum) 16 由发送端填充,接收端对TCP报文段执行CRC算法以检验TCP报文段在传输过程中是否损坏。注意,这个校验不仅包括TCP头部,也包括数据部分。这也是TCP可靠传输的一个重要保障。
紧急指针(urgent pointer) 16 它和序号字段的值相加表示最后一个紧急数据的下一字节的序号。因此,确切地说,这个字段是紧急指针相对当前序号的偏移,不妨称之为紧急偏移。TCP的紧急指针是发送端向接收端发送紧急数据的方法。我们将在后面讨论TCP紧急数据。
可选项 最多40字节 是可变长的可选信息。这部分最多包含40字节,因为TCP头部最长是60字节(其中还包含前面讨论的20字节的固定部分)。

 

二、UDP协议

UDP协议也是传输层协议,它是无连接,不保证可靠的传输层协议。它的协议头比较简单,如下:

TCP、UDP分析

字段 长度bit 含义
源端口号Source Port 16 源端口是可选字段。当使用时,它表示发送程序的端口,同时它还被认为是没有其它信息的情况下需要被寻址的答复端口。如果不使用,设置值为0。
目的端口号 16 目标端口在特殊因特网目标地址的情况下具有意义
Length 16 该用户数据报的八位长度,包括协议头和数据。长度最小值为8
Checksum 16 IP 协议头、UDP协议头和数据位,最后用0填补的信息假协议头总和。如果必要的话,可以由两个八位复合而成。

 

三、IP 头格式 

TCP、UDP分析

 

字段 长度bit 含义
版本(Version) 4 指定IP协议的版本号。因为目前仍主要使用IPv4版本,所以这里的值通常是 0x4 (注意封包使用的数字通常都是十六进位的)。
包头长度(Internet Header Length,IHL) 4 指明IPv4协议包头长度的字节数包含多少个32位(4字节)。由于IPv4的包头可能包含可变数量的可选项,所以这个字段可以用来确定IPv4数据报中数据部分的偏移位置。IPv4包头的最小长度是20个字节,因此IHL这个字段的最小值用十进制表示就是5(20=5*4)。占4位。由于它是一个4比特字段(0~15),因此首部最长为60(=15*4)个字节,但实际上目前最多仍为24个字节。
服务类型(Type of Service,TOS) 8 定义IP封包在传送过程中要求的服务类型,可以指示路由器在转发时采用何种策略,比如服务优先级高低等。
包长度(Total Length,TL) 16 指定IP包的总长,通常以byte做单位来表示该封包的总长度此数值包括标头和数据的总和。它以字节为单位,占16位。利用首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。
【经验之谈】由于该字段长16比特,所以IP数据报最长可达65535字节。尽管可以传送一个长达65535字节的IP数据报,但是大多数的链路层都会对它进行分段。而且,主机也要求不能接收超过576字节的数据报。由于TCP把用户数据分成若干段,因此一般来说这个限制不会影响TCP。UDP的应用(如RIP、TFTP、BOOTP、DNS、SNMP等),都限制用户数据报长度为512字节,小于576字节。但是,事实上现在大多数的实现允许超过8192字节的IP数据报。
总长度字段是IP首部中必要的内容,因为一些数据链路(如以太网)需要填充一些数据以达到最小长度。尽管以太网的最小帧长为46个字节(将在本章后面介绍),但是IP数据可能会更短。如果没有总长度字段,那么数据链路层就不知道46字节中有多少是IP数据报的内容。
标识(Identification) 16 每一个IP封包都有一个16位的唯一识别码。当程序产生的数据要通过网络传送时都会被拆散成封包形式发送,当封包要进行重组的时候这个ID就是依据了。占16位。标识字段唯一地标识主机发送的每一份数据报。通常每发送一份消息它的值就会加1。RFC791认为标识字段应该由让IP发送数据报的上层来选择。假设有两个连续的IP数据报,其中一个是由TCP生成的,而另一个是由UDP生成的,那么它们可能具有相同的标识字段。尽管这也可以照常工作(由重组算法来处理),但是在大多数从伯克利派生出来的系统中,每发送一个IP数据报,IP层都要把一个内核变量的值加1,不管交给IP的数据来自哪一层。内核变量的初始值根据系统引导时的时间来设置。
标记(Flags) 13 内容先不讲了
生存时间(Time To Live,TTL) 8 生存时间字段设置了数据报可以经过的最多路由器数,表示数据包在网络上生存多久。TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送ICMP消息通知源主机。这样当封包在传递过程中由於某些原因而未能抵达目的地的时候就可以避免其一直充斥在网路上面。
协议(Protocol,PROT) 8 指该封包携带的上层网络协议类型,如ICMP、DNS等。
IP:00
ICMP:01
IGMP:02
TCP:06
UDP:17
头校验和(Header checksum) 16 指IPv4数据报包头的校验和。这个数值用来检错用的,用以确保封包被正确无误的接收到。
源地址(Source Address,SA) 32 发送IP数据包的IP地址。
目的地址(Destination Address) 32 接收IP数据包的IP地址。
选项(Options)+填充(Padding) 32

这两个选项较少使用,只有某些特殊的封包需要特定的控制才会利用到。共32位。从以上IP包头格式可以看出,IP协议包头大小也有两种:当没有“选项”这个字段时,为160位,20个字节;当有“选项”字段时为192位,24个字节。它与TCP协议包头大小是一样的。

 

四 、以太网头

 

TCP、UDP分析

三部分组成 :源MAC Address | 目的 MAC Address | 所使用的协议.

所以在以太网中,数据包的格式有一下几种:

TCP、UDP分析

ARP协议是通过IP地址获得对应的MAC地址,称为地址解析协议

RARP协议是通过MAC地址来获得对应的IP地址,称为逆向地址解析协

 

相关文章: