网络层

IP协议

首先通过认识IP协议报头来了解IP协议

4位版本

IP协议的版本号,目前只有两个取值,4(0100)和6(0110)

4位首部长度

表示IP首部长度。最大数值是15(1111),单位是4个字节,所以IP首部最大长度为60字节。

8位服务类型(TOS)

3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0).所以说虽然是8位,但是其实只有4位是有效的

4位TOS分别表示为:最小延迟,最大吞吐量,最高可靠性,最小成本.(同一时刻,只能存在一种状态)

ip协议是规划两点之间的一条比较合适的路径,也就是选择上面四种状态之一尽心规划.

16位总长度

16位表示最大长度为64k,所以单个IP数据报最大的长度不能超过64k

如果需要一个更长的ip数据报(比如搭载的数据载荷就超过了64k),IP协议自己就实现了分包和组包这样的操作.

16位标识+3位标志+13位片偏移

因为这三部分共同完成分包和组包的操作,所以这里放在一起进行总结

拆分之后,接收方如何知道这几个小包是同一个数据拆分的呢?

此时就到了16位标识出场:所有从同一个数据拆分出来的小包,他们的16位标识都是一样的

此时接收方知道标识一样的小包是同一个数据拆分出来的小包,可是接收方面对数据仍然会手足无措,不知道这些小包应该按照什么样的顺序进行组合.

此时13位片偏移出场,描述这些包到底谁先谁后,需要注意的是,片偏移并不是单纯的表示1,2,3,4 而是基于片偏移计算出了每个包之间应该空出多少空间.(放置后发先至的情况.

此时数据拆分成三个包,因为网络原因,导致片偏移为2的数据报最后到达,但是因为片偏移的存在,最后仍然可以组合成一个完整的数据报,和发送方的数据报一模一样.

但是组合完成之后,接受方如何可以得知此时的ip数据报已经全部接收了呢?

此时3位标志出场,除了最后一个包,其他的包取值都为0,最后一个取值为1.

最后,接收方接受到整个ip数据报,皆大欢喜,可喜可贺.

8位生存时间(TTL)

表示一个ip数据报可以在网络中生存的时间,此时的单位不会是s或ms,而是转发的次数.IP数据报被发送的时候,会有一个初始的TTL(常见的值为128或64),IP数据报每次经过一个路由器,TTL就会-1,如果TTL减到了0,此时收到这个包的路由器就会将这个包丢弃.

因为有些包里面的IP地址,也许永远也到不了,这种包不可能在网络中永无休止的转发(浪费资源),正常的IP数据报都会在TTL内到达.

8位协议

传输层中使用的协议.比如TCP或UDP

16位首部校验和

用来校验数据是否正确

32位源IP地址+32位目的IP地址

源IP地址表示发件人地址,目的IP地址表示收件人地址.对于IPv4来说,一个IP地址本质上是32位的整数,通常用点分十进制表示这个ip地址,3个点把32位整数分成4部分,每部分1字节,每个部分的取值为0-255

地址管理

ip地址是一个点分十进制构成的数据,咋们把ip地址分成两部分:网络号和主机号

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

主机号:区别了局域网内的主机

同一个局域网中,主机之间的网络号是相同的,主机号不能相同,

两个相邻的局域网(同一个路由器相连),网络号也是不同的

子网掩码

子网掩码格式和IP地址一样,也是一个32位的二进制数。其中左边是网络位,用二进制数字“1”表示,1的数目等于网络位的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度。

此时的自子网掩码换算成二进制位1111 1111 1111 1111 1111 1111 0000 0000 前面为1的就表示为网络号,后面为0表示主机号

特殊的IP地址

将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网;

将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;

127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

IP地址是10开头,192.168开头 172.12 —172.31开头,表示该IP地址是一个局域网内部的IP(内网IP),除此之外,剩下的IP成为外网(直接在广域网使用的IP)

要求外网IP是唯一的,每一个外网Ip都对应到唯一的设备内网IP只是当前局域网中是唯一的,不同的局域网中可以有相同的内网IP的设备

目前的IPv4协议使用的IP地址是32位整数,32位表示的范围42亿9千万,如果给世界上每个设备分一个唯一的IP,意味着世界上的设备不能超过42亿9千万,但随着互联网的兴起,这是不可能的

所以需要解决ip地址不够的问题

  1. 动态分配:让每个设备连上网的时候,才有ip,不联网的时候就没有ip(这个ip此时给别人使用)-

这种方案不能从根本解决问题,设备没有减少,ip地址没有增加,治标不治本

  1. NAT机制:让多个设备共用一个IP(外网IP)

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

此时每个外网IP都可以表示几千个甚至上万个设备,这个时候IP地址的压力就缓解了很多.

上图中的主机1如果访问一个网站,就通过运营商的外网IP去访问,但是这样会出现一个问题

如果主机1和主机2同时访问一个网站,那么网站就看到两个连接,这两个连接的IP地址都来自于同一个外网,此时网站如何区分两个主机(五元组)

不同的主机,就有不同的端口号,既然ip地址一样,那么就跟据端口号进行区分两个主机.

NAT机制将IP分为内网和外网,也隐藏一个重要的结论

对于一个外网IP,可以在网络中的任意位置访问到

对于一个内网IP,只能在当前局域网内部访问,局域网1的设备,不能通过内网IP访问到局域网2的设备

NAT机制也有极限:端口号的个数 (65535) 如果一个局域网的连接数超过65525,此时的NAT不一定好使,端口号不够用了

so,NAT只是缓解,但不能从根本解决

  1. IPv6:在报头中使用了一个更长的的字段来表示IP地址

16个字节 128位

从根本上解决了ip地址不够用的问题

但是IPv6和IPv4不兼容

每一个数字都是一个16进制的数字,每个冒号分割了2字节

路由选择

路由选择,就是规划路线,两个设备之间要找出一条通道,能够完成传输的过程

IP数据报中的目的地址,表示了这个包要发去哪里,这个目的地址,如果当前路由器直接认识,就告诉IP数据报具体的路线。

如果当前路由器不认识,就会告诉一个大概的方向,让数据报走到下一个路由器的时候再访问,依次往后走,其实就是再距离目标越来越近,这个时候就总会遇到认识这个地址的路由器,就可以具体的转发过去。

路由器内部维护了一个数据结构:路由表

路由表里面就记录了一些网段信息(网络号)(目的IP就在这些网络号中匹配)以及每个网络号对应的网络接口(网络就扣其实就对应到路由器里面具体的接口)

数据链路层

主要的协议:以太网

以太网数据帧

目的地址+源地址

通过6个字节来表示源地址和目的地址,这个比IPv4更长,这里的地址称为mac地址

mac地址做到了每个网卡都是唯一的(网卡出场的时候就写死了),所以我们可以通过mac地址确定唯一的主机

IP地址和mac地址的功能

IP用来表示一个传输过程中的起点和终点,(不考虑NAT的情况,一个IP数据报中的源IP和目的IP是固定的)

mac用来表示传输过程中,任意两个相邻点之间的地址(一个以太网帧,在每次转发过程中,源mac和目的mac都会改变

类型

类型不同表示后面的数据搭载不同的值

如果是0800 就是一个完整的IP数据报

如果是0806,那就是一个ARP请求

如果是8035,那就是一个RARP请求

CRC

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

循环冗余算法和(把数据的每个字节依次进行累加(溢出就溢出了))

图中的46-1500 为MTU

MTU 表示一个以太网数据帧能承载的数据范围 范围取决于硬件设备

其他硬件设备,对应的数据链路层协议,可能不一样,MTU也不一样

如果数据报超过了MTU怎么办

IP层的分包操作 ip层的分包,其实不是给ip的报头64k准备的,更多的是为了适应数据链路层的MTU

MTU对IP协议的影响

由于数据链路层MTU的限制,对于较大的IP数据包要进行分包。

  • 将较大的IP包分成多个小包,并给每个小包打上标签;
  • 每个小包IP协议头的 16位标识(id) 都是相同的;
  • 每个小包的IP协议头的3位标志字段中,第2位置为0,表示允许分片,第3位来表示结束标记(当前是否是最后一个小包,是的话置为1,否则置为0);
  • 到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层;
  • 一旦这些小包中任意一个小包丢失,接收端的重组就会失败。但是IP层不会负责重新传输数据;

MTU对UDP协议的影响

让我们回顾一下UDP协议:

  • 一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)),那么就会在网络层分成多个IP数据报。
  • 这多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败。那么这就意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了。

MTU对于TCP协议的影响

让我们再回顾一下TCP协议:

  • TCP的一个数据报也不能无限大,还是受制于MTU。TCP的单个数据报的最大消息长度,称为MSS(Max Segment Size);
  • TCP在建立连接的过程中,通信双方会进行MSS协商。
  • 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)。
  • 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值。
  • 然后双方得知对方的MSS值之后,选择较小的作为最终MSS。
  • MSS的值就是在TCP首部的40字节变长选项中(kind=2);

MSS:TCP中在IP不分包的前提下,最多搭载多少载荷

MTU也取决于TCP和IP的报头

分包的开销还是有,MSS对于TCP起到一个提示效果.如果当前传输TCP的数据不超过MSS的时候,是属于最高效的状态

ARP报文

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

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

当设备启动的时候,就会向局域网中,广播ARP报文,每个设备收到只有,都会给出一个应答,应答的信息中包含了自己的IP和mac,发起广播的一方,就可以根据这些回应建立起映射表

IP协议的详细知识总结相关推荐

  1. TCP/IP协议四层模型知识

    OSI七层和TCP/IP四层的关系 OSI七层模型是理论上的分层方式,而四层模型是实践过程中的分层模型. OSI七层模型ISO(国际标准化组织)提出的一套理论性的网络标准化协议,可以把它看成一本教科书 ...

  2. 计算机网络 ip协议是,计算机网络知识:TCP/IP协议

    一.什么是TCP/IP? TCP协议和IP协议指两个用在Internet上的网络协议(或数据传输的方法).它们分别是传输控制协议和互连网协议.这两个协议属于众多的TCP/IP 协议组中的一部分. TC ...

  3. IP协议首部详细分析

    IP协议是我们学习网络协议最开始,也是最基础的协议.那么今天我们主要介绍一下有关于IP协议头格式的基本状态.那么就让我们具体看以下有关于IP协议头格式和Sniiffer Portable的IP头的相关 ...

  4. TCP/IP(二):IP协议

    IP协议处于OSI参考模型的第三层--网络层,网络层的主要作用是实现终端节点间的通信.IP协议是网络层的一个重要协议,网络层中还有ARP(获取MAC地址)和ICMP协议(数据发送异常通知) 数据链路层 ...

  5. TCP/IP协议三次握手与四次握手流程解析

    原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议三次握手与四次握手流程解析 TCP/IP协议的详细信息参看<TCP/IP协议详 ...

  6. Linux TCP/IP网络协议栈:IP协议源码分析

    目录 IP协议简介 IP头部 IP数据包的发送 IP数据包的接收 https://mp.weixin.qq.com/s/8WNcTxtD4DBcNtcrR8nz4Q IP协议 是网络的最重要部分,毫不 ...

  7. tcp报文格式_腾讯面试中的TCP/IP协议简述+经典面试题

    面试题有福利 TCP/IP协议简述+ TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器, ...

  8. 通俗理解TCP/IP协议三次握手与四次分手流程

    三次握手流程 客户端发个请求"开门呐,我要进来"给服务器 服务器发个"进来吧,我去给你开门"给客户端 客户端有很客气的发个"谢谢,我要进来了" ...

  9. TCP/IP协议知识梳理

    TCP/IP协议知识梳理 一. 计算机网络体系结构分层 二. TCP/IP 基础 1. TCP/IP 的具体含义 2. 数据包 3. 数据处理流程 ① 应用程序处理 ② TCP 模块的处理 ③ IP ...

  10. TCP/IP 协议——知识集锦

    精通 TCP/IP,熟练使用 Socket 进行网路编程. 这句话在招聘要求里经常见,但是平时压根用不到,虽然笔者用Unity3D 如果做联网需要用到Socket通信,奈何我还没做过网络游戏 :( 这 ...

最新文章

  1. linux一条命令添加用户并设置密码,linux中如何通过命令行来添加用户并设置密码...
  2. 万物根源-一分钟教你发布npm包
  3. 计算机工程类高级职称,2019年工程类中高级职称都有哪些专业?
  4. replace 替换字符串
  5. python内容限制_Python 限制线程的最大数量的方法(Semaphore)
  6. 计算机语言无限循环,求大神帮我看看为什么我的子程序无限循环无法使用F8停止...
  7. CSS和HTML面试题
  8. MyBatis多参数传递之混合方式——MyBatis学习笔记之十五
  9. Android BlueDroid(一):BlueDroid概述
  10. 三菱a系列motion软体_三菱PLC全系列编程电缆制作方法
  11. 网易常用镜像及使用方式
  12. 项目范围管理:范围定义
  13. iPhone5/iPad4越狱后10.3.3降级8.4.1详细教程
  14. 电子元器件图片、名称、符号图形对照
  15. 软件测试背景对渗透测试有用吗,软件测试与渗透测试那个工作有前途
  16. 华为机试4.27:公式修正
  17. 华为手机便签有扫描的功能么
  18. 网页版手游怎么选服务器,吃鸡怎么看自己选的哪个服务器 | 手游网游页游攻略大全...
  19. 双鱼林 android 服务器,双鱼林安卓Android代码生成器下载_双鱼林安卓Android代码生成器官方下载-太平洋下载中心...
  20. 服务器端包含SSI(Server Side Include)简介

热门文章

  1. maven parent 覆盖_Maven 最佳实践之 · 一个好的 parent 依赖基础
  2. 词干提取(stemming)和词形还原(lemmatization)比较
  3. F1摩托艇大赛(Shawn报道)
  4. 前端实习周记07(毕业论文开题了。。。欧耶。。。欧耶。。。耶。。。)
  5. 转: 诺贝尔奖得主:东亚教育浪费了太多生命
  6. 95-后程序员一出校门就拿年薪-30多万?,2021Android面试笔试总结
  7. Pr 入门教程如何倾斜移位效果?
  8. Win10系统怎么注销微软账户
  9. Far away from home
  10. 北京精雕现状_北京精雕科技有限公司怎么样?