004、网络基础

发布于:2022-11-09 ⋅ 阅读:(8) ⋅ 点赞:(0) ⋅ 评论:(0)

基础篇

一、TCP/IP网络模型

不同设备之间进程的通信,需要网络协议。网络协议是分层的。

前置知识

含义
TCP 传输控制协议(transmission control protocol),基于字节流的传输层通信协议
IP 网际互联协议(Internet protocol),网络层协议
UDP 用户数据报协议(user datagram protocol),无连接的传输协议
message 报文,网络中交换与数据的数据单元
MAC 局域网地址(media access control address),用来确认网络设备位置的地址

1、应用层

application layer

应用软件为用户提供功能,将数据传递到下层的传输层,不关心数据如何传输。

2、传输层

transport layer

传输层有两个传输协议,TCPUDP

  • TCP:保证数据能够可靠传输给对方。当数据量很大,会将一个数据包分为TCP段,当一个TCP段丢失了,只需要再次发送这一个TCP段。

  • UDP:速度快,不可靠。

3、网络层

(1)概念

Internet layer

实际上的传输数据功能为网络层,网络层最常使用IP协议。

IP协议将传输层的报文作为数据部分,加上IP协议,组成IP报文 。IP报文太大,再次进行分片,得到一个即将发送到网络的IP报文。

(2)寻址

寻址过程中,先找到匹配的网络号,再去找到该网络号下对应的主机。

用IP地址给设备进行编号,IPv4协议,IP地址共32位,分为四段,每段8位。

IP地址分为:

  • 网络号,负责标识该IP地址属于哪个子网。

  • 主机号,同一子网下的不同主机。

(3)路由

两台设备是通过网关、路由器、交换机等众多设备连接起来的,数据包到达一个网络节点,就需要路由算法决定下一个走哪个路径。

路由器寻址就是找到目标地址的子网,将数据包发送给对应的网络。

IP协议的寻址作用是告诉我们下一步该去哪儿,路由则是根据下一步的目的地选择路径。

4、连接层

link layer

在IP头部加上MAC头部,封装成数据帧(data frame)发送到网络上。

因为数据传输是在以太网上进行的,以太网判断网络包的目的地和IP方式不同,需要加入MAC头部被以太网进行解析到目标设备地址。

总结:

  • 网络接口层的传输单位是帧(frame)

  • IP 层的传输单位是包(packet)

  • TCP 层的传输单位是段(segment)

  • HTTP 的传输单位则是消息或报文(message)

但这些名词并没有什么本质的区分,可以统称为数据包。

二、网址到网页的实现过程

当在浏览器地址中输入网址后,到网页显示,期间发生了什么?

前置知识

含义
HTTP 超文本传输协议(hyper text transfer protocol),一个简单的请求-响应协议。
URL 统一资源定位系统(uniform resource locator),因特网的万维网服务程序上用于指定信息位置的表示方法。
DNS 域名系统(domain name system),将域名和IP地址相互映射。

1、HTTP

浏览器解析URL,URL实际上是请求服务器的文件资源,没有路径名就是访问根目录下事先设置的默认文件。

 

对URL进行解析后,确定了web服务器和文件名,根据这些信息生成HTTP请求

2、DNS

在发送HTTP请求前需要查询服务器域名对应的IP地址,通过DNS查询。

(1)基本介绍

www.server.com

在域名中,句点来分割,越靠右位置,层级越高。

  • 根 DNS 服务器(.)

  • 顶级域 DNS 服务器(.com)

  • 权威 DNS 服务器(server.com)

 

客户端只需要找到任何一台DNS服务器,就可以找到根域DNS服务器,最终找到目标服务器。

(2)域名解析流程

3、协议栈

浏览器生成http请求后,调用socket库,委托操作系统中的协议栈工作。

协议栈包括两个部分:

  • 收发数据的TCP/UDP协议

  • 负责控制网络包收发操作的IP协议

4、TCP

HTTP协议是建立在TCP协议之上

三次握手:

在HTTP传输数据之前,需要TCP建立连接,通常称为三次握手建立连接。

  • 客户端主动发起连接

  • 服务端收到连接,返回客户端消息

  • 客户端收到服务端发送过来的消息后,给服务端发送数据,客户端就建立连接了

  • 服务端收到消息后,也建立了连接

三次握手,是保证双方都有发送和接收消息的能力。

5、IP

TCP模块在执行连接、收发、断开等各阶段操作时,都需要委托IP模块将数据包封装成网络包发送给通信对象。

6、MAC

生成IP头部之后,网络包还需要在IP头部的前面加上MAC头部,进行两点传输。

7、网卡

网络包只是一串二进制数字信息,需要通过网卡将数字信息转换成电信号在网线上运输,真正的发送给对方。

8、交换机

数据包准备离开子网,通过交换机到达路由器。

交换机是基于以太网设计的,俗称二层网络设备,交换机的端口不具有 MAC 地址。

9、路由器

路由器是基于 IP 设计的,俗称三层网络设备,路由器的各个端口都具有 MAC 地址和 IP 地址。

在网络包传输的过程中,源 IP 和目标 IP 始终是不会变的,一直变化的是 MAC 地址,因为需要 MAC 地址在以太网内进行两个设备之间的包传输。

数据包通过多个路由器,最终到达目标设备。

总结:

从浏览器地址栏中输入一个网址,到显示网页的流程如下:

  • 首先,浏览器会去解析输入的URL,确定好服务器名称和资源路径;

  • 根据DNS去查找到对应域名的服务器IP地址;

  • 根据服务器IP地址信息和资源路径信息等生成HTTP请求;

  • 该浏览器使用socket库,调用操作系统中的协议栈,将该HTTP请求加上TCP、IP、MAC,封装成数据包;

  • 通过网卡,将该数据包二进制信息转成电信号,通过网线传输给交换机上;

  • 交换机解析电信号,将数据包原封不到的发送给路由器;

  • 经过多次路由后,找到目标设备,目标设备开始层层解析数据包。

三、Linux是如何收发网络包

1、OSI

为了使多种设备能通过网络互相通信,提出OSI(open system interconnection reference model),开放式系统互联通信参考模型。

  • 应用层,负责给应用程序提供统一的接口;

  • 表示层,负责把数据转换成兼容另一个系统能识别的格式;

  • 会话层,负责建立、管理和终止表示层实体之间的通信会话;

  • 传输层,负责端到端的数据传输;

  • 网络层,负责数据的路由、转发、分片;

  • 数据链路层,负责数据的封帧和差错检测,以及 MAC 寻址;

  • 物理层,负责在物理网络中传输数据帧;

OSI只是概念上的分层,并没有具体实现方案。

2、Linux网络协议栈

 

3、Linux接受和发送网络包的流程