最后更新:2022-07-21 17:20:53 手机定位技术交流文章
原因在同一设备上进行通信的多种方式,例如管道、消息队列、共享内存、信号**等方式
不同设备的进程通信需要网络通信, 因此提出了一种通用的网络协议.
包括:
(1)应用层(HTTP, FTP, Telnet, DNS, SMTP)
应用程序层简单地集中于向用户提供应用程序的功能,而不担心数据如何传输。
应用程序层在操作系统用户状态下工作,传输层在内核状态下工作。
(二)传输层(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)发送到网络上。


(一)分析URL以获取服务器和文件名称
(二)请求服务器中的文件资源发送http请求消息
(3)查询服务器域名(DNS)对应的IP地址
(4)通过 DNS访问IP后,HTTP传输工作可以转移到操作系统中的==协议堆栈==。
(5)在传输HTTP数据之前,必须首先建立一个TCP连接,TCP连接的建立通常被称为==三手==。
(六)在执行连接、检索、切断和其他操作阶段需要委托TCP模块IP该模块将数据包入网络包,并发送到通信对象。
(7)在生成IP头衔后,需要在IP头衔前面添加下一个网络包MAC 头部。
网络包只是存储在内存的二进制数字信息的一系列,无法直接向对方发送。 因此,我们需要将数字信息转换为通过网络传输的电报,这意味着这是真正的数据传输过程(网卡)。
(9)首先,电报到达网络线接口,交换机交换机中的模块接收,然后交换机中的模块将电报转换成数字信号。
(10)网络包通过开关后,它现在到达==路由器==,然后被发送到下一路由器或目标设备。 这个步骤传输的工作原理类似于交换机,并且通过检查表来确定包的传输。
(11)客户端收到了服务器的响应数据包后,同样也非常的高兴,客户能拆快递了!于是,客户端开始扒皮,在接收数据包后,离开HTTP响应消息,让浏览器渲染页面,特别的包裹特快车,就这样显示出来了!最后,客户端要离开了,向服务器发起了TCP 四次挥手双方之间的联系断了.
(HTTP => DNS => 协议栈 => TCP => IP => MAC => 网卡 => 交换机 => 路由器 => 服务器与客户端)
为了使多个设备能够通过网络进行通信,并解决不同设备在网络互连中互连问题,国际标准化组织(ISO)制定了开放系统互连通信参考模型(Open System Interconnection Reference Model),也就是OSI网络模型该模型由七层组成,即应用层、表示层、对话层、传输层、网络层、数据链层和物理层。
每个 责任 级别 有 不同 的 职能, 如下 :
(适用层,表示层,对话层="适用层")
(数据链接层,物理层=网络接口层)
TCP/IP网络模型有四个层,即应用层、传输层、网络层和网络接口层,每个层负责下列功能:





从上面的网络协议堆栈中,您可以看到:
网卡是计算机里的一个硬件,专门负责接收和发送网络包,当网卡接收到一个网络包后,会通过 DMA 技术,将网络包放入到 Ring Buffer,这个是一个环形缓冲区。
因此,为了解决经常中断造成的性能开支,Linux内核是2.第六版引入了NAPI机制,接收网络包是“干扰和查询”的混合物,它的核心概念是不间断地阅读数据。相反,首先使用中断的唤醒数据接收服务程序,然后poll的方法来轮询数据。
比如,当有网络包到达时,网卡发起硬件中断,然后执行网络卡硬件中断处理功能,中断处理功能需要处理“临时遮蔽中断”。然后唤醒软中断来询问数据处理,直到没有新的恢复中断的数据,这干扰了多个网络包的处理,这降低了与网络卡中断有关的性能成本。
软中断处理网络包
首先,会先进入到网络接口层,在这一层会检查报文的合法性,如果不合法则丢弃,合法则会找出该网络包的上层协议的类型,比如是 IPv4,还是 IPv6,接着再去掉帧头和帧尾,然后交给网络层。
到了网络层,则取出 IP 包,为了判断网络包的下一步方向,例如,把它交给高级处理或发送出去。当确认该网络包要发送给主机时,从IP头上可以看到顶层协议的类型是TCP或UDP,然后移除IP头,然后交给传输层。
传输层将TCP头或UDP头取出,找到相应的接口,并根据四个元素组“source IP, source port, target IP, target port”复制数据到接口的接收缓冲区。
最后,应用程序层程序调用Socket接口,它从内核的Socket缓冲器接收到应用程序层的新数据。
发送网络包的过程与接收过程完全相反。
首先,应用程序会调用 Socket 发送数据包的接口,由于这个是系统调用,所以会从用户态陷入到内核态中的 Socket 层,Socket 层会将应用层数据拷贝到 Socket 发送缓冲区中。
接下来,网络协议堆抽出由索克发送的缓冲区的包,并根据TCP/IP协议堆从上到下处理它们。
如果使用的是 TCP 传输协议发送数据,那么会在传输层增加 TCP 包头,然后交给网络层,网络层会给数据包增加 IP 包,然后通过查询路由表确认下一跳的 IP,并按照 MTU 大小进行分片。
分片后的网络包,就会被送到网络接口层,在这里会通过 ARP 协议获得下一跳的 MAC 地址,然后增加帧头和帧尾,放到发包队列中。
当这些都准备好时,一个软中断被触发,它告诉网络卡驱动程序需要发送新的网络包,然后驱动程序从发送队列通过DMA读取网络包,将它插入硬件网络卡的队列,然后将其发送到物理网络卡。


发送和接收客户和服务器的字符


服务器最后有一个同步队列和一个接受队列存储五元组
每个插座是
fd(文件描述符)+协议堆栈(远程IP、远程端口、本地IP、本地端口、协议)由五个组件组成
本文由 在线网速测试 整理编辑,转载请注明出处。