一 网络基础知识
计算机网络发展的7阶段
- 批处理
事先将用户程序和数据装入卡带或磁带,并由计算机按照一定的顺序读取,
使用户所要执行的这些程序和数据能够一并批量得到处理的方式
- 分时系统(TSS(Time Sharing System) )
它是指多个终端(由键盘、显示器等输入输出设备组成.最初还包括打字机.)
与同一个计算机连接,允许多个用户同时使用一台计算机的系统
- 计算机间的通信技术
计算机与计算机之间由通信线路连接,人们能够很轻松地即时读取另一台计算机中的数据,
从而极大地缩短了传送数据的时间
人们不再局限于仅使用一台计算机进行处理,而是逐渐使用多台计算机分布式处理,最终
一并得到返回结果
- 计算机网络的产生
20世纪70年代初期,人们开始实验基于分组交换技术的计算机网络,
并着手研究不同厂商的计算机之间相互通信的技术.到了80年代,一种能够互连多种计算机的网络随之诞生
- 互联网的普及
通过连接不同厂商的计算机建立一个成本更低的网络环境.
而连接异构型计算机的通信网络技术就是现在我们所看到的互联网技术
- 以互联网技术为中心的时代
IP网是互联网技术的产物.通过IP网,人们不仅可以实现电话
通信、电视播放,还能实现计算机之间的通信,建立互联网
- 从"单纯建立连接"到"安全建立连接"
TCP/IP
互联网是由许多独立发展的网络通信技术融合而成.能够使它们之间不断融合并实现统一的正是TCP/IP技术
TCP/IP是通信协议的统称,是IP、TCP、HTTP等协议的集合
- 协议就是计算机与计算机之间通过网络实现通信时事先达成的一种"约定".
这种"约定"使那些由不同厂商的设备、不同的CPU以及不同的操作系统组成的计算机之间,
只要遵循相同的协议就能够实现通信
- 分组交换协议
网络通信方式大致分为两种——电路交换和分组交换
- 电路交换技术主要用于过去的电话网, 某条电路只是用来连接两台计算机的通信线路,意味着只需
在这两台计算机之间实现通信, 就独占线路进行数据传输. 但是, 并发用户数超过交换
机之间的通信线路数,就意味着通信根本无法实现.
为此, 人们想到新的方法就是分组交换协议
- 分组交换是指将大数据分割为一个个叫做包(Packet)的较小单位进行传输的方法. 即让连接到通信电路的计算机将
所要发送的数据分成多个数据包,按照一定的顺序排列之后分别发送.这就是分组交换.
-
- 数据被细分后,所有的计算机就可以一齐收发数据,这样也就提高了通信线路的利用率.由于在分组的过程
中,已经在每个分组的首部写入了发送端和接收端的地址,所以即使同一条线路同时为多个用户提供服务,也可以明确区分每个分组数据发往的目的地,以及它是与哪台计算机进行的通信
-
- 分组交换的大致处理过程是:发送端计算机将数据分组发送给路由器,路由器收
到这些分组数据以后,缓存到自己的缓冲区,然后再转发给目标计算机.因此,分组交换也有另一个名称:蓄积交换
- 协议分层与OSI参考模型
在OSI模型中,模型将通信协议中必要的功能分成了7层, 每个分层都接收由它下一层所提供的特定服务,
并且负责为自己的上一层提供特定的服务.上下层之间进行交互时所遵循的约定叫做"接口".
同一层之间的交互所遵循的约定叫做"协议".
分层名称 |
功能 |
功能概览 |
设备 |
应用层 |
为应用程序提供服务并规定应用程序中通信相关的细节 |
邮件协议, 远程登录, 文件传输 |
4-7层交换机 |
表示层 |
数据格式的转换 |
将设备固有的数据格式转换为网络标准传输格式 |
4-7层交换机 |
会话层 |
负责建立和断开通信连接(数据流动的逻辑通路)以及数据的分割等数据传输相关的管理 |
逻辑通路管理 |
4-7层交换机 |
传输层 |
管理两个节点之间的数据传输 |
起着可靠传输的作用 |
网关: 4-7层间进行协议转换 |
网络层 |
目标地址可以是多个网络通过路由器连接而成的.因此主要负责寻址和路由选择 |
将数据传输到目标地址 |
路由器 |
数据链路层 |
负责物理层面上互连的、节点之间的通信传输 |
将0、1序列划分为具有意义的数据帧传送给对端 |
网桥 |
物理层 |
负责0、1比特流(0、1序列)与电压的高低、光的闪灭之间的互换 |
|
中继器 |
二 TCP/IP基础知识
TCP(Transmission Control Protocol)和IP(Internet Protocol)
发展历史
分组交换技术实现的分组通信, 可以使多个用户同一时间共享一条通信线路进行通信,从而提高了线路的使用效率,
也降低了搭建线路的成本.
1969年,为验证分组交换技术的实用性,研究人员搭建了一套网络, ARPANET(Advanced Research Projects
Agency Network,阿帕网.)ARPANET网络组成之初,由于其节点个数的限制,TCP/IP的应用范围也受到一定的限制,
到80年代UNIX工作站迅速普及, BSD UNIX的操作系统实现了TCP/IP协议, 那些大学和研究机构也逐渐开始将ARPANET连接到了NSFnet网络.
此后,基于TCP/IP而形成的世界性范围的网络——互联网(The Internet)便诞生了
以连接UNIX主机的形式连接各个终端节点,这一主要方式使互联网得到了迅速的普及
标准化
TCP/IP的协议的标准化过程与其他的标准化过程有所不同,
具有两大特点:一是具有开放性,二是注重实用性,即被标准化的协议能否被实际运用
需要标准化的协议,被人们列入RFC(Request For Comment)
(RFC从字面意义上看就是指征求意见表,属于一种征求协议相关意见的文档.)
http://www.rfc-editor.org/rfc/
上面两个网址保存着所有RFC文件,网站中有一个名为rfc-index.txt的文件包含了所有RFC的概览
- STD获取网址
http://www.rfc-editor.org/in-notes/std/
- FYI获取网址
http://www.rfc-editor.org/in-notes/fyi/
TCP/IP协议分层模型
分层名称 |
协议 |
系统级别 |
数据单位 |
应用层 |
smtp, http, snmp |
应用程序 |
消息 |
表示层 |
mime, html, mib |
应用程序 |
消息 |
会话层 |
ftp |
应用程序 |
消息 |
传输层 |
TCP UDP |
OS |
段 |
网络层 |
ARP IP ICMP |
OS |
数据报 |
数据链路层 |
网卡层 |
设备驱动程序与网络接口 |
帧 |
物理层 |
硬件 |
设备驱动程序与网络接口 |
0/1序列 |
- 互联网层(网络层)
互联网层使用IP协议,它相当于OSI模型中的第3层网络层.IP协议基于IP地址转发分包数据.
TCP/IP分层中的互联网层与传输层的功能通常由操作系统提供.尤其是路由器,它必须得实现通过互联网层转发分组数据包的功能.
此外,连接互联网的所有主机跟路由器必须都实现IP的功能.
- IP
是跨越网络传送数据包,使整个互联网都能收到数据的协议.IP协议使数据能够发送到地球的另一端,这期间它使用IP地址作为主机的标识
IP还隐含着数据链路层的功能, 相互通信的主机之间不论经过怎样的底层数据链路都能够实现通信
虽然IP也是分组交换的一种协议,但是它不具有重发机制
- ICMP
IP数据包在发送途中一旦发生异常导致无法到达对端目标地址时,需要给发送端发送一个发生异常的通知.ICMP就是为这一功能而制定的
- ARP
从分组数据包的IP地址中解析出物理地址(MAC地址)的一种协议
- 传输层
传输层最主要的功能就是能够让不同主机上的应用程序之间实现通信.
计算机内部,通常同一时间运行着多个程序.为此,必须分清是哪些程序与哪些程序在进行通信.识别这些应用程序的是端口号
- TCP
TCP是一种面向有连接的传输层协议.它可以保证两端通信主机之间的通信可达.
TCP能够正确处理在传输过程中丢包、传输顺序乱掉等异常情况.此外,TCP还能够有效利用带宽,缓解网络拥堵.
然而,为了建立与断开连接,有时它需要至少7次的发包收包,导致网络流量的浪费
- UDP
UDP有别于TCP,它是一种面向无连接的传输层协议.UDP不会关注对端是否真的收到了传送过去的数据,
如果需要检查对端是否收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现.
UDP常用于分组数据较少或多播、广播通信以及视频通信等多媒体领域
- 应用层(会话层以上的分层)
TCP/IP的分层中,将OSI参考模型中的会话层、表示层和应用层的功能都集中到了应用程序中实现.
这些功能有时由一个单一的程序实现,有时也可能会由多个程序实现
- WWW
万维网,是一种互联网上数据读取的规范
用户通过浏览器, 借助鼠标和键盘就可以轻轻松松地在网上自由地冲浪, 访问服务器上的各种资源.
浏览器与服务端之间通信所用的协议是HTTP(HyperText TransferProtocol).
所传输数据的主要格式是HTML(HyperText MarkupLanguage).WWW中的HTTP属于OSI应用层的协议,而HTML属于表示层的协议
- 电子邮件(E-Mail)
SMTP(Simple Mail Tranfer Protocol)
电子邮件的格式由MIME(用来定义邮件数据格式一种规范) 协议扩展以后,就可以发送声音、图像等各式各样的信息.
MIME属于OSI参考模型的第6层——表示层
- 文件传输
该过程使用的协议叫做FTP(File Transfer Prototol), 在FTP中进行文件传输时会建立两个TCP连接,分别是发出传输请
求时所要用到的控制连接与实际传输数据时所要用到的数据连接(这两种连接的控制管理属于会话层的功能.)
- 远程登录(TELNET与SSH)
TCP/IP网络中远程登录常用
TELNET(TELetypewriter NETwork的缩写.有时也称作默认协议.)和SSH(SSH是Secure SHell的缩写.)
- 网络管理(SNMP)
SNMP(Simple NetworkManagement Protocol).使用SNMP管理的主机、网桥、路由器等
称作SNMP代理(Agent),而进行管理的那一段叫做管理器(Manager).SNMP正是这个Manager与Agent所要用到的协议.
在SNMP的代理端,保存着网络接口的信息、通信数据量、异常数据量以及设备温度等信息.这些信息可以通过MIB(Management
Information Base)(MIB也被称为是一种可透过网络的结构变量.) 访问.
因此,在TCP/IP的网络管理中,SNMP属于应用协议,MIB属于表示层协议.
TCP/IP分层模型与通信示例
每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息.
通常,为协议提供的信息为包首部,所要发送的内容为数据.
数据包的首部,明确标明了协议应该如何读取数据.反过来说,看到首部,也就能够了解该协议必要的信息以及所要处理内容
- 模型中每层的数据单位:
应用层, 表示层, 会话层: 消息
传输层: 段
网络层: 数据报
数据链路层: 帧
物理层: 0/1序列
- 计算机A向另一台计算机B发送电子邮件的TCP/IP通信的过程
-
应用层: 启动程序新建邮件, 填写收件人, 内容等等, 直到点击发送按钮
-
表示层: 汉字按utf-8进行编码
-
会话层: 编码转化后,实际邮件不一定会马上被发送出去,因为有些邮件的软件有一次同时发送多个邮件的功能,
也可能会有用户点击"收信"按钮以后才一并接收新邮件的功能.建立通信连接何时发送数据的管理功能属于会话层
-
传输层: TCP模块. TCP根据应用(会话层)的指示,负责建立连接、发送数据以及断开连接.
为了实现TCP的这一功能,需要在应用层数据的前端附加一个TCP首部.
-
- TCP首部中包括源端口号和目标端口号(用以识别发送主机跟接收主机上的应用)、
-
-
- 校验和(Check Sum,用来检验数据的读取是否正常进行的方法用以判断数据是否被损坏).
随后将附加了TCP首部的包再发送给IP
-
网络层 IP模块
IP将TCP传过来的TCP首部和TCP数据合起来当做自己的数据,并在TCP首部的前端在加上自己的IP首部.
因此,IP数据包中IP首部后面紧跟着TCP首部,然后才是应用的数据首部和数据本身.
-
-
- 紧随IP首部的还有用来判断其后面数据是TCP还是UDP的信息.
IP包生成后,参考路由控制表决定接受此IP包的路由或主机.
随后,IP包将被发送给连接这些路由器或主机网络接口的驱动程序,以实现真正发送数据.
如果尚不知道接收端的MAC地址,可以利用ARP(AddressResolution Protocol)查找.
只要知道了对端的MAC地址,就可以将MAC地址和IP地址交给以太网的驱动程序,实现数据传输
-
数据链路层, 网卡(以太网驱动)
给IP层传过来的数据报附加上以太网首部并进行发送处理.
-
- 以太网首部中包含接收端MAC地址、发送端MAC地址
-
- 以及标志以太网类型的以太网数据的协议.
根据上述信息产生的以太网数据包将通过物理层传输给接收端.
-
- 发送处理中的FCS(Frame Check Sequence) 由硬件计算,添加到包的最后
经过每个协议分层时,都必须有识别包发送端和接收端的信息.
以太网会用MAC地址,IP会用IP地址,而TCP/UDP则会用端口号作为识别两端主机的地址.
此外,每个分层的包首部中还包含一个识别位,它是用来标识上一层协议的种类信息
数据包接收处理
包的接收流程是发送流程的逆序过程
-
数据链路层, 网卡(以太网驱动)
-
- 主机收到以太网包以后,首先从以太网的包首部找到MAC地址判断是否为发给自己的包
-
- 是发给自己的包,就查找以太网包首部中的类型域从而确定以太网协议所传送过来的数据类型.
-
- 在这个例子中数据类型显然是IP包,因此再将数据传给处理IP的子程序,
如果这时不是IP而是其他诸如ARP的协议,就把数据传给ARP处理.
总之,如果以太网包首部的类型域包含了一个无法识别的协议类型,则丢弃数据
-
IP模块的处理
-
- 判断包首部中的IP接收端地址是否与自己的IP地址匹配,若是, 则可接收数据并从中查找上一层的协议.
-
- 如果上一层是TCP就将IP包首部之后的部分传给TCP处理;如果是UDP则将IP包首部后面的部分传给UDP处理.
对于有路由器的情况下,接收端地址往往不是自己的地址,
此时,需要借助路由控制表,在调查应该送达的主机或路由器以后再转发数据
-
TCP模块的处理
-
- 在TCP模块中,首先会计算一下校验和,判断数据是否被破坏.
-
- 然后检查是否在按照序号接收数据.最后检查端口号,确定具体的应用程序.
-
- 数据接收完毕后,接收端则发送一个"确认回执"给发送端.
如果这个回执信息未能达到发送端,那么发送端会认为接收端没有接收到数据而一直反复发送.
-
- 数据被完整地接收以后,会传给由端口号识别的应用程序
-
应用程序的处理
接收端应用程序会直接接收发送端发送的数据.通过解析数据可以获知邮件的收件人地址是乙的地址.
如果主机B上没有接收人的邮件信箱,那么主机B返回给发送端一个"无此收件地址"的报错信息.
如果有, 就接收电子邮件的正文.邮件会被保存到本机的硬盘上.
如果保存也能正常进行,那么接收端会返回一个"处理正常"的回执给发送端.
反之,一旦出现磁盘满、邮件未能成功保存等问题,就会发送一个"处理异常"的回执给发送端.
由此,接收人就可以利用主机B上的邮件客户端,接收并阅读由主机A上的发送用户所发送过来的电子邮件.
SNS(Social Network Service)
社交网络通信实例,是一种即时共享,即时发布消息给圈内特定联系人的一种服务
移动电话、智能手机、平板电脑等在进行分组数据的通信,
因此在它们装入电池开机的那一刻,已经由通信运营商设定了具体的IP地址.
启动移动电话中的应用程序时,会连接指定的服务器,
经过用户名、密码验证以后服务器上积累的信息就会发送到手机终端上,并由该终端显示具体内容.