传输层和网络层的关系,ip协议+ip地址+ip报头字段介绍(4位TOP字段,8位生存时间(ttl)),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(进程)
- 只有提供了以上数据,唐僧才能成功到达并返回
唐僧在其中充当什么角色呢?
- 唐僧只是个跑腿的 -- 报文
- 真经 -- 目标数据
西游记本质上是唐太宗和如来佛祖之间的通信过程
原文地址:https://blog.csdn.net/m0_74206992/article/details/139610775
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!