IP:
TCP/IP协议族种最为核心的协议,所有的tcp,udp,icmp,igmp数据都是以IP数据报格式传输的。
不可靠的,无连接的,无状态的。
不可靠 : 不能保证IP数据报能成功到达目的地,仅提供最好的传输服务,当发生某路由器缓冲区暂时用完,错误处理算法将会丢弃该数据,发送ICMP消息报给信息源,任何要求的可靠性,必须由上层来提供。
无连接 : IP并不维护任何关于后续数据报的状态信息,每个数据报的处理都是相互独立的,数据报可以不按发送顺序接受,相同信号源的信宿发送两个连续的数据报(A先,后B),每个数据报都是独立进行路由选择,可能选择不同的路线,B可能在A之前到达。
无状态: 通信双方不同步传输数据的状态信息,即ip数据报的发送,传输,接收都是相互独立的,没有上下文关系的,所以接收端可能收到重复的,乱序的报文段。
IP首部:
上图IP首部中,最高位在左边,记为0bit,最低位在右边,记为31bit。.
-
4字节的31bit值传输次序:0-7bit,8-15bit,16-23bit,24-31bit。称为big endian字节序。又称网络字节序,tcp/ip首部中的所有二进制整数在网络中传输时都以这种次序。以其他形式存储二进制整数的机器,必须在传输数据之前把首部换成网络字节序。
扩:由于网络中不同主机,字节序列可能不同,所以在传输端口号的时候,规定统一转换为大端,即大端作为网络字节序,四个方法; htons: 主机字节序列转网络字节序列 短整形 htonl: 主机字节序列转网络字节序列 长整形 ntohs: 网络字节序列转主机字节序列 短整形 ntohl: 网络字节序列转主机字节序列 长整形
-
协议版本号为4,因此ip有时也称作ipv4。
-
首部长度:值首部占31bit,包括任何选项,首部最长为60个字节。
-
服务类型:该字段包括一个3bit的优先权子字段(以被忽略),4bit的TOS子字段以及1bit未用位必须置为0。4bit的TOS分别代表:最小时延,最大吞吐量,最高可靠性和最小费用,4bit只能置其中1bit,如果所有4bit均为0,为一般服务。
-
总长度字段:整个IP数据报的长度,以字节为单位,通过首部长度字段和总长度字段就可以知道IP数据报中数据内容的起始位置和长度。大多数的链路层都会对他进行分片,当数据报被分片时,该字段的值也会改变。它是IP首部必要的内容,因为一些数据链路(以太网)需要填充一些数据已达到最小长度。IP数据可能更短尽管以太网最小帧长为46字节,如果没有总长度字段,IP层就不知道46字节中有多少IP数据报内容。
-
标识字段:唯一地标识主机发送的每一份数据报,同好穿那个每发送一次他的值就会加一。
-
TTL:生存时间字段设置了数据报可以经过的最多路由器数,指定数据包的生存时间。TTL初始值有源主机设置(32/64),一旦经过一个处理他的路由器,其值减1,当该字段的值为0是,数据报就被丢弃,并发送icmp报文通知主机。
-
首部检验和字段:根据IP首部计算的检验和码,不对首部后面的数据进行计算。ICMP,IGMP,UDP,和TCP在他们各自的首部中均含有同时覆盖首部和和数据检验码。采用相同的检验和算法。
计算ip检验和: 1>将检验和字段置为0,将首部中每个16bit进行二进制反码求和(每个手部看成是由一串16bit的字组成)。 2>将结果存在检验和中,当每收到一份ip数据报后,同样对手部中每个16bit进行二进制反码求和。 3>因为接收方在计算过程中包含了发送方存在首部的检验和,所以,如果首部在传输过程中没有发生任何差错, 接收方计算的结果应该全为1,结果不全为1,ip就丢弃收到的数据报,不生成差错报文,有上层发现丢失的数据报进行重传。
-
任选项:数据报中的一个可变长度的可选信息。