当前位置: 首页 > news >正文

5.网络原理之TCP_IP

1.网络基础

(1)IP地址

定义:

IP地址是指互联网协议地址,又译为网际协议地址,IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。


格式:

IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如:01100100.00000100.00000101.00000110。 通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如: 100.4.5.6。


组成:

IP地址分为两个部分,网络号和主机号

  • 网络号:标识网段,保证相互连接的两个网段具有不同的标识;
  • 主机号:标识主机,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号;

分类:

主机最大连接数减去2,是扣除主机号为全0和全1的特殊IP地址

(2)子网掩码

格式:

子网掩码格式和IP地址一样,也是一个32位的二进制数。其中左边是网络位,用二进制数字"1"表示;

  • 1的数目等于网络位的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度。

作用:

  • 划分子网

如一个B类IP地址:191.100.0.0,按A ~ E类分类来说,网络号二进制数为16位网络号+16位主机号。 假设使用子网掩码 255.255.128.0(即17) 来划分子网,意味着划分子网后,高17位都是网络位/网络号,也就是将原来16位主机号,划分为1位子网号+15位主机号。

  • 网络通信时,子网掩码结合IP地址,可以计算获得网络号及主机号,一般用于判断目的IP与本IP是否为同一个网段。

计算:

  • 将 IP 地址和子网掩码进行“按位与”操作(二进制相同位,与操作,两个都是1结果为1,否则为0),得到的结果就是网络号。
  • 将子网掩码二进制按位取反,再与 IP 地址位与计算,得到的就是主机号。

(3)MAC地址

用于标识网络设备的硬件物理地址。

  • 主机具有一个或多个网卡,路由器具有两个或两个以上网卡;其中每个网卡都有唯一的一个MAC地址。
  • 网络通信,即网络数据传输,本质上是网络硬件设备,将数据发送到网卡上,或从网卡接收数据。 硬件层面,只能基于MAC地址识别网络设备的网络物理地址。
  • MAC地址用来识别数据链路层中相连的节点; 长度为48位,及6个字节。一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19),在网卡出厂时就确定了,不能修改。
  • 虚拟机中MAC地址不是真实的MAC地址,可能会冲突;也有些网卡支持用户配置MAC地址。

(4)IP地址 VS MAC地址

  • IP地址描述的是路途总体的起点和终点;是给人使用的网络逻辑地址。
  • MAC地址描述的是每一跳的起点和终点;是给网络硬件设备使用的网络物理地址。

(5)网络设备及相关技术

  • 集线器:转发所有端口

集线器是工作在物理层的网络设备,发送到集线器的任何数据,都只是简单的将数据复制并转发到其他所有端口;

  • 交换机:MAC地址转换表+转发对应端口

交换机工作在数据链路层,交换机内部会记录并维护一张MAC****地址转换表

MAC地址转换表主要记录MAC地址与端口之间的映射。主机连接到交换机,及主机发送数据的时候,交换机可以学习并记录该主机MAC地址与端口信息。 交换机接收到数据报以后,在MAC地址转换表中,通过目的MAC查找到对应的端口,则目的主机为该端口相连接的主机。只需要将数据报转发到对应端口上即可;

  • 主机&路由器:ARP缓存表+ARP寻址

ARP是一个介于数据链路层和网络层之间的协议;ARP协议建立了IP地址与MAC地址的映射关系。

在数据链路层,寻找下一跳设备MAC地址的过程,称为ARP寻址:主机和路由器中都保存了一张ARP缓存表:通过IP地址可以找到对应的MAC地址;根据下一跳设备的IP地址,在ARP缓存表中能找到对应的MAC地址,则可以设置目的MAC并发送数据报;如果找不到,则发送ARP广播数据报:目的MAC为广播地址,询问下一跳设备的MAC地址;

  • 路由器:路由+NAPT

路由器作为网关,可以划分公网和局域网,某些路由器还可以将局域网划分为多个子网;

路由,即在复杂的网络结构中,找出一条通往终点的路线;

(6)冲突域

主机之间通过网络设备(集线器、交换机)的物理端口、网线相连时,两个主机在同一时刻同时发送数

据报,如果存在冲突,则该网络范围为一个冲突域

交换机可以分割冲突域,分割后,一个端口为一个冲突域

(7)广播域

广播是指某个网络中的主机同时向网络中其它所有主机发送数据(IP、MAC地址设置为广播地址),这个数据所能传播到的范围即为广播域


集线器接收到广播数据报,仍是简单的复制、转发到其他所有端口,所以集线器的所有端口为一个广播域。

交换机接收到广播数据报,会转发到其他所有端口;而路由器可以隔离广播域

2.网络数据传输流程

(1)局域网传输流程:集线器

使用集线器网络互联的情况下,发送端主机发送数据包时,需要先从上到下封装数据报。但封装时,目

的MAC可能并不知道,需要先进行ARP寻址:

  • 发送端在本机ARP缓存表中,根据目的IP查找对应的MAC地址
  • 如果找到,则可以在数据链路层以太网帧头中,设置目的MAC并发送数据包
  • 如果没有找到,需要先发送ARP广播请求,让目的主机告诉自己,目的MAC是多少
  • 发送端更新本机ARP缓存表:保存目的IP与目的MAC的映射
  • 有了目的MAC,就可以按照第(2)个步骤发送数据了。

(2)局域网传输流程:交换机

交换机保存有MAC地址转换表,记录MAC地址和端口的映射关系

  • 读取数据,可以知道源MAC的主机是连接哪个端口
  • 通过目的MAC查找对应的端口
  • 如果找到,直接将数据报转发到对应的端口
  • 如果找不到,将数据报广播到所有端口,目的主机返回响应,即可记录目的主机MAC与端口

3.应用层重点协议

(1)DNS

DNS,域名系统,是一整套从域名映射到IP的系统。

TCP/IP中使用IP地址来确定网络上的一台主机,但是IP地址不方便记忆,且不能表达地址组织信息,于是人们发明了域名,并通过域名系统来映射域名和IP地址。

  • 域名是一个字符串,如 www.baidu.com
  • 域名系统为一个树形结构的系统,包含多个根节点。其中:根节点即为根域名服务器,子节点主要由各级DNS服务器,或DNS缓存构成。
  • 网络通信发送数据时,如果使用目的主机的域名,需要先通过域名解析查找到对应的IP地址:
  • 域名解析的过程:发送端主机作为域名系统树形结构的一个子节点,通过域名 信息,从下到上查找对应IP地址的过程。如果到根节点(根域名服务器)还找不到,即找不到该主机。
  • 域名解析使用DNS协议来传输数据。DNS协议是应用层协议,基于传输层UDP或TCP协议来实现。

(2)NAT

NAT技术当前解决IP地址不够用的主要手段,是路由器的一个重要功能;

  • NAT能够将私有IP对外通信时转为全局IP,也就是就是一种将私有IP和全局IP相互转化的技术方法:
  • 很多学校,家庭,公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局IP;
  • 全局IP要求唯一,但是私有IP不需要;在不同的局域网中出现相同的私有IP是完全不影响的;

由于NAT依赖这个转换表,所以有诸多限制:

无法从NAT外部向内部服务器建立连接; 转换表的生成和销毁都需要额外开销; 通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开;

4.传输层重点协议

4.1TCP协议

TCP,传输控制协议,要对数据的传输进行一个详细的控制。

(1)协议段格式

(2)TCP原理

确认应答机制

TCP将每个字节的数据都进行了编号。即为序列号。每一个ACK都带有对应的确认序列号,意思是告诉发送者,我已经收到了哪些数据;下一次你从哪里开始发。

超时重传机制

主机A发送数据给B之后,可能因为网络拥堵等原因,数据无法到达主机B;如果主机A在一个特定时间间隔内没有收到B发来的确认应答,就会进行重发;但是,主机A未收到B发来的确认应答,也可能是因为ACK丢失了;

连接管理机制

TCP要经过三次握手建立连接,四次挥手断开连接

滑动窗口机制

一发一收的方式性能较低,那么我们一次发送多条数据,就可以大大的提高性能

流量控制

接收端处理数据的速度是有限的。如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发送端继续发送,就会造成丢包,继而引起丢包重传等等一系列连锁反应;因此TCP支持根据接收端的处理能力,来决定发送端的发送速度。这个机制就叫做流量控制

  • 接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 “窗口大小” 字段,通过ACK端通知发送端;
  • 窗口大小字段越大,说明网络的吞吐量越高;
  • 接收端一旦发现自己的缓冲区快满了,就会将窗口大小设置成一个更小的值通知给发送端; 发送端接受到这个窗口之后,就会减慢自己的发送速度; 如果接收端缓冲区满了,就会将窗口置为0;这时发送方不再发送数据,但是需要定期发送一 个窗口探测数据段,使接收端把窗口大小告诉发送端。

拥塞控制

TCP引入 慢启动 机制,先发少量的数据,探探路,摸清当前的网络拥堵状态,再决定按照多大的速度传输数据;

此处引入一个概念程为拥塞窗口

  • 发送开始的时候,定义拥塞窗口大小为1;
  • 每次收到一个ACK应答,拥塞窗口加1;
  • 每次发送数据包的时候,将拥塞窗口和接收端主机反馈的窗口大小做比较,取较小的值作为实际发送的窗口;

像上面这样的拥塞窗口增长速度,是指数级别的。“慢启动” 只是指初使时慢,但是增长速度非常快;为了不增长的那么快,因此不能使拥塞窗口单纯的加倍;此处引入一个叫做慢启动的阈值,当拥塞窗口超过这个阈值的时候,不再按照指数方式增长,而是按照线性方式增长

延迟应答

如果接收数据的主机立刻返回ACK应答,这时候返回的窗口可能比较小。

假设接收端缓冲区为1M。一次收到了500K的数据;如果立刻应答,返回的窗口就是500K; 但实际上可能处理端处理的速度很快,10ms之内就把500K数据从缓冲区消费掉了; 在这种情况下,接收端处理还远没有达到自己的极限,即使窗口再放大一些,也能处理过来; 如果接收端稍微等一会再应答,比如等待200ms再应答,那么这个时候返回的窗口大小就是1M;

(3)粘包问题

首先要明确,粘包问题中的 “包” ,是指的应用层的数据包。

  • 在TCP的协议头中,没有如同UDP一样的 “报文长度” 这样的字段,但是有一个序号这样的字段。
  • 站在传输层的角度,TCP是一个一个报文过来的。按照序号排好序放在缓冲区中。
  • 站在应用层的角度,看到的只是一串连续的字节数据。那么应用程序看到了这么一连串的字节数据,就不知道从哪个部分开始到哪个部分,是一个完整的应用层数据包。

如何避免粘包问题呢?归根结底就是一句话,明确两个包之间的边界

  • 对于定长的包,保证每次都按固定大小读取即可;例如上面的Request结构,是固定大小的,那么就从缓冲区从头开始按sizeof(Request)依次读取即可;
  • 对于变长的包,可以在包头的位置,约定一个包总长度的字段,从而就知道了包的结束位置;
  • 对于变长的包,还可以在包和包之间使用明确的分隔符

(4)TCP异常情况

  • 进程终止:进程终止会释放文件描述符,仍然可以发送FIN。和正常关闭没有什么区别。
  • 机器重启:和进程终止的情况相同。
  • 机器掉电/网线断开:接收端认为连接还在,一旦接收端有写入操作,接收端发现连接已经不在了,就会 进行reset。即使没有写入操作,TCP自己也内置了一个保活定时器,会定期询问对方是否还在。如果对方不在,也会把连接释放。

4.2UDP协议

(1)格式

(2)特点

  • 无连接 :知道对端的IP和端口号就直接进行传输,不需要建立连接;
  • 不可靠: 没有任何安全机制,发送端发送数据报以后,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息;
  • 面向数据报 :应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并;
  • 缓冲区 :UDP只有接收缓冲区,没有发送缓冲区:
  • 大小受限 :UDP协议首部中有一个16位的最大长度。也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部)。

(3)基于UDP的应用层协议

  • NFS:网络文件系统
  • TFTP:简单文件传输协议
  • DHCP:动态主机配置协议
  • BOOTP:启动协议(用于无盘设备启动)
  • DNS:域名解析协议

5.网络层重点协议

IP协议

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

6.数据链路层重点协议

6.1以太网

(1)定义

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

(2)以太网帧格式

  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的;
  • 帧协议类型字段有三种值,分别对应IP、ARP、RARP;
  • 帧末尾是CRC校验码

6.2MTU

MTU相当于发快递时对包裹尺寸的限制。这个限制是不同的数据链路对应的物理层,产生的限制。

  • 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;
  • 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
  • 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片;
  • 不同的数据链路层标准的MTU是不同的;

6.3ARP协议

ARP协议建立了主机 IP地址 和 MAC地址 的映射关系。

  • 源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求广播到本地网段;
  • 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中;
  • 每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间,如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址
http://www.dtcms.com/a/618760.html

相关文章:

  • 全球访问量top100网站建设银行官方网站-云服务
  • 小梦音乐下载 1.0.5 | 提供三条音源,支持多种音质选择和批量下载的音乐下载工具
  • GIS:揭开你神秘的面纱
  • 怎么做网站小图标有的网站域名解析错误
  • 安徽省网站肥建设网站湖北望新建设有限公司网站
  • 机器学习周报二十二
  • 计算二叉树的深度 | C语言
  • 什么网站算是h5做的网络推广企划
  • 传导案例:某医疗仪器传导骚扰整改案例
  • 做跨境电商有没推荐的网站新闻稿件代发平台
  • C++篇(18)类型转换与IO库
  • 海口中小企业网站制作3D特效做首页的网站
  • 专业做家政网站( )是网站可以提供给用户的价值
  • 网站活动专题页面学校网站建设制作方案
  • 【C++】从理论到实践:类和对象完全指南(上)
  • 网站不排名一切等于零做网站推广维护需要学些什么
  • 公考面试资源合集
  • 网站建设 预付款自己怎么做软件
  • 41、C#什么是单例设计模式
  • kafka单机版安装
  • 网站开发要求有哪些大沥南庄网站建设
  • 我在高职教STM32(新12)——STM32中断概览
  • OceanBase 内存数据转储、合并说明
  • 网站开发设计制作公司微信软文案例
  • 下载安装pycharm 并通过pycahrm来驱动Anaconda来运行Python程序
  • dw网站建设讨论总结wordpress的程序文件
  • Kratos微服务框架下实现CQRS架构模式
  • openGauss实战:Python开发与AI向量数据库应用
  • 第43节:集群渲染:分治策略处理超大规模场景
  • php的数组和python的列表 -- 横向对比学习