网络是怎么连接的-阅读小结

215 阅读8分钟

Chapter 1 -- 浏览器生成消息

通信流程概览

1.用户在客户端的浏览器应用程序上输入访问地址(URL);

针对不同的请求对象,所采用的的协议是不同,Web服务器: HTTP;FTP服务器:FTP

2.浏览器解析URL生成HTTP请求消息, URI + 请求方法 + 一些请求参数;

一个请求消息只能有一个URI,当页面加载时,首先通过请求拿到html文件,然后按照标签中指定的文件名再次向服务器请求拿到图片/视频/音频等资源。

3.DNS解析域名得到访问地址IP

浏览器将HTTP请求消息(雏形)传入客户端操作系统的Socket库中的DNS程序;

DNS程序将寻找最近的DNS服务器,通过UDP协议向其发送请求,DSN服务器通过域名机制逐层查找;

DNS服务器会从域名与IP地址的对照表中查找相关信息,成功会返回访问地址的IP;

4.数据收发

客户端操作系统获得IP后,通过TCP/IP协议栈,客户端和服务端创建套接字,然后建立套接字连接;

三个重要参数:描述符 、服务器IP地址、端口号

收发数据(通信),当服务端请求全部执行完毕,断开连接(双方都有断开连接的权利)。

Chapter 2 -- 用电信号传输TCP/IP数据

(1 封私信 / 1 条消息) 闪客sun - 知乎 (zhihu.com)

1.套接字的实体是什么?属于(TCP头部)

通信控制信息 = 通信对象IP地址+端口号+通信操作的进行状态

控制信息的种类包括?

第一类是客户端和服务器相互联络时交换的控制信息

第二类是保存在套接字中,用来控制协议栈操作的信息

2.将HTTP请求交给TCP协议栈干了什么

TCP协议栈给数据包加上TCP头部(通信控制信息),并且对于较大的数据包将会进行划分并且每一段都会加上TCP头部。

3.通信过程的连接-收发-断开如何保证数据传输可靠?

通过序号和ACK号确认接收方是否收到网络包

image-20220405203419112

4 . IP 模块干了什么?

发送:添加IP头部(包含IP地址)和通过APR查询MAC地址生成MAC头部(包含MAC地址)

接收:确认接收方IP是否为本机IP,不是则通过ICMP消息告知对方。

5.网卡干了什么?

发送:网卡驱动从IP模块获取包后,将数据包放入其缓冲区,MAC模块从缓冲区取出包,开头加上报头和帧定界符,末尾加上FSC(帧校验序列),网卡的HPY模块将数字信号转换成模拟信号发送出去

接收:上方的逆过程,加一项检查FCS。

Chapter 3 -- 从网线到设备(重点)

1.信号从流出网卡进入网线的过程实现?

1.MAC模块将MAC帧传送给PHY(MUA)模块,PHY模块将并行数据转化成串行数据,再按照物理层编码规则将数字信号转换成模拟信号

2.PHY模块实现CSMA/CD(多点接入载波监听/冲突检测)的部分功能,避免数据在传输过程中碰撞。

2.传输介质为什么使用双绞线?

避免在传输过程中受到电磁波干扰,抵消内源性和外源性噪声。

3.集线器

在传输过程中就是将收到的包原封不动的广播给连接到集线器的所有设备, 这些设备通过MAC头部判断数据是否是发给自己的,不是就丢掉。

4.交换机

交换机具有多个端口,每个端口就一个网卡(端口无MAC地址),端口收到包后丢到缓冲区,之后就是对照MAC表判断通过哪个端口转发

一些交换机的特殊操作

1.禁止源端口返回数据包,避免死循环

2.查询不到进行广播(除了源端口),接收方会判断是否是自己的。

3.交换机是可以同时转发多个包的

5.路由器

路由器同交换机一样有许多端口(无线、有线、以太网、FTTH、ADSL等多种通信技术),但是与路由器端口不同(具有MAC地址和IP地址)。

当路由器收到数据包的时候,先会检测包是否是自己的,是则会和路由表中的目标地址进行匹配,在匹配地址的过程中,路由器需要知道目标IP的网络号部分的比特数即可。

image-20220407001025587

所以当路由聚合后,路由器应修改对应的端口IP和掩码,并且这并不会对应从这个端口进出的数据包产生影响。

传输问题解决?

1.当多个端口都匹配成功时如何进行选择?

1.寻找网络号比特数最长的

2.选择跃点计数最小的

这也就是常说的最长匹配原则

2.当路由器在路由表找不到匹配记录时,该发给谁?

路由器和交换器连接的数据规模是不同的,不能通过广播去找,这个时候就应该选择默认路由也称网关(这一行子网掩码为0.0.0.0)

3.数据包会不会不断地传递下去陷入死循环?

为了解决这个问题,IP头部有个TTL(Time to Live 生存时间),每经过一个路由器就会减1,到0就会被丢弃。

4.不同的端口支持的最大包长度不同,如何解决?

image-20220407003129793

通过IP协议的分片功能对包进行拆分。当小于最大长度时,看标志查询字段是否可以分片,可以就拆;不行就丢,通过ICMP消息通知发送方。

小结

image-20220405232635079

从各个节点的视角来看

电脑视角:

  • 首先我要知道我的 IP 以及对方的 IP
  • 通过子网掩码判断我们是否在同一个子网
  • 在同一个子网就通过 ARP 获取对方 MAC 地址直接扔出去
  • 不在同一个子网就通过 arp 获取默认网关的 MAC 地址直接扔出去

交换机视角:

  • 我收到的数据包必须有目标 MAC 地址
  • 通过 MAC 地址表查映射关系
  • 查到了就按照映射关系从我的指定端口发出去
  • 查不到就所有端口都发出去

路由器视角:

  • 我收到的数据包必须有目标 IP 地址
  • 通过路由表查映射关系
  • 查到了就按照映射关系从我的指定端口发出去(不在任何一个子网范围,走其路由器的默认网关也是查到了)
  • 查不到则返回一个路由不可达的数据包

如果你嗅觉足够敏锐,你应该可以感受到下面这句话:

网络层(IP协议)本身没有传输包的功能,包的实际传输是委托给数据链路层(以太网中的交换机)来实现的。

涉及到的三张表分别是

  • 交换机中有 MAC 地址表用于映射 MAC 地址和它的端口
  • 路由器中有路由表用于映射 IP 地址(段)和它的端口
  • 电脑和路由器中都有 ARP 缓存表用于缓存 IP 和 MAC 地址的映射关系

这三张表是怎么来的

  • MAC 地址表是通过以太网内各节点之间不断通过交换机通信,不断完善起来的。
  • 路由表是各种路由算法 + 人工配置逐步完善起来的。
  • ARP 缓存表是不断通过 ARP 协议的请求(广播)逐步完善起来的。

Chapter5 -- 服务器端在局域网中的玄机

1.防火墙的结构和原理

只允许发往特定服务器中特定应用程序的包通过

包过滤实现:主要是对网络包的头部用于控制通信操作的控制信息(MAC、IP、端口等)进行检查实现过滤机制

2.负载均衡

原理:采用多台服务器分担访问

问题:1.智能跳过故障服务器,2.跨页面操作

实现:

1.轮询分配 在DNS服务器配置多个相同名称的记录 无法解决问题

2.负载均衡器 代替Web服务器注册到DNS

3.缓存服务器分担负载

原理:代替Web服务器注册到DNS,当客户端访问是,检查请求数据是否在缓存中存在。

4.缓存服务器部署的位置不同会有效果

最优的处理方式:由相关运营商布置缓存服务器。