计算机网络初识
计算机网络的起源
目前遍及全世界的国际互联网,最初的来源是美国国防部的一个军事网络。当初设计它时,并没有想到要把网络拉到全世界,只是单纯地希望如果有一天核战争爆发,能有一种网络在受到毁灭性攻击之后,仍然可以通行全世界,具有迅速恢复畅通的能力。
从ARPANET到NSFNET
70年代,美国国防部开始进行DARPA计划,开始架设高速且有弹性的网络,重点是当美、前苏两地间的网络如果断线时,资料仍可经由别的国家绕道,到达目的地。而这项计划的成果就是ARPANET。之后随冷战的解冻,ARPANET也慢慢开放给民间使用。但是美国基于军事安全上的考虑,另外成立了国家科学基金会(National Science Foundation),建立NSFNET,专门负责全球性民间的网络交流。这就是美国的INTERNET。从英文上来说,Internet与INTERNET是完全不一样的意思。INTERNET:指的就是美国的NSFNET,也就是Internet国际互联网,单在美国的这个部分。Internet:则泛指“全世界”各国家利用TCP/IP通讯协定所建立的各种网络(范围包括全世界而不单指某一地)。目前你使用电脑拨号上网,就是Internet国际互联网喔。虽然美国政府拥有Internet的很多权限,但是为了科技的发展,美国本身并没有对网络上的任何行为收取大量的权利金(因为国际互联网是美国政府出钱研究开发的),所以很多的研究机构,得以以很低的成本加入Internet技术与服务的研究开发,Internet也因此得以发展成全世界最广的网络。所有的服务都是通过Internet的吗?其实不是!出于安全性的考虑,有些资料,例如金融、电信、国家机密等通常不采用一般的Internet网络传输。例如:电信的服务,因为资料量相当大,电信局通常会自己维护一个电信网络。同样地,银行的财务系统也是独立的网络,通常是向电信局租的。金融系统必须非常重视安全性与速度,如果接到Internet上的话,就可能会发生黑客入侵的现象,这样就可能会造成个人或银行财产上的损失。其实世界上存在着各种不同的网络,并不仅限于我们所认识的Internet,例如各银行间有自己的财政系网络;航空业也有自己互通讯息的网络;军事单位有战管的网络;先进的欧美国家,一直都有先进的网络技术在开发,这些也都是一个一个的网络。“国际互联网”在其中只是一个规模最大、最热门、也是最开放的一个。
网络的网络
了解了网络的起源与发展之后,那么我们可以这么说,网络把主机连接起来,而互联网是把多种不同的网络连接起来,因此互联网就是网络的网络。
ISP
ISP就是互联网服务提供商。ISP可以从互联网管理机构获取很多的IP地址,同时拥有通信线路以及路由器等联网设备,个人或者机构向ISP缴纳一定的费用,就可以接入互联网,获取网络资源。
我们上网是干啥?
实际上,我们经常说的上网,其实就是访问互联网上的资源。
主机之间的通信方式
-
客户端-服务端(C/S):客户端是主动发起请求,服务端是被动响应提供服务的一方。
-
端到端(P2P):不区分客户端和服务端。
计算机网络体系架构
1. OSI七层参考模型
- 应用层 : 为特定应用程序提供数据传输服务,例如 HTTP、DNS 等协议。数据单位为报文。
- 表示层 : 数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。
- 会话层 : 建立及管理会话。
- 传输层 : 为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。
- 网络层 : 为主机提供数据传输服务。而传输层协议是为主机中的进程提供数据传输服务。网络层把传输层传递下来的报文段或者用户数据报封装成分组。
- 数据链路层 : 网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。
- 物理层 : 考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。
2. 五层协议
五层协议取消掉了 OSI 七层参考模型中的会话层和表示层,五层协议将这俩层的功能留给了应用程序开发者来处理。
3. TCP/IP协议
TCP/IP协议只有四层,相当于五层协议中合并了底层俩层,合并为了网络接口层。
TCP/IP协议体系结构不严格遵守 OSI 分层结构,当下网络使用的主要协议。
思考:
OSI七层参考模型分层如此清晰,那为什么我们不使用OSI模型在现实工程中呢?
原因:OSI模型固然清晰,但是实现起来过于繁杂,换种话说,有些理论根本无法实现,所以我们现实中都在使用TCP/IP协议架构。
计算机网络各层解析
物理层
- 单工通信:单向传输
- 半双工通信:双向交替传输
- 全双工通信:双向同时传输
主要任务: 确定与传输媒体的接口的一些特性。
1. 机械特性: 指明端口所有接线器的形状和尺寸、引线数目和排列、固定和锁定装置等。
2. 电气特性: 指明在接口电缆的各条线上出现的电压的范围。4V—6V表示二进制‘0’,用-4V—(-6V)表示二进制‘1’。
3. 功能特性: 指明某条线上出现的某一电平的电压表示何种意义。
4. 过程特性: 指明对于不同功能的各种可能事件的出现顺序。
数据链路层
1. 封装成帧
将网络层传下来的分组添加首部和尾部,用于标记帧的开始和结束。
2. 透明传输
帧使用首部和尾部进行定界,如果帧的数据部分含有和首部尾部相同的内容,那么帧的开始和结束位置就会被错误的判定。需要在数据部分出现首部尾部相同的内容前面插入转义字符。如果数据部分出现转义字符,那么就在转义字符前面再加个转义字符。在接收端进行处理之后可以还原出原始数据。这个过程透明传输的内容是转义字符,用户察觉不到转义字符的存在。
3. 差错检测
目前数据链路层基本使用了循环冗余检测(CRC)来检测比特差错。
MAC 地址是数据链路地址,长度为6字节(48位), 用于唯一标识网卡。
一台主机拥有多少网卡就会有多少MAC地址。
交换机具有自学习能力,学习的是交换表的内容,交换表中存储着 MAC 地址到接口的映射。正是由于这种自学习能力,因此交换机是一种即插即用设备,不需要网络管理员手动配置交换表内容。
下图中,交换机有 4 个接口,主机 A 向主机 B 发送数据帧时,交换机把主机 A 到接口 1 的映射写入交换表中。为了发送数据帧到 B,先查交换表,此时没有主机 B 的表项,那么主机 A 就发送广播帧,主机 C 和主机 D 会丢弃该帧,主机 B 回应该帧向主机 A 发送数据包时,交换机查找交换表得到主机 A 映射的接口为 1,就发送数据帧到接口 1,同时交换机添加主机 B 到接口 2 的映射。
虚拟局域网可以建立与物理位置无关的逻辑组,只有在同一个虚拟局域网中的成员才会收到链路层广播信息。例如下图中 (A1, A2, A3, A4) 属于一个虚拟局域网,A1 发送的广播会被 A2、A3、A4 收到,而其它站点收不到。使用 VLAN 干线连接来建立虚拟局域网,每台交换机上的一个特殊接口被设置为干线接口,以互连 VLAN 交换机。IEEE 定义了一种扩展的以太网帧格式 802.1Q,它在标准以太网帧上加进了 4 字节首部 VLAN 标签,用于表示该帧属于哪一个虚拟局域网。
网络层
网络层是整个互联网的核心,那么应该让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。
用于唯一标识互联网中的主机。
IPV4数据报格式
网络层实现主机之间的通信,而数据链路层实现具体的每段链路之间的通信。因此在通信过程中,IP数据报的源和目的地址始终不变,而 MAC 地址随着链路的改变而改变。
ARP 可以实现 IP 地址得到 MAC 地址。
传输层
网络层只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程。传输层提供了进程间的逻辑通信,传输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是在两个传输层实体之间有一条端到端的逻辑通信信道。
-
TCP 和 UDP 的特点
-
用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。
-
传输控制协议 TCP(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。
-
UDP 首部格式
首部字段只有 8 个字节,包括源端口、目的端口、长度、检验和。12 字节的伪首部是为了计算检验和临时添加的。
假设 A 为客户端,B 为服务器端。
-
首先 B 处于 LISTEN(监听)状态,等待客户的连接请求。
-
A 向 B 发送连接请求报文,SYN=1,ACK=0,选择一个初始的序号 x。B 收到连接请求报文,如果同意建立连接,则向 A 发送连接确认报文,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。
-
A 收到 B 的连接确认报文后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。
-
B 收到 A 的确认后,连接建立。
-
为什么要三次握手
三次握手的原因:第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。