苏格网站建设,全国建造师查询网站,天津公司网站,微信小程序模板开发IP段格式 IP数据报的首部长度和数据长度都是可变长的#xff0c;但总是4字节的整数倍。
对于IPv4#xff0c;4位版本字段是4。4位首部长度的数值是以4字节为单位的#xff0c;最小值为5#xff0c;也就是说首部长度最小是4x520字节#xff0c;也就是不带任何选项的IP首部…IP段格式 IP数据报的首部长度和数据长度都是可变长的但总是4字节的整数倍。
对于IPv44位版本字段是4。4位首部长度的数值是以4字节为单位的最小值为5也就是说首部长度最小是4x520字节也就是不带任何选项的IP首部4位能表示的最大值是15也就是说首部长度最大是60字节。
8位TOS字段有3个位用来指定IP数据报的优先级目前已经废弃不用还有4个位表示可选的服务类型最小延迟、最大?吐量、最大可靠性、最小成本还有一个位总是0。总长度是整个数据报包括IP首部和IP层payload的字节数。每传一个IP数据报16位的标识加1可用于分片和重新组装数据报。
3位标志和13位片偏移用于分片。TTLTime to live)是这样用的源主机为数据包设定一个生存时间比如64每过一个路由器就把该值减1如果减到0就表示路由已经太长了仍然找不到目的主机的网络就丢弃该包因此这个生存时间的单位不是秒而是跳hop。协议字段指示上层协议是TCP、UDP、ICMP还是IGMP。然后是校验和只校验IP首部数据的校验由更高层协议负责。IPv4的IP地址长度为32位。
想一想前面讲了以太网帧中的最小数据长度为46字节不足46字节的要用填充字节补上那么如何界定这46字节里前多少个字节是IP、ARP或RARP数据报而后面是填充字节
UDP数据报格式 UDP数据段
下面分析一帧基于UDP的TFTP协议帧。 以太网首部 0000: 00 05 5d 67 d0 b1 00 05 5d 61 58 a8 08 00 IP首部 0000: 45 00 0010: 00 53 93 25 00 00 80 11 25 ec c0 a8 00 37 c0 a8 0020: 00 01 UDP首部 0020 05 d4 00 45 00 3f ac 40 TFTP协议 0020: 00 01 ‘c’’:’’’‘q’ 0030: ‘w’‘e’‘r’‘q’’.’‘q’‘w’e’00 ‘n’‘e’‘t’‘a’‘s’‘c’‘i’ 0040: i’00 ‘b’‘l’‘k’‘s’‘i’‘z’e’00 ‘5’‘1’2’00 ‘t’‘i’ 0050: ‘m’‘e’‘o’‘u’t’00 ‘1’0’00 ‘t’‘s’‘i’‘z’e’00 0’
0060: 00以太网首部源MAC地址是00:05:5d:61:58:a8目的MAC地址是00:05:5d:67:d0:b1上层协议类型0x0800表示IP。
IP首部每一个字节0x45包含4位版本号和4位首部长度版本号为4即IPv4首部长度为5说明IP首部不带有选项字段。服务类型为0没有使用服务。16位总长度字段包括IP首部和IP层payload的长度为0x0053即83字节加上以太网首部14字节可知整个帧长度是97字节。IP报标识是0x9325标志字段和片偏移字段设置为0x0000就是DF0允许分片MF0此数据报没有更多分片没有分片偏移。TTL是0x80也就是128。上层协议0x11表示UDP协议。IP首部校验和为0x25ec源主机IP是c0 a8 00 37192.168.0.55目的主机IP是c0 a8 00 01192.168.0.1。
UDP首部源端口号0x05d41492是客户端的端口号目的端口号0x004569是TFTP服务的well-known端口号。UDP报长度为0x003f即63字节包括UDP首部和UDP层pay-load的长度。UDP首部和UDP层payload的校验和为0xac40。 TFTP是基于文本的协议各字段之间用字节0分隔开头的00 01表示请求读取一个文件接下来的各字段是 c:\qwerq.qwe netascii blksize 512 timeout 10 tsize 0
一般的网络通信都是像TFTP协议这样通信的双方分别是客户端和服务器客户端主动发起请求上面的例子就是客户端发起的请求帧而服务器被动地等待、接收和应答请求。客户端的IP地址和端口号唯一标识了该主机上的TFTP客户端进程服务器的IP地址和端口号唯一标识了该主机上的TFTP服务进程由于客户端是主动发起请求的一方它必须知道服务器的IP地址和TFTP服务进程的端口号所以一些常见的网络协议有默认的服务器端口
例如HTTP服务默认TCP协议的80端口FTP服务默认TCP协议的21端口TFTP服务默认UDP协议的69端口如上例所示。在使用客户端程序时必须指定服务器的主机名或IP地址如果不明确指定端口号则采用默认端口请读者查阅ftp、tftp等程序的man page了解如何指定端口号。
/etc/services中列出了所有well-known的服务端口和对应的传输层协议这是由IANAInternet Assigned Numbers Authority规定的**其中有些服务既可以用TCP也可以用UDP为了清晰IANA规定这样的服务采用相同的TCP或UDP默认端口号**而另外一些TCP和UDP的相同端口号却对应不同的服务。
很多服务有well-known的端口号然而客户端程序的端口号却不必是well-known的往往是每次运行客户端程序时由系统自动分配一个空闲的端口号用完就释放掉称为ephemeral的端口号想想这是为什么
前面提过UDP协议不面向连接也不保证传输的可靠性例如 发送端的UDP协议层只管把应用层传来的数据封装成段交给IP协议层就算完成任务了如果因为网络故障该段无法发到对方UDP协议层也不会给应用层返回任何错误信息。
接收端的UDP协议层只管把收到的数据根据端口号交给相应的应用程序就算完成任务了如果发送端发来多个数据包并且在网络上经过不同的路由到达接收端时顺序已经错乱了UDP协议层也不保证按发送时的顺序交给应用层。
通常接收端的UDP协议层将收到的数据放在一个固定大小的缓冲区中等待应用程序来提取和处理如果应用程序提取和处理的速度很慢而发送端发送的速度很快就会丢失数据包UDP协议层并不报告这种错误。
因此使用UDP协议的应用程序必须考虑到这些可能的问题并实现适当的解决方案例如等待应答、超时重发、为数据包编号、流量控制等。一般使用UDP协议的应用程序实现都比较简单只是发送一些对可靠性要求不高的消息而不发送大量的数据。例如基于UDP的TFTP协议一般只用于传送小文件所以才叫trivial的ftp而基于TCP的FTP协议适用于 各种文件的传输。TCP协议又是如何用面向连接的服务来代替应用程序解决传输的可靠性问题呢。
TCP数据报格式 与UDP协议一样也有源端口号和目的端口号通讯的双方由IP地址和端口号标识。32位序号、32位确认序号、窗口大小稍后详细解释。4位首部长度和IP协议头类似表示TCP协议头的长度以4字节为单位因此TCP协议头最长可以是4x1560字节如果没有选项字段TCP协议头最短20字节。URG、ACK、PSH、RST、SYN、FIN是六个控制位