应用层协议
[toc]
应用层协议(application layer protocol)定义了运行在不同端系统上的应用程序进程如何相互传递报文。接下来我们就来学习应用层上的一些协议。
在传输层之上,便是应用层。传输层的 UDP 报文和 TCP 报文段的数据部分就是应用层交付的数据。
不同类型的网络应用有不同的通信规则,因此应用层协议是多种多样的,比如 DNS、FTP、Telnet、SMTP、HTTP、RIP、NFS 等协议都是用于解决其各自的一类问题。
DNS 协议
DNS(Domain Name Service 域名服务)协议基于 UDP,使用端口号 53。
由数字组成的 IP 地址很难记忆,所以我们上网使用网站 IP 地址的别名——域名。实际使用中,域名与 IP 地址是对应的,这种对应关系保存在 DNS 服务器之中。
在浏览器中输入一个域名后,会有 DNS 服务器将域名解析为对应的 IP 地址。注意这和网络层的 ARP 协议的不同之处:DNS 提供的是域名与 IP 地址的对应关系,而 ARP 提供的是 IP 地址和 MAC 地址的对应关系。
DNS 服务器
DNS 服务器是个分层次的系统:
...
传输层:TCP协议
[toc]
TCP 和 UDP 处在同一层——传输层,但是它们有很多的不同。TCP 是 TCP/IP 系列协议中最复杂的部分,它具有以下特点:
TCP 提供 可靠的 数据传输服务,TCP 是 面向连接的 。应用程序在使用 TCP 通信之前,先要建立连接,这是一个类似“打电话”的过程,通信结束后还要“挂电话”。
TCP 连接是 点对点 的,一条 TCP 连接只能连接两个端点。
TCP 提供 可靠传输,无差错、不丢失、不重复、按顺序。
TCP 提供 全双工 通信,允许通信双方任何时候都能发送数据,因为 TCP 连接的两端都设有发送缓存和接收缓存。
TCP 面向 字节流 。TCP 并不知道所传输的数据的含义,仅把数据看作一连串的字节序列,它也不保证接收方收到的数据块和发送方发出的数据块具有大小对应关系。
使用 netstat -s 查看数据包统计信息:
以下截图截取 tcp 部分
截图中每行所表示含义依次是:主动开放的连接数,被动开放的连接数,失败的连接尝试,重置连接数,当前连接数,接收的 分段数,发送的分段数,重新传输的分段数。
TCP 报文段结构
TCP 是面向字节流的,而 TCP ...
传输层:UDP协议
[toc]
从之前介绍的网络层协议来看,通信的两端是两台主机,IP 数据报首部就标明了这两台主机的 IP 地址。但是从传输层来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据,因此严格地讲,通信双方不是主机,而是主机中的进程。
传输层协议有 UDP 和 TCP,本节我们就先来介绍 UDP。
主机中常常有多个应用进程同时在与外部通信(比如你的浏览器和 QQ 在同时运行),下图中,A 主机的 AP1 进程在与 B 主机的 AP3 进程通信,同时主机 A 的 AP2 进程也在与 B 主机的 AP4 进程通信。
两个主机的传输层之间有一个灰色双向箭头,写着“传输层提供应用进程间的逻辑通信”。
逻辑通信:看起来数据似乎是沿着双向箭头在传输层水平传输的,但实际上是沿图中的虚线经多个协议层次而传输。
TCP/IP 协议栈传输层有两个重要协议——UDP 和 TCP,不同的应用进程在传输层使用 TCP 或 UDP 之一。
这一节先介绍比较简单的 UDP,比较复杂的 TCP 将在下一节讨论。
端口
端口的作用体现在传输层。
刚才的图中,AP1 与 AP3 的通信与 AP2 与 AP4 的通 ...
网络层其他协议
[toc]
网络层不仅有 IP 协议,还有其它如 ARP、ICMP、IGMP、RARP 等其它协议,这一节我们将对这些协议做介绍。
ARP(Address Resolution Protocol)地址解析协议
功能
当主机通过数据链路发送数据的时候,IP 数据报会先被封装为一个数据帧,而 MAC 地址会被添加到数据帧的报头(链路层介绍时已讲过)。
ARP 便是在这个过程中通过目标主机的 IP 地址,查询目标主机的 MAC 地址。
原理
在你的电脑和路由器中都有一个 ARP 缓存表,其中保存的是近期(20 分钟)与自己有过通信的主机的 IP 地址与 MAC 地址的对应关系。
ARP 缓存表使用过程:
当主机要发送一个 IP 数据报的时候,会首先查询一下自己的 ARP 缓存表;
如果在 ARP 缓存表中找到对应的 MAC 地址,则将 IP 数据报封装为数据帧,把 MAC 地址放在帧首部,发送数据帧;
如果查询的 IP-MAC 值对不存在,那么主机就向网络中广播发送一个 ARP 请求数据帧,ARP 请求中包含待查询 IP 地址;
网络内所有收到 ARP 请求的主机查询自己的 IP 地址, ...
IP网际协议
[toc]
IP 数据报:IP 协议位于网络层,它是 TCP/IP 协议族中最为核心的协议,所有的 TCP、UDP、ICMP 及 IGMP 数据都以 IP 数据报格式传输。IP 协议提供的是不可靠、无连接的数据报传送服务。
本节实验我们将学习关于 IP 网际协议的进一步知识。
知识点
IP 数据报
IP 地址分类
子网划分
IP 路由选择
NAT 技术
IP 的未来
IP 数据报
IP 协议提供的数据传送服务是不可靠和无连接的,具体表现如下:
不可靠(unreliable):IP 协议不能保证数据报能成功地到达目的地,它仅提供传输服务。当发生某种错误时,IP 协议会丢弃该数据报。传输的可靠性全由上层协议来提供。
无连接(connectionless):IP 协议对每个数据报的处理是相互独立的。这也说明,IP 数据报可以不按发送顺序接收。如果发送方向接收方发送了两个连续的数据报(先是 A,然后是 B),每个数据报可以选择不同的路线,因此 B 可能在 A 到达之前先到达。
IP 数据报格式:
如上图所示,普通的 IP 数据报的报头长度 20 字节(除非有选项字段),各个部分的作用 ...
链路层介绍
[toc]
网络层协议的数据单元是 IP 数据报,而数据链路层的工作就是把网络层交下来的 IP 数据报 封装为帧(frame) 发送到链路上,以及把接收到的帧中的数据取出并上交给网络层。 为达到这一目的,数据链路必须具备一系列相应的功能,主要有:
将数据封装为帧(frame),帧是数据链路层的传送单位;
控制帧的传输,包括处理传输差错,调节发送速率与接收方相匹配;
在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。
数据帧的结构是这样的:
知识点:
控制帧的传输
以太网
PPP(点对点协议)
SLIP 与 PPP
MTU
控制帧的传输
差错控制
通信系统必须具备发现差错的能力,并采取措施纠正之,使差错控制在所能允许的尽可能小的范围内,这就是差错控制过程,也是数据链路层的主要功能之一。
反馈重发
接收方通过对差错编码(奇偶校验码或 CRC 码)的检查,可以判定一帧在传输过程中是否发生了差错。一旦发现差错,一般可以采用反馈重发的方法来纠正。这就要求接受方收完一帧后,向发送方反馈一个接收是否正确的信息,使发送方据此做出是否需要重新发送的决定。发送方仅当收到接收方已正确接收 ...
TCP/IP简介
[toc]
提到网络协议栈结构,最著名的当属 OSI 七层模型,但是 TCP/IP 协议族的结构则稍有不同,它们之间的层次结构有如图对应关系:
可见 TCP/IP 被分为 4 层,每层承担的任务不一样,各层的协议的工作方式也不一样,每层封装上层数据的方式也不一样:
应用层:应用程序通过这一层访问网络,常见 FTP、HTTP、DNS 和 TELNET 协议;
传输层:TCP 协议和 UDP 协议;
网络层:IP 协议,ARP、RARP 协议,ICMP 协议等;
网络接口层:是 TCP/IP 协议的基层,负责数据帧的发送和接收。
本笔记自底向上分层次对 TCP/IP 的各协议做介绍。
主要知识点:
IP 地址
域名
MAC 地址
端口号
封装和分用
起源
上世纪 70 年代,随着计算机技术的发展,计算机使用者意识到:要想发挥计算机更大的作用,就要将世界各地的计算机连接起来。但是简单的连接是远远不够的,因为计算机之间无法沟通。因此设计一种通用的“语言”来交流是必不可少的,这时 TCP/IP 协议就应运而生了。
TCP/IP(Transmission Control Protocol ...
算法面试Python相关知识点
[toc]
算法面试 Python 相关知识点
什么是解释性语言,什么是编译性语言?
计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。
解释性语言在运行程序的时候才会进行翻译。
编译型语言写的程序在执行之前,需要一个专门的编译过程,把程序编译成机器语言(可执行文件)。
Python 程序运行过程?
Python 程序在解释器上执行分两个过程:
编译:
首先把程序的字节码保存为一个以.pyc 为扩展名的文件。作为一种启动速度的优化。下一次运行程序时,如果上没有修改过源码的话,Python 将会加载.pyc 文件并跳过编译这个步骤。
执行:
当程序编译成字节码后,发送到 Python 虚拟机上来执行。虚拟机是 Python 的运行引擎。是 Python 解释器的最后一步。
注:解释器即让其他程序运行起来的程序,是代码与机器的计算机硬件之间的软件逻辑层。Python 也是一个名为解释器的软件包。
Python 的作用域?
Python 中的作用域分 4 种情况:
L:local,局部作用域,即函 ...