基础篇
一、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
传输层有两个传输协议,TCP和UDP。
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)基本介绍
在域名中,句点来分割,越靠右位置,层级越高。
根 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接受和发送网络包的流程