IP协议

IP协议是TCP/IP协议族的核心协议,也是socket网络编程的基础之一。是网络层最核心的协议

IP头部信息:IP头部信息出现在每个IP数据报中,用于指定IP通信的源IP地址、目的端IP地址,指导IP分片和重组,以及指定部分通信行为。

IP数据报的路由和转发。IP数据报的路由和转发发生在除目标机器之外的所有主机和路由器上。他们决定数据报是否应该转发以及如何转发。

IP服务的特点:IP协议是TCP/IP协议族的动力,它为上层协议提供无状态、无连接、不可靠的服务。

无状态是指IP通信双方不同步传输数据的状态信息。因此所有IP数据报的发送、传输和接收都是相互独立、没有上下文关系的。这种服务最大的缺点就是无法处理乱序和重复的IP数据报。比如发送端发送出的第N个IP数据报可能比第N+1个数据报后到达接收端,而同一个IP数据报也可能经过不同的路径多次到达接收端。在这两种情况下,接收端的IP模块无法检测到乱序和重复,因为这些IP数据报之间没有任何上下文关系。接收端的IP模块只要收到了完整的IP数据报,就将其数据部分交给上层协议。那么从上层协议看这些数据就可能是乱序的、重复的。面向连接的协议,比如TCP协议,则能够自己处理乱序的、重复的报文段,它递交给上层协议的内容绝对是有序的、正确的。

虽然IP数据报头部提供了一个标识字段用以唯一标识一个IP数据报,但它是被用来处理IP分片和重组的,而不是用来指示接收顺序的。

无状态服务的优点也很明显:简单、高效。我们无需为保持通信的状态而分配一些内核资源。也无需每次传输数据时都携带状态信息。在网络协议中,无状态是很常见的,比如UDP和HTTP协议。以HTTP协议为例,一个浏览器的连续两次网页请求之间没有任何关联,它们将被WEb服务器独立地处理。

无连接是指IP通信双方都不长久地维持对方的任何信息。这样,上层协议每次发送数据的时候,都必须明确指定对方的IP地址。

不可靠是指IP协议不能保证IP数据报准确地到达接收端。因此使用IP服务的上层协议需要自己实现数据确认、超时重传等机制以达到可靠传输的目的。

IP协议_第1张图片

4位版本号指定IP协议的版本。对IPV4来说,其值是4.其他IPV4的扩展版本,则具有不同的版本号。

4位头部长度标识该IP头部有多少个字(4字节)。因为4位最大能表示15.所以IP头部最长是60字节。

8位服务类型包括一个3位的优先权字段(现在已经被忽略),4位的TOS字段和1位保留字段(必须置0)。4位的TOS字段分别表示:最小延时,最大吞吐量,最高可靠性和最小费用。其中最多有一个能置为1,应用程序应该根据实际需要来设置它。比如像ssh和telnet这样的登录程序需要的是最小延时的服务,而文件传输程序ftp则需要最大吞吐量的服务。

16位总长度是指整个IP数据报的长度,以字节为单位,因此IP数据报的最大长度为65535字节。但由于MTU的限制,长度超过MTU的数据报都将被分片传输,所以实际传输的IP数据报的长度都远远没有达到最大值。

16位标识唯一的标识主机发送的每一个数据报。其初始值由系统随机生成;每发送一个数据报,其值就加一。该值在数据报分片时被复制到每个分片中,因此同一个数据报的所有分片都具有相同的标识值

3位标志字段的第一位保留。第2位表示“禁止分片”。如果设置了这个位,IP模块将不对数据报进行分片。在这种情况下,如果IP数据包长度超过MTU的话,IP模块将丢弃该数据报并返回一个ICMP差错报文。第三位表示“更多分片”。除了数据报的最后一个分片外,其他分片都要把它置1.

13位分片偏移是分片相对原始IP数据报开始处(仅指数据部分)的偏移

8位生存时间,(TTL)是数据报到达目的地之前允许经过的路由器跳数。TTL值被发送端设置(常见的值是64)。数据报在转发过程中每经过一个路由,该值就被路由器减1.当TTL值减为0时,路由器将丢弃数据报,并向源端发送一个ICMP差错报文。TTL值可以防止数据报陷入路由循环。

8位协议用来区分上层协议。

16位头部校验和由发送端填充,接收端对其使用CRC算法以检验IP数据报头部在传输中是否损坏。

32位的源端IP地址和目的端IP地址用来标识数据报的发送端和接收端。

ICMP协议的主要功能:1、确认IP包是否成功到达目标地址。2、通知在发送过程中IP包被丢弃的原因。

《Linux高性能服务器编程》

 

 

你可能感兴趣的:(Linux,网络)