计算机网络基础(下)

计算机网络基础(下)

文章目录

      • 1.ip协议格式
      • 2.ip地址管理
      • 3.路由选择
      • 4.认识以太网
      • 5.其他协议或技术
      • 6.高级IO

1.ip协议格式

计算机网络基础(下)_第1张图片

  • 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.
  • 4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节.
  • 8位服务类型(Type Of Service): 3位优先权字段(已经弃用)、4位TOS字段, 和1位保留字段(必须置为0).
  • 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要.
  • 16位总长度(total length): IP数据报整体占多少个字节.
  • 16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的.
  • 3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话,最后一个分片置为1, 其他是0. 类似于一个结束标记.
  • 13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了).
  • 8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL-= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环
  • 8位协议: 表示上层协议的类型
  • 16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏.
  • 32位源地址和32位目标地址: 表示发送端和接收端.
  • 选项字段(不定长, 最多40字节): 略

2.ip地址管理

什么是ip地址?

  • 无符号32位整数
  • 将32个比特位分成两个部分,一个代表网络号,一个代表主机号
  • 网络号:标识一个子网,子网内可以有多个ip地址,相互连接的两个子网不能有相同的子网号
  • 主机号:在同一个网络号中标识不同的主机,不能拥有相同的主机号

计算机网络基础(下)_第2张图片

每个网段中都有一个网络号和一个主机号

  • 网络号:主机号全为0的ip就是当前子网的主机号
  • 广播号:主机号全为1的ip地址就是当前子网的广播号
  • 特殊ip:
    127.0.0.1:本地回环地址,用于测试本地回环网络协议栈的
    0.0.0.0:代表本地所有网卡地址

CIDR方式精确化划分子网:

  • 引入了子网掩码,用子网掩码标识Ip地址中的网络地址和主机地址
  • 子网掩码的本质:无符号32位的整肃
  • 注意:子网掩码必须是从最高的比特位到低位的某个比特位之前的比特位全部为1,才是有效的子网掩码,如:
    在这里插入图片描述
  • 计算公式:网络号=ip地址&子网掩码

3.路由选择

  • WAN口:连接上级路由器
  • LAN口:用来组建当中路由器的子网
    计算机网络基础(下)_第3张图片

什么是路由查找?

路由查找就是通过目的ip查找去往的下一个结点的路由,怎么去由数据链路层实施
路由过程:路由的过程,就是这样一跳一跳(Hop by Hop)"问路"的过程.所谓“一跳”就是数据链路层中的一个区间.具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间

什么是路由表?

  • route命令:查看主机维护的路由表
    在这里插入图片描述

计算机网络基础(下)_第4张图片

  • 规则:
    1.依次对比每一条路由项:目的IP&子网掩码,得到的结果是一个去往的目标网络/主机地址,先和非网关的路由项进行对比,再和网关路由项对比
    2.求的一个去往的目标网络/主机地址和路由项的Destination进行对比,如果没有对比上,则表示不是往该条路由转发,如果对比上了,则表示是往该条路由转发,如果是网关,则向上级转发设备进行转发,让上级路由器进行再次进行转发
    3.没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发;

4.认识以太网

数据链路层:

1.用于相邻设备传递数据(具体实施),去往哪里是网络层在千的事情(确定方案)
2.因为ip地址会来回变化,所以不能改ip地址完成相邻设备的传输
举个例子:
A主机和B主机需要传递数据,刚刚得到B主机的IP,但是由于B主机断线重连,可能重新分配给她一个IP,时,B主机刚才的lp地址可能被C主机拿走,如果按照IP完成相邻设备的传输,则数据就会发给C主机

以太网:

“以太网” 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等;
以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等;

以太网帧格式:
计算机网络基础(下)_第5张图片

  • 源地址和目的地址:网卡的硬件地址(MAC地址);
  • MAC地址:出厂就确定,且唯一不可修改,用来标识数据链路层中相连的节点
  • 帧协议类型:IP、ARP、RARP;
  • 帧末尾是CRC校验码
  • ip地址与mac地址:
    ip地址描述的是路途总体的起点与终点
    MAC地址描述的是路途中的每一个区间的起点和终点

ARP协议:

  • 作用:在通讯前知道目的主机的ip与端口,但是不知道目的主机的硬件地址,而数据包是先被网卡接收再去处理上层协议的,因此在通讯前必须先获得摸底主机的硬件地址,ARP协议建立了主机ip地址和mac地址的映射关系
    计算机网络基础(下)_第6张图片
  • 工作流程:
    源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”, 并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:F :FF:FF表示广播);
  • 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中;
  • 每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如 果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址

ARP数据报格式:

计算机网络基础(下)_第7张图片

  • 硬件类型指链路层网络类型,1为以太网;
  • 协议类型指要转换的地址类型,0x0800为IP地址;
  • 硬件地址长度对于以太网地址为6字节;
  • 协议地址长度对于和IP地址为4字节;
  • op字段为1表示ARP请求,op字段为2表示ARP应答。

5.其他协议或技术

DNS协议:TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序. 但是IP地址不方便记忆.
于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用hosts文件来描述主机名和IP地址的关系.

DNS是应用层协议
DNS底层使用UDP进行解析
浏览器会缓存DNS结果

NAT协议:地址转换协议

  • 作用:
    私网机器对公网机器发送请求;:将网络数据当中的源ip地址换成公网IP地址
    公网机器对私网机器发送应答:将网络数据当中的目的IP地址换成私网IP地址
    -方式:
    静态NAT :一个私网IP对应一个公网IP
    动态NAT:当需要地址转换时,选择一个空闲的公网IP进行替换

NAPT:动态NAT重载

  • 作用:在进行IP地址转换时,不仅仅将私网IP地址替换成为公网IP,还将传输层的端口也替换掉
  • 好处:一个公网IP+端口就可以服务多个私网IP同时进行转换,这样大大的缓解IP地址枯竭的问题
  • 举例:
    192.168.11.3:8000转换成为42.192.83.143:10000
    192.168.11.4:8001转换成为42.192.83.143:10001
    理论上一个公网ip可以转换为2^16-1个子网ip

总结:

  • NAT转换对于通信双方时透明的,无感知的
  • NAT网关会保存映射关系,应答回来之后,进行再次转换
  • 数据只能先从私网到公网,不能从公网到私网
  • NAPT增加了端口的转换,可以大大的缓解IP地址枯竭的问题
  • 通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开
  • 热备:是指与目标设备共同运转(高可用)

6.高级IO

IO的过程是在内核当中的过程,input&output,IO过程分为两步:等待、拷贝数据

计算机网络基础(下)_第8张图片

阻塞IO:在内核将数据准备好之前, 系统调用会一直等待. 所有的套接字, 默认都是阻塞方式.(最常见的IO模型)

计算机网络基础(下)_第9张图片非阻塞IO: 如果内核还未将数据准备好, 系统调用仍然会直接返回, 并且返回EWOULDBLOCK错误码.

计算机网络基础(下)_第10张图片号驱动IO: 内核将数据准备好的时候, 使用SIGIO信号通知应用程序进行IO操作.

计算机网络基础(下)_第11张图片
IO多路转接: 虽然从流程图上看起来和阻塞IO类似. 实际上最核心在于IO多路转接能够同时等待多个文件
描述符的就绪状态.

计算机网络基础(下)_第12张图片
异步IO: 由内核在数据拷贝完成时, 通知应用程序(而信号驱动是告诉应用程序何时可以开始拷贝数据).

你可能感兴趣的:(计算机网络,网络,网络协议)