目录

一、网络层

1、IP协议

(一)IP协议报头

(二)地址管理

(三)路由选择

二、数据链路层

三、扩展知识:DNS

在上篇和中篇我们介绍了关于应用层和运输层的一些协议和细节,在此篇我们描述关于网络的剩下三层内容~

一、网络层

网络层最核心的协议就是IP协议,下来我们看什么是IP协议~

1、IP协议

主要完成量方面的工作:

①、地址管理

②、路由选择

(一)IP协议报头

(一)4位版本:IP协议的版本号,当前取值只有两种,0100(IPv4),0110(IPv6)。我们只要讨论IPv4。

(二)四位首部长度:IP的报头和TCP报头类似,都是可变的,带有选项。4位取值范围0-15,单位是4字节。如果取值是1111=>15,实际表示的首部长度就是60字节。

(三)TOS:有8位,实质上只有四位是有效的。4位TOS分别表示:最小延时、最大吞吐量、最高可靠性、最小成本。(一个IP数据报头,只能取其中一种,不存在兼得的情况,只得其一)

IP协议能够规划出两点之间一条比较合适的路径,那么根据什么来规划呢?就是通过TOS,四种TOS选项分别规划四种不同路径来进行发送。

(四)16位总长度:16位=>最大长度64k,单个IP数据报最大长度也不能超过64K。

如果要构造一个更长的数据报如何处理?

IP协议自身实现了分包和组包的功能。

(五)下面这三个字段用于分包和组包:

如果整个IP数据报太长了,超过了64k,此时IP协议就会把这个大包拆分成多个小包。

一个IP数据报=IP报头 + IP数据载荷(TCP数据报)

在进行分包的时候,IP数据报不考虑载荷里面的数据是什么,只是单纯的对数据载荷进行了切分。

如何区分这多个IP数据报,是从同一个大的IP数据报拆分而来?

16位标识:多个被拆分出来的IP数据报,里面的这16位标识的值是相同的。

TCP数据报的粘包问题需要规定边界,如何判断在原始IP数据报中的位置顺序?

13位片偏移:通过这13位片偏移,来描述多个包在原始IP数据报中的先后顺序。

片偏移越小,位置越靠前~

如何判断在这个数据报后还有没有别的数据报?

三位标志:三位中只有一位是好使的,0表示还有后续,1表示这是最后一个包。(结束标记)

接收方缓冲区如何对这些数据报进行处理?

缓冲区收到数据报后根据这三个字段进行分配连续空间,到达的数据报会插入到指定的位置。

(六)8位生存时间:表示一个IP数据报,在网络上还能存在多久,单位是 次 。IP数据报初次发送时,会有初始的TTL(常见取值128、64)IP数据报每次经过一个路由器,TTL就会减一。当TTL减到0时,此时转发这个包的路由器就会把这个包丢弃。

(七)8位协议:传输层使用的是什么协议,TCP或者UDP都有不同的取值。

(八)16位首部检验和:用于校验数据是否正确。

(九)32位源IP地址(发送方地址)和32位目的地址(接收端地址)。

对于IPv4来说,一个IP地址本质上是32位的整数。使用“点分十进制”表示这个IP地址

每八位为一体将32位划分为4部分,每个部分一个字节,每个部分的取值为0-255.

(二)地址管理

IP地址是由“点分十进制”构成的数据,同时,我们把IP地址分为两部分,网络号+主机号。

网络号:描述当前的网络信息(局域网标识)

主机号:区分了局域网内部的主机

此处我们要求:同一个局域网内部,主机之间的网络号是相同的,主机号是不能相同的。两个相邻的局域网(同一路由连接的)网络号也是不同的。

以宿舍为例:

问题:前多少bit位是网络号?

引入一个“子网掩码”的概念,通过子网掩码判断表示多少个bit位是网络号,也是“点分十进制”,区别在于:子网掩码的左侧都是1,右侧都是0(不会1  0 混排)左边的这些1就表示这一位是网络号,剩下的右边的0表示哪些是主机号。

例如:255.255.255.0 =》 1111 1111 1111 1111 1111 1111 0000 0000 前24个bit位就是网络号,后8个比特位就是主机号。

一些特殊的IP地址:

①主机号全为0,该IP就表示网络号。

②主机号全为1,该IP就表示“广播地址”,往这个广播地址上发的消息,整个局域网都能收到。

③IP地址以127开头的,该IP表示“环回IP”,表示主机自己,127.0.0.1(环回IP的典型代表)

④IP地址是10开头、192.168开头、172.16-172.31开头,表示该IP地址是一个局域网内部的IP(内网IP),除此之外,剩下的IP称为外网IP。

要求外网IP一定是全网唯一的,每个外网IP都会对应到唯一的一个设备。内网IP在当前局域网内部是惟一的,不同的局域网里,可以有相同的内网IP的设备。

考虑到IPv4协议,使用的IP地址是32位整数(42亿九千万)。现实全世界的设备已经几近超过42亿九千万,让每个设备都有唯一的IP地址,已经不现实了。这个问题如何解决?

方案一:

动态分配IP地址,每个设备连上网的时候,才有IP,不联网的时候就没有IP。

方案二:NAT机制

让多个设备共用一个IP(外网IP)

把网络分成内网(局域网)和外网(广域网),要求外网IP必须表示唯一的设备。内网中的若干个设备,可以共同使用同一个外网IP~

NAT机制把IP分成了内网和外网,也就隐含了一个重要的结论:对于一个外网IP,可以在互联网的任意位置都可以访问;对于一个内网IP,只能在当前局域网内部访问,局域网1的设备,不能使用内网IP访问局域网2的设备。

方案三:IPv6

IPv6在报头使用了一个更长的字段来表示IP地址:16字节,128位

IPv6(给地球上的每粒沙子都分配一个IP地址!!!!)

唯一最大问题:IPv4和IPv6不兼容~对于一个设备来说,支持IPv4和IPv6是两个截然不同的机制。

IPv4升级到IPv6那就牵扯到一个问题-----》

(三)路由选择

路由选择其实就是在规划路径,两个设备之间需要找到一条通道,能够完成传输的过程。

IP协议的路由选择类似于问路,IP数据报中的目的地址,就表示这个包要发到哪里去。

如果数据报中的目的地址,当前路由器认识,就可以直接告诉你路~如果当前路由器不认识,就会大概给出你一个方向,让你走到下一个路由器的时候再进行询问~依次往后,间接意味着距离目的地址越来越近,总会有一个路由器认识这个目的地址,于是就可以直接转发过去~

特别指出:有时,不光遇到了一个认识这个地址的路由器,并且它还认识多条路,此时就可以选择一个更合适的路径。

二、数据链路层

1、数据链路层主要的协议,叫做“以太网”。以太网协议不仅仅规定了数据链路层的内容,也规定了物理层的内容。

已经存在IP地址为何还要有物理地址?

当初网络层协议和数据链路层协议,是各自独自研发出来的~mac地址和IP地址,就有些重复,现状就是当前mac地址和IP地址混合使用,表示的功能不同~IP用来表示一次传出过程中起点和终点。(不考虑NAT的情况,一个IP数据报中源IP和目的IP是固定的)mac用来表示传输过程中,任意两个相邻节点之间的地址(一个以太网数据帧,在每次转发过程中,源mac和目的mac都会改变)

2、说到以太网,不得不说说“以太网数据帧”。

上述就是一些以太网数据帧格式。

以太网数据帧通过6个字节来表示源地址和目的地址。

这就比IPv4地址更长了6W多倍,此时这里的地址就称为“mac地址”。mac地址做到了每个设备都是唯一的(每个网卡都是唯一的),在网卡制作完成出厂的时候就写死的。

对以太网数据帧做如下分析:

类型:类型代表后面搭载的是何种数据。例如是0800,就搭载的是一个IP数据报,0806和8035就是特殊情况~

CRC:帧尾就是一个基于CRC算法的校验和。

MTU:一个以太网数据帧能够承载的数据范围。这个范围取决于硬件设备,不同的硬件设备,对于的数据链路层协议可能又不一样,如果数据报超过了MTU如何处理?IP层分包~~IP层的分包并不是给IP的报头64K准备的,更多的是为了适应数据链路层的MTU。

MSS:TCP中在IP不分包的前提下,最多能够搭载多少载荷。取决于MTU、TCP、IP的报头(报头是可变长度)分包存在开销,MSS对于TCP起到一定的提示效果,当当前传输TCP的数据长度不超过MSS的时候,是属于最高效的状态。

ARP:ARP报文并不是用于传输数据的,只是起到了一个辅助的效果。

路由器这样的设备在转发数据的时候,首先拿到的是一个IP地址(目的地址),通过IP地址决定接下来这个数据怎么走(从哪个端口出,发到哪个设备上),因此就得决定,接下来封装的以太网数据帧,目的mac是啥~~需要根据APR协议,建立起IP->mac这样的映射关系。

三、扩展知识:DNS

DNS是一个应用层协议(域名解析)

IP地址的二进制写法和点分十进制写法对于人类来说都不算很友好,因此就决定使用一串英文单词来表示这个IP地址。这串英文单词就称为域名。域名和IP地址之间,是存在一一对应关系的。

于是乎,建立了专门的机构,负责维护域名和IP的对应关系。比如要申请一个域名,去这个机构报备即可。这个机构维护了一组服务器,把hosts文件存到服务器->域名解析服务器。

考虑到全世界同时访问这个域名解析服务器的话,服务器的压力过于大,因此,全世界各个地区的国家、地区、城市、有各自的网络运营商,这些网络运营商会就进架设域名解析镜像服务器。咱们平时上网的时候,一般就是就近访问了咱们的镜像服务器。

【网络相关面试问题——八股文篇(下)】相关推荐

  1. 【网络相关面试问题——八股文篇(上)】

    TCP/IP五层协议栈 目录 TCP/IP五层协议栈 一.应用层 1.xml 2.json 3.protobuffer 总结: 二.传输层 端口号: UDP: TCP: 1.确认应答(保证可靠传输的核 ...

  2. 网络编程实战之高级篇, 彻底解决面试C10k问题, 高并发服务器, IO多路复用, 同时监视多个IO事件

    目录 一.前言 二.IO多路复用的理解 三.IO多路复用的发展 select poll epoll ​四.C10K服务端代码 五. 总结 一.前言 网络入门篇,从操作系统的层次推开网络大门 网络入门基 ...

  3. linux下常见的网络相关命令

    linux中环境部署.网络排查要用到非常多的命令,掌握一些核心的相关命令非常有必要.下面介绍几个工作和面试中高频提及的网络相关命令. ifconfig ifconfig 是一个用来查看.配置.启用或禁 ...

  4. 【建议收藏】2020年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂(Android高级篇下)...

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. A awesome android expert interview questions a ...

  5. Linux日常运维管理技巧(一)监控系统状态、监控网卡流量、监控IO性能、查看系统进程、查看网络状态、Linux下抓包tcpdump、Linux网络相关、DNS配置

    目录 监控系统状态 监控网卡流量 监控IO性能 查看系统进程 查看网络状态 Linux下抓包 Linux网络相关 监控系统状态 w/uptime查看系统负载 [root@zyshanlinux-01 ...

  6. linux一句话问答(网络无关篇+网络相关篇+程序开发篇+经典图书)

    一句话问答(网络无关篇+网络相关篇+程序开发篇+经典图书) --------------------------目录-网络无关篇-目录-------------------------- 0001 修 ...

  7. 网络相关篇Linux一句话精彩问答--2006/09/08更新--20060908pdf版本下载

    ----------------------------网络相关篇-------------------------- 2001 让apache的默认字符集变为中文(陈绪) vi httpd.conf ...

  8. 【面试 redis】【第十二篇】redis的相关面试问题【完结】

    redis的相关面试问题==完结,详情查看日记 ========================================== redis教程:http://www.redis.net.cn/t ...

  9. DOS下常用网络相关命令解释(华为培训资料)

    DOS下常用网络相关命令解释 深圳市华为技术有限公司 华为技术 第一章引言 1. 概述 在我们的工作之中经常要和网络打交道而win95/98或是NT又是较常用的操 作系统在使用这些操作系统过程中使用频 ...

最新文章

  1. CentOS下一键安装GitLab
  2. Entity Framework Core 2.0的突破性变更
  3. 华硕飞行堡垒开启虚拟化
  4. oracle中关于删除表purge语句和闪回语句的基本使用
  5. [react] react兄弟组件如何通信?
  6. ESXi安全引导如何提升vSphere安全性?
  7. SpringBoot与Docker集成
  8. Linux源码编译nginx
  9. Python的动态特性(类实例增加属性,动态变量类型)
  10. WPF ControlTemplate 仿QQ概念版CheckBox
  11. 华为性格测试挂的原因是什么?这局怎么破?
  12. 从零开始学习java一般需要多长时间?
  13. 为什么创业?创业能给你带来什么?
  14. (转)操作系统实现多线程的几种模式
  15. 功利性地去多读书(一年300本书)
  16. 直线导轨防尘处理方案有哪些?
  17. vue echarts全国地图和区域地图 map
  18. 【C语言】TC2.0环境-带图形库
  19. HALCON 引擎学习一
  20. Druid 管理面板执行时间分布规则

热门文章

  1. Web Service技术的SOAP实现
  2. C#人脸识别入门篇(Step by step 人脸识别)
  3. c++语言字母转换,c++大小写字母转换的思路有几种?
  4. 获取服务器微信头像更改不同规格图片大小
  5. 你爱的那个她,跨年祝福送到了吗?元旦倒计时,雄起~
  6. PMBOK(第六版) PMP笔记——《十》第十章(项目沟通管理)
  7. ESP32/8266 WIFI模块连接Linux云服务器
  8. Python实践-咚咚呛讲师Python进阶教程
  9. 移动端开发vue使用Barcode实现二维码、条形码扫码
  10. eclipse luna java 版本_eclipse luna使用jdk1.8初始化