ip报文
IP协议是TCP/IP协议族的动力,它为上层协议提供无状态、无连接、不可靠的服务。
优点:简单,高效。
无状态指:IP通信双方不同步传输数据的状态信息,所有的IP数据报的传输都是独立的。所以容易发生重复和乱序的情况并且IP层不予处理。
然后将这些乱序的交给上层传输层(TCP/UDP等)来处理,将其处理成有序的,正确的。再交给应用层。
不可靠指:IP协议不能保证IP数据报准确到达。所以它提供ICMP报文来辅助,一旦检测到IP数据报发送失败,通知上层协议。
IP头部信息:
头部长度:通常20字节,有选项时更长,总共不超过60字节。
IP数据报长度:65535字节。
逐个分析:
- 4位版本号:IP协议(IPv4)版本号位4
- 4位头部长度:标识头部有多少个4字节,即最大共15*4个字节
- 8位服务类型:包含一个4位优先权字段:最小延时,最大吞吐量,最高可靠性和最小费用。
- 16位总长度:表示整个IP数据报的长度,最大表示65535,但由于MTU限制,一般无法到达这个值。
- 16位标识:唯一的标识数据报。系统采用加1的式边发送边赋值。
- 3位标识(保留,DF禁止分片,MF更多分片):所以这个标志是为分片存在,DF设置时禁止分片所以如果数据报太大则发送失败。MF设置时,如果产生分片,除了最后一个分片,其他此片置1。
- 13位分片偏移:分片相对原始IP数据报开始处的偏移。
- 8位生存时间(TTL):数据报到达目的地之前允许经过的路由跳跳数。跳一下减1,得0丢弃。
- 8位协议:用来区分上层协议(ICMP为1,TCP为6,UDP为17)。
- 16位头部校验和:仅以CRC算法检验数据报头部在传输过程中是否损坏。
- 32位源端口IP地址和目的端口地址很明白。
- 选项(可变长):记录路由,告诉途径得所有路由把IP填进来。 时间戳,告诉每个路由器都将数据报被转发的时间传进来。松散路由选择,指定一个路由器IP地址列表,必须按这个表发送,严格路由选择,数据报经过路由表。
说一下中间的分片部分:图中报文的第二层三个部分给IP的分片和重组提供了足够的信息:
- 数据报标识:系统用+1法为每个数据报唯一标识此位,如果数据13被分片,所有分的小片中此位都是13。
- 标志:共三位。第一位保留,第二位DF为禁止分片,第三位MF为更多分片,当产生分N片时,将1到N-1片此位置位。
- 片偏移:表示当前数据报在完整数据报中的偏移,这里一个单位是8字节,比如片偏移为185,则代表该片在完整数据报的偏移是185*8=1480字节。
TCP/IP协议族中另一个重要协议:TCP协议,在传输层。
特点:可靠性。通过连接管理(三握四挥),序列号,确认号,拥塞控制,重传控制来保证可靠性。
头部长度:一般为20字节,选项最多40字节,限制60字节。
逐个分析:
- 16位源端口号和16位目的端口号。
- 32位序号:一次TCP通信过程中某一个传输方向上的字节流的每个字节的编号,通过这个来确认发送的数据有序,比如现在序列号为1000,发送了1000,下一个序列号就是2000。
- 32位确认号:用来响应TCP报文段,给收到的TCP报文段的序号加1,三握时还要携带自己的序号。
- 4位头部长度:标识该TCP头部有多少个4字节,共表示最长15*4=60字节。同IP头部。
- 6位保留。6位标志。URG(紧急指针是否有效)ACK(表示确认号是否有效)PSH(提示接收端应用程序应该立即从TCP接收缓冲区读走数据)RST(表示要求对方重新建立连接)SYN(表示请求建立一个连接)FIN(表示通知对方本端要关闭连接)
- 16位窗口大小:TCP流量控制的一个手段,用来告诉对端TCP缓冲区还能容纳多少字节。
- 16位校验和:由发送端填充,接收端对报文段执行CRC算法以检验TCP报文段在传输中是否损坏。
- 16位紧急指针:一个正的偏移量,它和序号段的值相加表示最后一个紧急数据的下一字节的序号。