目录
传输层和网络层的关系
引入
介绍
ip协议
介绍
ip地址
引入
数据传递过程
举例(ip地址的作用)
ip报头
格式
4位版本号
ip地址不足的问题
8位服务类型
4位TOP(type of service)字段
最小延时
最大吞吐量
4位首部长度
16位总长度
8位协议号
首部校验和
8位生存时间
集线器
提供ip地址和端口号的作用
介绍
举例
传输层和网络层的关系
引入
就像班里有个小王数学成绩可好,每次都在140以上,10次有6次满分
- 这样的人就可以说他具有考满分的能力(也就是大概率可以上满分),但不一定全是满分
虽然不能百分百考满分,但他有一个校长爸爸
- 一旦考试没考满分,就让他重考,直到满分
- 当然,这也是因为这个人有很大概率可以考满分,才会让他重考,否则要是压根考不到满分,再重考几次也白搭
介绍
在这个场景下:
校长起到的是策略作用,小王没拿到满分就重考
- 对应计算机里的超时重传机制,也就是传输层的tcp协议,提供可靠性策略
而小王是实际参加考试的人,起到的是执行作用
- 对应计算机里网络层的ip协议,它提供一种将数据跨网络从a主机送到b主机的能力
虽然主机已经具有跨网络传输数据的能力,但对于用户来说,需要的不只是能力,能力不代表100%可以做到,而是要可靠的送到
- 所以需要策略和能力相结合,来保证达到用户的需求
ip协议
介绍
ip协议提供的能力 -- 实现跨网络跨主机传输
要想实现,有前提条件:
- 唯一标识每台主机(也就是ip地址的作用) -- 只有保证唯一性,才有可能在众多主机中定位某一台
- 就像学号,身份证号一样
ip分为 -- 私有ip , 公有ip
- 在不同网络的两台主机通信,默认是以公网ip通信
- 如果两台主机在同一个网络内,它们会使用私有ip地址直接进行通信
ip地址
引入
去某个地点,一般不能直接到达
- 假如你要去故宫玩,你必须坐高铁/飞机先到北京,再乘坐北京内部的交通工具前往故宫
- 所以,要去某个地方,一定是目标城市+目标地点才能定位的
类比到ip地址
- ip地址不仅仅是4字节数据
- ip地址=目标网络+目标主机
数据传递过程
如果要实现传递,就必须要经过路由器转发,经过多个子网
- 数据到达b主机前,一定是要先到达b所在子网的
也就是,在宏观上,报文发送是要经过两阶段的
- 先到达目标网络,再交给目标主机
举例(ip地址的作用)
假如有以下场景:
- 在大学里,有各种学院,学院有各自的编号
- 学院内部有自己的群,各学院的学生会主席也都一起拉了群
- 当某个计算机院的学生捡到了一个学生证,上面有学号,他只知道学院编号与自己的不同,但具体是哪个学院不清楚,所以他拍个照片发给了自己院的学生会主席
- 主席是肯定要记住每个学院的编号的,所以他将照片转发给了对应的学院的学生会主席
- 而主席是认识自己院的学生的,于是直接找到了那个学生
如果这个同学没有使用这种方法,而是选择蹲在某个地点,遇到学生就问
- 他找到猴年马月都找不到
- 询问的过程其实就是在查找,查找本质上是在排除,只不过一次只能排除一个人,属于线性遍历
但使用了上面的方式就可以很轻松的找到,为什么呢?
- 因为同样是在排除,他直接找到本院的学生会主席就排除了自己学院内的其他人
- 而主席找到对应院的主席,就是排除了其他院
- 该院主席对照学号找到学生本人,也就排除了本院内的其他人
- 排除的效率提高了,也就可以在报文路由时,提高路由的效率
ip地址就是用这种原理定义的
- 学号就是ip地址
- 学院就是局域网,院内学生就是局域网内的主机
- 学生会主席就是出口路由器
- 主席之间的群叫做公网
- 公网内的每一台路由器,天然都认识里面的其他路由器,就可以精准转发
- 这就可以提高定位主机的效率
ip报头
格式
和tcp协议报头类似,都是20字节定长,并且都有选项,只是一般不用
4位版本号
一般是固定的,ipv4的版本号就是4
ip地址不足的问题
使用ipv4协议的ip地址有2^32=42亿多个
- 但是,在当前全世界中,入网设备肯定是超过了这个数字的
- 所以ip地址已经不够分了
于是发展出了新技术来解决
- NAT
- ipv6
ipv6
- 其实它和ipv4并不兼容,相当于是一个新的协议,所以即使在这里的字段填成6也没啥意义
- 它使用128bit(16字节)来表示ip地址,目前多使用于内网环境
8位服务类型
3位已经启用
- 用于指定数据包的优先级
1位保留字段
- 必须为0
4位TOP(type of service)字段
- 从a主机到b主机有多条路径可以选择,需要结合自身的传输策略来决定路径选择
- 也就是用来指导路由器转发的4个小策略
最小延时
- 也就是用时最短
- 如果设置了该位,表示需要低延迟,适用于需要快速传输的应用,如实时语音和视频通信
最大吞吐量
- 表示单位时间内传输的数据量最大
- 如果设置,表示需要高吞吐量,适用于需要高数据传输速率的应用,如大文件传输和数据备份
最高可靠性
- 也就是可靠性最好,适用于需要确保数据完整性的应用,如电子邮件和文件传输
- 但是网络层不是不保证可靠性吗,这里的可靠从何而来呢?
- 丢包是可能的,且ip协议对丢包无能为力,只能等待上层进行超时重传,它只是会尽量选择丢包概率最小的路径
最小成本
- 耗费资源最少,适用于对传输费用敏感的应用,如非紧急数据传输
这四者互相冲突,只能取其一
- 根据具体的应用场景选择
4位首部长度
可以用来分离报头和有效载荷
- 即使报头长度一定,选项长度是不定的,所以无法确定有效载荷的正确位置
- 和tcp一样,报头+选项的长度=首部长度*4
16位总长度
表示整个报文的长度,可以知道有效载荷的长度
- 16位报文总长度-首部长度=有效载荷长度
这里就和tcp不同了,而和udp类似
- 因为报头保存了总报文长度
- 说明网络层传输时,都是一个一个的,所以这一层的报文叫做数据报
- 而面向字节流的概念,是tcp协议提供给应用层的,并不在ip层体现
8位协议号
用来标识该报文具体交给上层的哪个协议
- 假如自己是发送端,由tcp交给ip,就会填入tcp协议号
- 当传送到对面的网络层时,就会知道要交给传输层的tcp协议
首部校验和
和tcp里的用处一样
- 用于检测传输过程中是否发生了错误
8位生存时间
一个ip报文在转发的过程中(查找路由表,跳转下一个路由器):
- 如果本身主机不可达/网络问题,可能会被一直转发
- 因为它找不到目标主机->形成游离报文->会大量积压(一直存在在网络里,不停被转发,且因集线器的处理而不会信号衰减)
- 所以,需要设置一个报文存活时间(ttl -- time to live) ,记录最大经历路由器的跳数(相当于是一个基准值)
每经过一个路由器,ttl-1
- 当ttl=0时,当前路由器会丢弃这个报文
集线器
路由器中的数据->二进制序列->光电信号->会衰减
- 而集线器会在信号衰减时,自动帮我们进行信号放大,保证长距离传输
提供ip地址和端口号的作用
介绍
创建套接字时,需要提供ip和端口号
- 其中,端口号给tcp协议填充报头
- ip地址给ip协议填充报头 -- 这也就是为什么要把字符串格式的ip地址(点分十进制)->4字节,因为ip报头的ip地址字段是4字节
举例
以唐僧为例:
- 他受唐王所托,从东土大唐而来,要去往西天,向佛祖求取真经
而里面的人物/地点对应到网络中就是:
- 东土大唐 -- src_ip
- 唐太宗 -- src_port(进程)
- 西天 -- dst_ip
- 如来佛祖 -- dst_port(进程)
- 只有提供了以上数据,唐僧才能成功到达并返回
唐僧在其中充当什么角色呢?
- 唐僧只是个跑腿的 -- 报文
- 真经 -- 目标数据
西游记本质上是唐太宗和如来佛祖之间的通信过程