计算机网络基础篇
TCP/IP网络模型
TCP/IP网络模型的作用就是给数据包进行层层封装,帮助数据包能够正确的找到对应的设备接受数据。
一个URL所经历的全部过程
URL所经历的全部过程:
HTTP -> DNS ->协议栈-TCP->IP->MAC->网卡->交换机->路由器->服务器
HTTP(数据包)
HTTP就是包含请求行(方法名如GET POST、URL、HTTP版本),请求头,请求体(具体数据)的数据包。请求发送到服务器后,服务器要响应请求,也是使用HTTP返回响应信息。响应HTTP包含响应行(HTTP版本、响应状态码200 400)、响应头、响应体。
DNS服务器(域名解析为IP)
DNS服务器分为(每一个服务器都保存有根DNS服务器地址):
客户端发送请求前需要IP地址,而DNS服务器记录了域名与IP之间的关系,所以请求发送时需要先通过域名将域名转为IP。
如何通过域名找寻IP:
- 客户端先在本地DNS服务器查找对应IP。
- 本地DNS服务器没有,通过本地寻找根服务器,根服务器告诉你那个顶级服务器保存有对应IP地址。
- 顶级服务器也不记录DNS与IP之间的关系,他告诉你那个权威服务器保存有对应关系,这就通过域名找到IP地址。
协议栈(规定请求需要经过的路径)
协议栈定义了请求需要经过那些过程,即Socket将请求按照下图的顺序执行,对数据包进行层层包装。
TCP(封装端口号,控制数据包发送速度与安全)
TCP建立连接的三次握手
TCP三次握手的原因是为了保证连接的稳定与可靠性。
三次握手的过程:
TCP分割数据包的大小
因为、以太网最大传输单元MTU(IP+TCP+数据包)不能超过1500字节(为了保证传输效率),所以超过1500字节TCP会将数据包拆分为多份发送。
IP(寻找数据包发送到的位置)
IP:包含源IP地址,目标IP地址,协议号(TCP/UDP,06表示使用TCP协议)
假设客户端有多个网卡,就会有多个 IP 地址,那 IP 头部的源地址应该选择哪个 IP 呢?
计算机中的路由表记录了:网卡,目标IP,子网掩码的关系。
我们通过 目标IP & 子网掩码 得到目标子网IP在目标子网IP在路由表中匹配,如果匹配到就知道在那个网卡发送消息
MAC(在子网中确定是那个设备)
MAC头包含:目标MAC、源MAC、协议(IP\ARP)
源MAC:直接将本设备的MAC地址写入源MAC中
目标MAC:通过IP地址获取子网,然后在子网中通过ARP广播的方式,询问子网下所有设备该IP是谁接收的,然后设备将自己的MAC返回。(为了避免每次都要广播,获取到MAC之后会在ARP缓存中记录IP与该设备MAC之间的关系)
网卡(将数字信号转为电信号)
网卡的作用是将数字信号转为电信号,将数据发送给交换机。
网卡被网卡驱动程序控制,会在请求开头加上开头加上报头和起始帧分界符(检测数据包的起始位置),在末尾加上用于检测错误的帧校验序列。
交换机(将电信号转为数字信号)
交换机的作用将电信号转换为数字信号,然后将数据包发送出源IP所在的子网(数据在不同子网之间的转发)。
交换机接收包
交换机接收包之后会首先校验错误帧,保证包的完整性,然后将获取数据包的MAC地址与目标MAC做对比,如果有就根据目标MAC对应的端口转发。(交换机没有MAC地址,会将所有包保存到缓冲区,对MAC进行校验)
如果没有找到目标MAC
如果没有找到目标MAC,会将包发送给所有端口,但因为以太网中如果不是目标地址就不会接收该数据包。(如果是广播MAC地址,也会发给所有端口)
路由器(请求分发)
路由器有MAC地址,路由器可以作为数据包的请求方和接收方,他更像是以太网上的节点一样,数据可以在路由器中进行转发,会在路由器这里改变MAC地址找寻接下来需要到达的设备。
服务器(拆解请求获取数据包)
将数据包层层拆解,然后获取数据
Liunx如何接收发送数据包
liunx发送数据包
Liunx接收数据包
接收数据包跟发送数据包是相反的过程
1.网卡通过DMA将数据包写入ringbuffer
2.进行硬件中断,让CPU首先处理数据包
3.进行硬件中断屏蔽(防止CPU已经在做处理数据包的操作还要被硬件中断),启动软中断处理数据包
4.处理MAC、IP、TCP协议
5.将数据包发送给Socket对应的缓冲区里面,循环读取到ringbuffer中的数据,一直读到ringbuffer没有数据,开启硬件中断
6.应用层通过系统API获取Socket对应的缓冲数据