复习计算机网络知识的过程中记录一些自己觉得有用的知识点。会根据复习进程不断增添。
如果我们以 POST 方法提交一个搜索请求给淘宝服务器,那么最终在数据链路层构建出来的数据帧大概是这个样子,这里假设 IP 数据包的大小没有超过链路层的最大传输单元。
App 要发送的数据只是 key="a"这样一个 JSON 字符串,每一层协议都会在上一层协议基础上添加一个头部信息,最后封装成一个链路层的数据帧在网络上传输,发送给淘宝的服务器。淘宝的服务器在收到这个数据帧后,在通信协议的每一层进行校验检查,确保数据准确后,将头部信息删除,再交给自己的上一层协议处理。HTTP 应用服务器在最上层,负责 HTTP 协议的处理,最后将 key="a"这个 JSON 字符串交给淘宝工程师开发的应用程序处理。
OSI参考模型中各个分层的作用
分层名称 | 功能 | 每层功能概览 | |
---|---|---|---|
7 | 应用层 | 针对特定应用的协议 | 针对每个应用的协议,如电子邮件的电子邮件协议,远程登陆的远程登录协议,文件传输的文件传输协议等 |
6 | 表示层 | 设备固有数据格式和网络标准数据格式的转换 | 接受不同表现形式的信息,如文字、图像、声音等 |
5 | 会话层 | 通信管理。负责建立和断开通信连接(数据流动的逻辑通路)。管理传输层以下的分层。 | 何时建立连接,何时断开连接以及保持多久的连接? |
4 | 传输层 | 管理两个节点之间的数据传输。负责可靠传输(确保数据被可靠的传输到目标地址) | 是否有数据丢失? |
3 | 网络层 | 地址管理与路由选择 | 经过哪个路由传递到目标地址? |
2 | 数据链路层 | 互连设备之间传送和识别数据帧 | 数据帧与比特流之间的转换 |
1 | 物理层 | 以“0”,“1”代表电压的高低、灯光的闪灭。界定连接器和网线的规格。 | 比特流和电子信号的切换,连接器与网线的规格 |
应用层
为应用程序提供服务并规定应用程序中通信相关的细节。包括文件传输、电子邮件、远程登陆(虚拟终端)等协议。
表示层
将应用处理的信息转换为适合网络传输的格式,或将来自下一层的数据转换为上层能够处理的格式。因此它主要负责数据格式的转换。
具体来说,就是将设备固有的数据格式转换为网络标准传输格式。不同设备对同一比特流解释的结果可能会不同。因此,使它们保持一致是这一层的主要作用。
会话层
负责建立和断开通信连接(数据流动的逻辑通路),以及数据的分割等数据传输相关的管理。需要注意的是,会话层负责建立连接和断开连接的时机,而传输层则进行实际的建立和断开处理。
传输层
起着可靠传输的作用。只在通信双方节点上进行处理,而无需再路由器上处理。
TCP 也会在数据包上添加 TCP 头,TCP 头除了包含一些用于校验数据正确性和控制数据流量的信息外,还包含通信端口信息,一台机器可能同时有很多进程在进行网络通信。如何使数据到达服务器后能发送给正确的进程去处理,就需要靠通信端口进行标识了。HTTP 默认端口是 80,当然我们可以在启动 HTTP 应用服务器进程的时候,随便定义一个数字作为 HTTP 应用服务器进程的监听端口,但是 App 在请求的时候,必须在 URL 中包含这个端口,才能在构建的 TCP 包中记录这个端口,也才能在到达服务器后,被正确的 HTTP 服务器进程处理。
网络层
将数据传输到目标地址。目标地址可以是多个网络通过路由器连接而成的某一个地址。因此这一层主要负责寻址和路由选择。
网络层的数据需要交给链路层进行处理,而链路层帧的大小定义了最大传输单元,网络层的 IP 数据包必须要小于最大传输单元才能进行网络传输,这个数据包也有一个 IP 头,主要包括的就是发送者和接受者的 IP 地址。
IP 协议不是一个可靠的通信协议,并不会确保数据一定送达。要保证通信的稳定可靠,需要传输层协议 TCP。TCP 协议在传输正式数据前,会先建立连接,这就是著名的 TCP 三次握手。
数据链路层
负责物理层面互连的,节点之间的通信传输。例如与一个以太网相连的两个节点之间的通信。
将0、1序列划分为具有意义的数据帧传送给对端(数据帧的生成与接受)。
数据链路层就是将数据进行封装后交给物理层进行传输,主要就是将数据封装成数据帧,以帧为单位通过物理层进行通信,有了帧,就可以在帧上进行数据校验,进行流量控制。数据链路层会定义帧的大小,这个大小也被称为最大传输单元。
像 HTTP 要在传输的数据上添加一个 HTTP 头一样,数据链路层也会将封装好的帧添加一个帧头,帧头里记录的一个重要信息就是发送者和接受者的 mac 地址。mac 地址是网卡的设备标识符,是唯一的,数据帧通过这个信息确保数据送达到正确的目标机器。
前面已经提到,网络层 IP 协议使得互联网应用根据 IP 地址就能访问到淘宝的数据中心,请求离开 App 后,到达运营服务商的交换机,交换机会根据这个 IP 地址进行路由转发,可能中间会经过很多个转发节点,最后数据到达淘宝的服务器。
网络层的数据需要交给链路层进行处理,而链路层帧的大小定义了最大传输单元,网络层的 IP 数据包必须要小于最大传输单元才能进行网络传输,这个数据包也有一个 IP 头,主要包括的就是发送者和接受者的 IP 地址。
物理层
负责数据的物理传输,计算机输入输出的只能是 0 1 这样的二进制数据,但是在真正的通信线路里有光纤、电缆、无线各种设备。光信号和电信号,以及无线电磁信号在物理上是完全不同的,如何让这些不同的设备能够理解、处理相同的二进制数据,这就是物理层要解决的问题。
其他的一些参考模型:
这么多参考图片的目的是用来更好的理解。
各种设备及其对应网络的分层概览
这里没找到电子版本只能自己拍了,害。
TCP/IP基础知识
TCP/IP的具体含义
从字面意义来讲,有人可能会认为TCP/IP是指TCP与IP两种协议。实际生活中有时也确实是指这两种给协议。然后很多情况下,它只是利用IP进行通信时所必须用到的协议群的统称。具体来说,IP或ICMP、TCP或UDP、TELNET或FTP、以及HTTP等都属于TCP/IP的协议。它们与TCP或IP的关系紧密,是互联网必不可少的组成部分。TCP/IP一词泛指这些协议,因此,有时也称TCP/IP为网际协议族。
TCP/IP协议分层协议
TCP/IP与OSI参考模型
OSI的模型注重通信协议必要的功能是什么,而TCP/IP的模型则更强调在计算机上实现协议应该开发哪种程序。
了解下数据包
包、帧、数据包、段、消息
以上五个术语都用来表述数据的单位,大致区分如下:
包可以说是全能性术语;
帧用于表示数据链路层中包的单位;
数据包是 IP 和 UDP 等网络层以上的分层中包的单位;
段则表示 TCP 数据流中的信息;
消息是指应用协议中数据的单位。
每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据。
了解下端口
端口号是由其使用的传输层协议规定的,因此,不同的传输协议可以使用相同的端口号。例如,TCP和UDP使用同一个端口号,但使用的目的各不相同。这是因为端口号上的处理是根据每个传输协议的不同而进行的。所以即使是同一个端口号,由于传输协议是各自独立地进行处理,因此相互之间不会受到影响。
此外,那些知名端口号与传输层协议并无关系,只要端口一致都将分配同一种程序进行处理。例如,53号端口在TCP和UDP中都用于DNS服务,而80端口用于HTTP通信。从目前看来,由于HTTP通信必须使用TCP,因此UDP地80端口并未投入使用。但是将来,如果HTTP协议的实现也开始应对UDP协议以及应用协议被相应扩展的情况下,就可以原样使用与TCP保持相同的80端口了。
TCP/IP各层
硬件(物理层)
最底层就是负责数据传输的硬件
网络接口层(数据链路层)
利用以太网中的数据链路层进行通信,因此属于接口层。也就是说,把它当作让NIC起作用的“驱动程序”也无妨。
互联网层(网络层)
互联网层使用IP协议,IP协议基于IP地址转发分包数据。互联网就是具备互联网层功能的网络。
TCP/IP分层中的互联网层与传输层的功能通常由操作系统提供。尤其是路由器,它必须得实现通过互联网层转发分组数据包得功能。此外,连接互联网得所有主机和路由器必须都实现IP的功能。其他连接互联网的网络设备如网桥、中继器、集线器就没必要一定实现IP或TCp的功能。(当然,有时为了监控和管理功能,这些设备也需要具备IP、TCP的功能)
IP是跨越网络传送数据包,使整个互联网都能收到数据的协议。使用IP地址作为主机的标识。IP还隐含数据链路层的功能。通过IP,相互通信的主机之间无论经过怎样的底层数据链路都能够实现通信。虽然IP也是分组交换的一种协议,但是它不具有重发机制。即使分组数据包未能到达端主机也不会重发。因此属于非可靠传输协议。
ICMP:IP数据包在发送途中一旦发生异常导致无法到达对端目标地址时,需要给发送端发送一个发生异常的通知。ICMP就是为这一功能而制定的。它有时也被用来诊断网络的健康状况。
ARP:从分组数据包的IP地址中解析出物理地址(MAC地址)的一种协议。