小林图解网络-基础篇

发布时间 2023-10-03 21:03:36作者: 丘野

2.1 TCP\IP有哪几层

TCP、IP协议栈主要有应用层、传输层、网络层

它们的功能作用、拥有哪些协议?

应用层主要为用户提供服务,完成特定的功能。
场景的协议有HTTP、FTP、DNS

传输层主要提供应用进程之间的通信,以端口标识应用
主要协议有TCP、UDP协议

UDP提供不可靠、无连接的数据传输服务
TCP提供可靠的、面向连接的数据传输服务
TCP具有差错控制、超时重传、拥塞控制等功能

网络层主要传输端到端之间的数据,以IP地址标识设备,主要具有寻址、路由等功能
主要有IP协议、ICMP协议和ARP协议

网络接口层主要负责通信设备的数据传输,添加mac帧的帧头和帧尾

image

2.2 输入网址到网页显示之间发生了什么?

浏览器解析URL地址
通过DNS获得网络IP地址
通过系统调用socket库委托操作系统的协议栈工作,
协议栈包括TCP、UDP、IP协议
操作系统根据IP发起TCP请求,网卡发送数据帧,经由交换机、路由器等通信设备,达到服务器,
与之建立TCP连接
然后,将HTTP请求发送给服务器,服务器解析请求内容进一步处理,获得相应的数据,封装到HTTP响应中返回,显示在浏览器中。

2.3 Linux如何收发网络包?

linux的应用程序主要通过系统调用socket库,委托协议栈来进行网络通信
涉及的协议栈有TCP、UDP、IP、ICMP、ARP和MAC
TCP、UDP给应用数据加上端口信息头
IP给数据包加上IP头
网络接口层给数据加上帧头和帧尾

linux程序接受网络包时
网卡收到数据将其写在ring buffer 环形数据缓冲区,然后通过中断的方式通知操作系统,网络包已经到达
(现在通过DMA技术发起硬件中断通知CPU,CPU调用硬件中断处理函数,处理函数会先暂时屏蔽中断,然后调用软中断。软中断有装门的ksostirpd线程处理,通过轮询从Ring buffer中获得一个sk_buff,作为网络包交给协议栈处理)

image

linux程序发送网络包时

应用程序发送数据时,首先会进行系统调用,由用户态进入内核态,socket会将用户数据拷贝一份到内核空间sk_buff
TCP或UDP协议,加上端口信息,TCP为了后续可能超时重传会复制一次sk_buff
IP协议会对进行切片、加上ip头,
网络接口层会调用ARP协议获得下一条mac地址,封装帧头、帧尾
之后通过软中断,通知网卡进行发送,驱动会读取sk_buff将其挂载到RingBuffer中,再映射到DMA区域,由网卡进行发送