计算机网络基础知识
TCP/IP 网络模型有哪几层
不同设备之间的进程通信需要网络通信,就要兼容多种多样的设备,因此需要一套通用的网络协议。且这个网络协议是分层的。
应用层
应用层只专注与为用户提供应用功能,不需要关心数据如何传输,因此应用层是工作在操作系统的用户态。
传输层
应用层数据包会传输给传输层,传输层是为应用层提供网络支持。传输层有两个传输协议:
- TCP:传输控制协议
- UDP:只负责发送数据包,不保证数据包能否抵达到对方。
当应用数据过大时,可将数据分段,每一段称为TCP段,这样数据传输意外中断,仅仅发送相应段就ok。
网络层
功能是帮助实现应用到应用的通信,是应用间的数据传输媒介。
网络层中最常用的协议是IP协议,将数据部分加上ip包头部组成IP报文,如果过大就再次分片。
IPv4协议里,ip地址共32位,分四段,且ip地址分为两种意义:
- 网络号:负责标识ip地址属于哪个子网
- 主机号:负责标识同一子网下的不同主机
网络接口层
网络接口层在ip头部前面加上MAC头部,封装成数据桢发送到网络上
总结:
键入网址到网页显示,期间发生了什么
第一步—HTTP
浏览器第一步工作就是解析URL:
解析完url,浏览器确定了web服务器和文件名,并根据此生成HTTP请求消息。
真实地址查询–DNS
通过浏览器解析URL并生成HTTP消息后,要委托操作系统将消息发送给web服务器。但在此之前还需要查询服务器域名对应的IP地址。
DNS服务器就是用来保存web服务器域名和IP的对应关系,
当然如果缓存里面有就不需要这些步骤了。
协议栈
其内部分了几个部分,分别承担不同的工作,协议栈上半部分有两块,分别负责收发数据的tcp和udp协议,下半部分则是用ip协议控制网络包的收发操作
,ip内还包含了icmp协议和arp协议,icmp用于告知网络包传送过程中产生的错误以及控制信息,arp用于根据ip地址查询相应的以太网MAC地址。
可靠传输 – TCP
TCP报文头部格式:
网络包的报文:
远程定位–IP
两点传输 – MAC
MAC包头里需要发送方MAC地址和接收方目标MAC地址,用于两点之间的传输。
- MAC双方如何确认,发送方只需将MAC地址读出来写到MAC头部即可。接收方要通过以太网告诉对方MAC地址,以太网就会打包发过来。
- 如何获取地方的MAC地址— 需要ARP协议以广播的形式找到,当然这里也有缓存叫ARP缓存,但缓存就几分钟。
出口—网卡
负责将数字信息打包并转换为电信号。
送别者 — 交换机
将网络包原样转发到目的地。也称为二层网络设备。
- 交换机的包接收操作:信号转换– FCS校验错误–查询接收方MAC地址是否在地址表里–根据地址表查找地址并发送。
- MAC地址表找不到地址会咋样:会群发,只有接收方会回复响应信息。
出境大门—路由器
路由器基于IP设计,也称三层网络设备,路由器的各个端口都具有MAC地址和IP地址,可以是接收方和发送方。
- 路由器的包接收操作:电信号转数字信号– FCS校验–检查接收方MAC地址–符合则接收并丢弃MAC地址
在网络包传输过程中,目标IP和源IP始终不会变,一直变化的是MAC地址,因此需要MAC地址在以太网内进行两个设备之间的包传输。
服务器
LINUX系统如何收发网络包
收发基本流程相同,在发网络包的情况下,内核申请sk_buff内存并将用户数据存入然后加入到缓冲区–网络协议栈取出该内存,然后逐层处理
及就是添加信息头—最后当ack应答时,释放原始的sk_buff。
- 发送网络数据时,涉及几次内存拷贝操作?:
- 第一次是用户数据拷贝到sk_buff
- 第二次是tcp协议下,每一个sk_buff都会被克隆一个新副本送到网络层。
- 第三次是IP层发现sk_buff大于MTU时需要额外的sk_buFF时。