IP协议详解
- 我们开始学习网络协议,我们要做实时音视频传输。最关键的就是网络传输,要学好网络传输,我们就要对整个网络协议有一个清晰的认知,在这个网络协议中,我们做实时音视频最主要的就是使用UDP。
为什么要使用UDP?
- TCP的优势与劣势
- UDP的优势与劣势
- 知道以上2点后,我们就能知道我们为什么要使用UDP
IP协议头
- 无论是TCP、UDP、ICMP都是在IP协议头之后的数据部分。IP层在往下就是物理层
- IP层分为IP头和数据部分。数据里就包括ICMP、TCP、UDP。所以我们先学习IP头都包括那些字段以及含义,这样才能有基础学习后面的知识。
-
Version(4位) IP协议的版本。对于IPv4来说值是4
-
IHL(4位) IP头部长度。4位最大为0xF,注意该字段表示单位是字(4字节)
-
Type of Service(8位) 服务类型 3位优先权字段(现已被忽略) + 4位TOS字段 + 1位保留字段(须为0)。4位TOS字段分别表示最小延时、最大吞吐量、最高可靠性、最小费用,其中最多有一个能置为1。应用程序根据实际需要来设置TOS值,如ssh和telnet这样的登录程序需要的是最小延时的服务。
-
Total Length (16位)总长度 ,总长度-IHL=数据部分的长度
-
下来的3个字段则描述如何实现拆包:
-
Identification (16位)标识 唯一地标识主机发送的每一个数据报,其初始值是随机的,每发送一个数据报其值就加1。同一个数据报的所有分片都具有相同的标识值。根据这个标示就可以知道哪几个包是一起的进行组装
-
Flags (3位)标志 1保留,位2表禁止分片(DF),若设置了此位,IP模块将不对数据报进行分片,在此情况下若IP数据报超过MTU,IP模块将丢弃数据报并返回一个ICMP差错报文里面就有最大传输单元,这也就是如何探测最大传输单元;位3标识更多分片(MF),除了数据报的最后一个分片,其他分片都要把它设置为1。
-
Fragment Offset (13位)位偏移 分片相对原始IP数据报数据部分的偏移。实际的偏移值为该值左移3位后得到的,所以除了最后一个IP数据报分片外,每个IP分片的数据部分的长度都必须是8的整数倍
-
Time to Lice 生存时间 数据报到达目的地之前允许经过的路由器跳数。TTL值被发送端设置,常设置为64。数据报在转发过程中每经过一个路由该值就被路由器减1.当TTL值为0时,路由器就将该数据包丢弃,我们在做nat穿越的时候可以指定跳数比如跳5次,来进行nat检测。
-
Protocol 协议 区分IP协议上的上层协议。ICMP为1,TCP为6,UDP为17
-
Header Checksum 头部校验和 由发送端填充接收端对其使用CRC算法校验,检查IP数据报头部在传输过程中是否损坏
-
Source Address 源IP地址
-
Destination Address 目的IP地址 表示数据报的发送端和接收端。一般情况下这两个地址在整个数据报传递过程中保持不变,不论中间经过多少个路由器
-
Options 选项
-
Padding 32位的字节对齐