1 计算机网络基础

1.1 TCP/IP网络模型

原因:同一设备上的进程通信,有很多方式,比如管道、消息队列、共享内存、信号等方式

不同设备上的进程通信需要网络通信,因此提出了一套通用的网络协议。

包括:

(1)应用层(HTTP、FTP、Telnet、DNS、SMTP)

应用层只需要专注于为用户提供应用功能,不用关心数据如何传输。

应用层工作在操作系统中的用户态,传输层及以下工作在内核态。

(2)传输层(TCP、UDP)

在传输层会有两个传输协议,分别是 TCP 和 UDP。

TCP 的全称叫传输控制协议(Transmission Control Protocol),大部分应用使用的正是 TCP 传输层协议,比如HTTP 应用层协议。TCP 相比 UDP 多了很多特性,比如流量控制、超时重传、拥塞控制等,这些都是为了保证数据包能可靠地传输给对方。

UDP 相对来说就很简单,简单到只负责发送数据包,不保证数据包是否能抵达对方,但它实时性相对更好,传输效率也高。当然,UDP 也可以实现可靠传输,把 TCP 的特性在应用层上实现就可以,不过要实现一个商用的可靠 UDP 传输协议,也不是一件简单的事情。

应用需要传输的数据可能会非常大,如果直接传输就不好控制,因此当传输层的数据包大小超过 MSS(TCP 最大报文段长度) ,就要将数据包分块,这样即使中途有一个分块丢失或损坏了,只需要重新发送这一个分块,而不用重新发送整个数据包。在 TCP 协议中,我们把每个分块称为一个 TCP 段TCP Segment)。

(3)网络层

传输层可能大家刚接触的时候,会认为它负责将数据从一个设备传输到另一个设备,事实上它并不负责。

也就是说,我们不希望传输层协议处理太多的事情,只需要服务好应用即可,让其作为应用间数据传输的媒介,帮助实现应用到应用的通信,而实际的传输功能就交给下一层,也就是网络层Internet Layer)。

(4)网络接口层

生成了 IP 头部之后,接下来要交给网络接口层Link Layer)在 IP 头部的前面加上 MAC 头部,并封装成数据帧(Data frame)发送到网络上。

1.2 键入网址到网页显示原理

(1)解析URL,获得服务器和文件名称

(2)请求服务器里的文件资源,发出http请求消息

(3)查询服务器域名(DNS)对应的IP地址

(4)通过 DNS 获取到 IP 后,就可以把 HTTP 的传输工作交给操作系统中的协议栈

(5)在 HTTP 传输数据之前,首先需要 TCP 建立连接,TCP 连接的建立,通常称为三次握手

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

(7)生成了 IP 头部之后,接下来网络包还需要在 IP 头部的前面加上 MAC 头部

(8)网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信息转换为电信号,才能在网线上传输,也就是说,这才是真正的数据发送过程(网卡)。

(9)首先,电信号到达网线接口,交换机里的模块进行接收,接下来交换机里的模块将电信号转换为数字信号。

(10)网络包经过交换机之后,现在到达了 路由器,并在此被转发到下一个路由器或目标设备。这一步转发的工作原理和交换机类似,也是通过查表判断包转发的目标。

(11)客户端收到了服务器的响应数据包后,同样也非常的高兴,客户能拆快递了!于是,客户端开始扒皮,把收到的数据包的皮扒剩 HTTP 响应报文后,交给浏览器去渲染页面,一份特别的数据包快递,就这样显示出来了!最后,客户端要离开了,向服务器发起了 TCP 四次挥手,至此双方的连接就断开了。

(HTTP => DNS => 协议栈 => TCP => IP => MAC => 网卡 => 交换机 => 路由器 => 服务器与客户端)

1.3 Linux系统如何收发网络包

1.3.1 网络模型

为了使得多种设备能通过网络相互通信,和为了解决各种不同设备在网络互联中的兼容性问题,国际标准化组织制定了开放式系统互联通信参考模型(Open System Interconnection Reference Model),也就是OSI网络模型,该模型主要有 7 层,分别是应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层。

每一层负责的职能都不同,如下:

  • 应用层,负责给应用程序提供统一的接口;
  • 表示层,负责把数据转换成兼容另一个系统能识别的格式;
  • 会话层,负责建立、管理和终止表示层实体之间的通信会话;
  • 传输层,负责端到端的数据传输;
  • 网络层,负责数据的路由、转发、分片;
  • 数据链路层,负责数据的封帧和差错检测,以及 MAC 寻址;
  • 物理层,负责在物理网络中传输数据帧;

(应用层、表示层、会话层 =》 应用层)

(数据链路层、物理层 =》 网络接口层)

TCP/IP 网络模型共有 4 层,分别是应用层、传输层、网络层和网络接口层,每一层负责的职能如下:

  • 应用层,负责向用户提供一组应用程序,比如 HTTP、DNS、FTP 等;
  • 传输层,负责端到端的通信,比如 TCP、UDP 等;
  • 网络层,负责网络包的封装、分片、路由、转发,比如 IP、ICMP 等;
  • 网络接口层,负责网络包在物理网络中的传输,比如网络包的封帧、 MAC 寻址、差错检测,以及通过网卡传输网络帧等;

1.3.2 Linux网络协议栈

从上图的的网络协议栈,你可以看到:

  • 应用程序需要通过系统调用,来跟 Socket 层进行数据交互;
  • Socket 层的下面就是传输层、网络层和网络接口层
  • 最下面的一层,则是网卡驱动程序和硬件网卡设备

1.3.3 Linux接收网络包

网卡是计算机里的一个硬件,专门负责接收和发送网络包,当网卡接收到一个网络包后,会通过 DMA 技术,将网络包放入到 Ring Buffer,这个是一个环形缓冲区。

所以为了解决频繁中断带来的性能开销,Linux 内核在 2.6 版本中引入了 NAPI 机制,它是混合「中断和轮询」的方式来接收网络包,它的核心概念就是不采用中断的方式读取数据,而是首先采用中断唤醒数据接收的服务程序,然后 poll 的方法来轮询数据。

比如,当有网络包到达时,网卡发起硬件中断,于是会执行网卡硬件中断处理函数,中断处理函数处理完需要「暂时屏蔽中断」,然后唤醒「软中断」来轮询处理数据,直到没有新数据时才恢复中断,这样一次中断处理多个网络包,于是就可以降低网卡中断带来的性能开销。

软中断处理网络包

首先,会先进入到网络接口层,在这一层会检查报文的合法性,如果不合法则丢弃,合法则会找出该网络包的上层协议的类型,比如是 IPv4,还是 IPv6,接着再去掉帧头和帧尾,然后交给网络层。

到了网络层,则取出 IP 包,判断网络包下一步的走向,比如是交给上层处理还是转发出去。当确认这个网络包要发送给本机后,就会从 IP 头里看看上一层协议的类型是 TCP 还是 UDP,接着去掉 IP 头,然后交给传输层。

传输层取出 TCP 头或 UDP 头,根据四元组「源 IP、源端口、目的 IP、目的端口」 作为标识,找出对应的 Socket,并把数据拷贝到 Socket 的接收缓冲区。

最后,应用层程序调用 Socket 接口,从内核的 Socket 接收缓冲区读取新到来的数据到应用层。

1.3.4 Linux发送网络包

发送网络包的流程正好和接收流程相反。

首先,应用程序会调用 Socket 发送数据包的接口,由于这个是系统调用,所以会从用户态陷入到内核态中的 Socket 层,Socket 层会将应用层数据拷贝到 Socket 发送缓冲区中。

接下来,网络协议栈从 Socket 发送缓冲区中取出数据包,并按照 TCP/IP 协议栈从上到下逐层处理。

如果使用的是 TCP 传输协议发送数据,那么会在传输层增加 TCP 包头,然后交给网络层,网络层会给数据包增加 IP 包,然后通过查询路由表确认下一跳的 IP,并按照 MTU 大小进行分片。

分片后的网络包,就会被送到网络接口层,在这里会通过 ARP 协议获得下一跳的 MAC 地址,然后增加帧头和帧尾,放到发包队列中。

这一些准备好后,会触发软中断告诉网卡驱动程序,这里有新的网络包需要发送,最后驱动程序通过 DMA,从发包队列中读取网络包,将其放入到硬件网卡的队列中,随后物理网卡再将它发送出去。

计算机网络(一)——计算机网络基础相关推荐

  1. 计算机网络 陆魁军 ppt,计算机网络的应用基础概述.doc

    计算机网络的应用基础概述 计算机网络的应用基础概述 [摘 要]随着社会的发展,科技信息在社会的各个领域中都有所应用,计算机作为信息传递的主要载体,在实现网络传播的时代,发挥着重要的作用.计算机网络的应 ...

  2. 计算机网络——IP协议基础原理

    摘要 IP协议提供的一种统一的地址格式.它为互联网上的每一个网络和主机分配一个逻辑地址所以IP地址也叫逻辑地址,用来屏蔽物理地址的差异,MAC地址每一个机器都有一个编码.IP地址是32位二进制数据分为 ...

  3. 计算机网络有哪些技能知识,计算机网络技术的基础知识

    计算机网络技术的基础知识 什么是网络技术?我们将地理位置不同,具有独立功能的多个计算机系统,通过通信设备和线路互相连接起来,使用功能完整的网络软件来实现网络资源共享的大系统,称为计算机网络.下面跟小编 ...

  4. 计算机网络——1.计算机网络基础

    这一系列的计算机网络笔记,以谌玺老师的思科认证的教学视频为参考基础,因为以前对计算机网络有一定的基础,所以有的知识点写的稍微简略一些. CCNA认证(CCNA-思科认证网络工程师)(Cisco Cer ...

  5. 【计算机网络】计算机网络总结

    第一章 概述 本章重要内容: (1)互联网边缘部分和核心部分的作用 (2)计算机网络的性能指标 (3)计算机网络分层的体系结构 1.1计算机网络在信息时代的作用 21世纪的重要特征:数字化.网络化.信 ...

  6. ppt计算机网络技术,计算机网络技术.ppt

    计算机网络技术.ppt <计算机网络技术>,计算机网络概述,计算机网络的认知与应用体验,网络与网络应用无处不在,以至于我们已经将其视为我们社会生活的一个不可缺少的部分: 问题:什么是计算机 ...

  7. 【计算机网络】计算机网络的性能指标

    [计算机网络]计算机网络的性能指标 定义 速率 带宽 吞吐量 时延 时延带宽积 往返时间 利用率 丢包率 定义 性能指标可以从不同的方面来度量计算机网络的性能. 常用的计算机网络的性能指标有以下8个: ...

  8. 【计算机网络】计算机网络纠错本

    [计算机网络]计算机网络纠错本 标签(空格分隔):[考研纠错本] 考研计算机网络纠错本 文章目录 考研计算机网络纠错本 第一轮 1. 计算机网络概述 2. 计算机网络体系结构与参考模型 3. 通信基础 ...

  9. 【计算机网络】计算机网络总览(超多图)

    前言 计算机网络是学习计算机的人必须要学习的基础,是非常非常的重要.在以后的面试当中这也是一定会被问到的重点.所以我们要重视起来. 我也会持续更新本专栏的,来总结计算机网络的全部内容! 目录 前言 因 ...

  10. 自己设计计算机网络实验室,计算机网络实验室建设与实验教学改革路径

    柯伟瀚 摘 要:科技信息时代的发展进步,使得学校也开始注重信息化的改革和建设.目前很多学校都开始实行了计算机网络实验教学,为新型人才的培养发挥了一定的积极作用.计算机网络实验教学的有序进行,需要学校不 ...

最新文章

  1. 他只有2年工作经验,现在却拿着40万年薪,只因他曾做过这件事
  2. Cocoa 框架 For iOS(一) 框架的介绍,Objectivie-C运行时能力的解析等 (转载)
  3. 《虚拟化工程师》-真实环境-培训计划 v0.0.1( 赠送:第 01\02 章 (免费视频))...
  4. 【错误记录】Flutter 报错 ( Dart SDK is not configured )
  5. java id生成器 分布式_分布式高效唯一ID生成器(sequence)
  6. [Google Guava] 4-函数式编程
  7. ABAP Range
  8. 千万别被“读书无用”给害了
  9. linux如何用gcc编译c程序,Ubuntu之如何使用gcc编译C语言程序
  10. 保护自己之手机定位信息收集
  11. Java 复制文件并改名
  12. 改进的树状长短期记忆网络(Tree-LSTM)语义表示
  13. matlab恶狼追兔问题,饿狼追兔问题-数学建模.doc
  14. Openfire 即时通讯系统(服务器端+Android客户端)一
  15. 漫步者 lollipods 充电
  16. 35、ubuntu20.04搭建瑞芯微的npu仿真环境和测试rv1126的Debain系统下的yolov5+npu检测功能以及RKNN推理部署以及RTSP视频流解码
  17. Virginia(维吉尼亚)无密钥解密
  18. 破解利器C32Asm和IDApro
  19. 使用ThinkJs搭建微信中控服务
  20. 零售店铺想要日进斗金?这三个点照着做就行!

热门文章

  1. Java面试总结,Java实习面试经验汇总
  2. a除以b的编程怎么写C语言,输入a,b两个整数,编程求出a除以b得到的商和余数.c语言...
  3. mysql slow query_Mysql 开启 Slow 慢查询
  4. 2021固原一中高考成绩查询榜,【固原一中高考成绩实现新突破】
  5. 实训六:Web方式管理交换机
  6. 北桥(龙芯的北桥主要是amd的 没有内存控制器 内存控制器在龙芯cpu中)
  7. 谷歌火狐浏览器主页被劫持
  8. 概率论与统计学的关系是什么?
  9. Flash 与课件制作:视频播放
  10. 爬取三联生活周刊新闻(进阶版)