读书笔记:计算机网络基本概念
0.网络
网络就是若干计算机主机或者其他接口设备,通过网线或者无线网络技术连接起来,使得数据得以通过网络介质(网线以及其他网卡等硬件)来传输的一种方式。网络硬件和软件非常多,经IEEE和ISO标准规范的是以太网(Ethernet)和因特网(Internet)。
1.计算机网络组成组件
- 节点(node):具有网络地址(IP)的设备的统称,如一般PC、服务器主机、ADSL调制解调器和网络打印机。
- 服务器(server):提供数据以响应给用户的网络节点。
- 客户端(client)或工作站(workstation):发起连接去请求数据的网络节点。
- 网卡(Network Interface Card,NIC):网络连接硬件设备,一般节点上都具有一个以上的网卡来实现网络连接。
- 网络接口:网络连接软件实现,主要任务是提供网络地址(IP),每张网卡可以搭配一个以上的网络接口,每部机器拥有一个内部网络接口loopback(lo)循环测试。
- 网络拓扑(topology):各个节点在网络上的(物理)连接方式。
- 网关(gateway):具有两个以上的网络接口,连接两个以上不同网段的设备,如IP路由器。
2.计算机网络范围
局域网(Local Area Network,LAN)和广域网(Wide Area Network,WAN),以数据传输距离定义,可以使用“速度”作为一个网络区域范围的评价标准。
3.计算机网络协议:OSI七层协议
OSI(Open System Interconnection)七层协议将整个网络连接过程分成七个层次(layer),每个层次都有特定的独立的功能,越接近硬件的层次为底层(layer 1),越接近应用程序的层次为高层(layer 7),不论是接收端还是发送端,每一层都只认识对方的同一层次的数据。数据传送时,发送端通过应用程序将数据放入第七层的包裹,再将第七层的包裹放到第六层的包裹内,依序一直放到第一层的包裹内,然后传送给接收端;接收端从接收的第一个包裹开始,依序将每个包裹拆开,然后一个一个地交给对应负责的层次来查看。每层的包裹都有自己独特的头部信息(header),记录包裹来自哪里、要去哪里、接受者是谁等,包裹里面才是真正的数据。其中第二层(Data-Link Layer)比较特殊,位于软件包(packet)和硬件数据帧(frame)之间,需要将软件包装的包裹放入到硬件能够处理的包裹中。
- 物理层(Physical Layer)
定义传输设备电压信号,数据帧(MAC frame)编码为比特流,连接实际传输介质发送/接收比特信号。
- 数据链路层(Data-Link Layer)
特殊的一层,其下层是实体的定义,上层是软件封装的定义,因此分为两个子层进行数据转换操作。硬件部分MAC(Media Access Control),获取网络介质,接收和发送MAC frame;软件部分LLC(Logical Link Control),多任务处理来自上层的数据包(packet)并转换成MAC格式。
- 网络层(Network Layer)
定义IP(Internet Protocol)和路由(route)数据包:计算机之间连接的建立、维持与终止,选择packet的传输路径。
- 传输层(Transport Layer)
定义发送端与接收端的连接技术 (TCP、UDP),包括该技术的数据包格式、数据包的发送接收、流程控制、传输过程的侦测检查与重新发送。
- 会话层(Session Layer)
定义两个地址之间连接信道的连接与中断,建立应用程序之间的会话。
- 表示层(Presentation Layer)
定义应用程序数据格式与网络标准格式的转换,加密解密。
- 应用层(Application Layer)
定义应用程序进入应用层的接口,接收和发送数据给应用程序。
4.计算机网络协议:TCP/IP
TCP/IP协议将OSI七层协议简化为四层:
- 网络接口层(OSI的物理层和数据链路层);
- 网络层;
- 传输层;
- 应用层(OSI的会话层、表示层和应用层)。
5.TCP/IP网络接口层的以太网传输协议:CSMA/CD
Ethernet的传输主要是NIC到NIC之间的数据传输,使用载波监听多路访问技术(Carrier Sense Multiple Access with Collision Detection,CSMA/CD)。
- 监听介质使用情况(Carrier Sense):发送端发送数据包前需要先对网络介质进行监听,确定没有被占用后,才能够发送出数据帧。
- 多点传输(Multiple Access):发送端发送的数据会被集线器(Hub)复制一份然后发送给所有连接到此Hub的计算机,接收端会将此数据帧抓下来处理,其他主机会丢弃。
- 冲突检测(Collision Detection):数据帧附有检测能力,其他主机刚好在同一时间发送数据帧时,产生数据冲突,此时这些数据帧会被损毁,两个发送端需要随机等待一个时间,重新执行传输。
CSMA/CD发送的数据为MAC frame。MAC frame上有目标和来源网卡卡号(Hardware Address,硬件地址),因此网卡卡号简称为MAC地址。每一张网卡都有一个6bytes大小的独一无二的卡号,从00:00:00:00:00:00到FF:FF:FF:FF:FF:FF(十六进制)。这6bytes中,前3bytes为厂商代码;后3bytes为厂商自定义配置码。MAC frame是网络硬件上传送数据的最小单位。如果网线是“一次仅可通过一个人”的独木桥,MAC frame就是独木桥上行走的人。
MAC的传送仅能在局域网LAN内生效,MAC不能Router。
标准Ethernet所能传送的最大frame为1500bytes,这个数值称为最大传输单元(Maximum Transmission Unit,MTU)。
在CSMA/CD下,使用Hub会产生传输冲突,因为Hub是网络共享设备。使用交换器(Switch)可以避免这种情况。Switch里面有一个特别的内存,记录每个Switch port与其连接的节点的MAC地址,当来自Switch两端的计算机要互传数据时,每个frame直接通过Switch的内存传送到目标主机。Switch不是共享设备,每个port都具有独立的带宽。8蕊网线被实际使用的两对中,一对用于发送,另一对用于接收,以实现全双工(full-duplex)。Hub不支持全双工,而支持full-duplex的Switch设备,其两端的计算机可以达到全双工。
6.TCP/IP网络层
Ethernet是目前最常见的网络硬件接口,包括网线、网卡以及Hub/Switch等,Ethernet传输使用网卡卡号为标准的MAC frame,配合CSMA/CD标准传送数据帧;Internet是软件部分,是TCP/IP通信协议的通称。TCP/IP网络层主要是IP与路由。IP是一种网络数据包封装,可以达到65535bytes,操作系统会对IP packet拆解来适应MAC的大小。每个IP packet包含若干行头数据,每行32bits。
- Time TO Live(TTL,生存时间)
IP packet的生存时间,范围为0~255。IP packet每通过一个Router时TTL就会减1,当TTL为0时,这个数据包就会被丢弃。
- Protocol Number(协议代码)
记录packet内的数据是什么,其代码与指代数据包协议名称如下。
1 → ICMP(Internet Control Message Protocol)
2 → IGMP(Internet Group Management Protocol)
3 → GGP(Gateway-to-Gateway Protocol)
4 → IP(IP in IP encapsulation)
6 → TCP(Transmission Control Protocol)
8 → EGP(Exterior Gateway Protocol)
17 → UDP(User Datagram Protocol)
- Source Address(来源IP地址)
- Destination Address(目标IP地址)
IP packet头数据里面最重要的信息就是32位的来源和目标IP网络地址。IP地址由32bits的数值组成,即32个0和1组成的一连串数字。为了顺应人们对十进制的依赖性,每8bits分成一段,换算成十进制,共分为四个小段,段与段之间以小数点隔开。
所以IP最小可以由0.0.0.0一直到255.255.255.255。IP地址还可以细分为Net_ID(网络ID)和Host_ID(主机ID)两部分。同一个网络(网段)的定义即指在同一个物理网段内,主机IP具有相同的Net_ID,而具有唯一的Host_ID,这些IP群就是同一个网络内的IP网段,一共256个。在同一网段内,Host_ID在二进制表示法中不能同时为0也不能同时为1,全为0表示整个网段(Network IP),而全为1则表示广播地址(Broadcast IP)。
Internet IP有两种版本,一种是目前使用的IPv4(Internet Protocol version 4),记录的地址32位;另一种是前瞻的IPv6,可以记录128位地址。IPv4有两种类别,Public IP(公共IP)和Private IP(私有IP),前者用于连接Internet,后者应用于局域网。DHCP(Dynamic Host Configuration Protocol)自动获取网络参数。
为了IP管理和发放注册的方便性,整个IP网段分为五个等级(class),其32bits二进制数值的开头分别为0、10、110、1110和1111。
将Host_ID位用作Net_ID位,子网(Subnet)还可以继续划分为更小的Subnet,这通过子网掩码(Netmask)这个网络参数定义。netmask也是32位,所有的Net_ID位值都为1,Host_ID位值都为0。
网络细分太严重会使得路由信息过于庞大导致网络效能不佳。相反地,某些情况下,反而将Net_ID位借来用作Host_ID,合并多个网络为一个。这种借助Netmask规范打破原本IP等级的方式称为无类别域间路由(Classless Interdomain Routing,CIDR)。通过Network和Netmask就可以定义网络内的所有IP,Broadcast可以根据Netmask推算出来。所以,常以Network和Netmask来表示一个网络。
相同的网段内可以通过Broadcast来传输数据,跨网络数据传输就涉及到IP的路径选择(routing)。网关/路由器(Gateway/Router)负责不同网络间数据包的转递(IP Forwarding)。Router具有IP Forwarding的功能,管理路由的能力,可以将来自不同网络之间的packet进行转递。每一台主机都有自己的路由表(Route table),数据的传递以此为依据进行传送。Linux下可以通过route命令查看主机的路由表,其第一栏为目的地网络,最后一栏是要去到这个目的地要使用哪一个网络接口。如果要传输的packet目的地IP不在路由规则里面,数据包就会被传送到“default”。几乎每一台主机都会有一个Default Gateway来负责非网络内的packet传输。
Internet实际上还是通过Ethernet传递数据的,Internet IP与Ethernet MAC之间的关联,就是网络地址解析协议(Address Resolution Protocol,ARP)以及反向网络地址解析协议(Reverse ARP)。当需要了解某个IP配置于哪张以太网卡上时,主机会对整个网络发送出ARP数据包,对方收到ARP数据包后就会返回它的MAC,主机就会知道对方的网卡,就下来就能够开始数据传输了。如果每次数据传输前都走一遍ARP协议是非常麻烦的。因此,使用ARP协议获取目标IP与其网卡卡号后,就会记录到主机的ARP table中,缓存20分钟。
因特网信息控制协议(Internet Control Message Protocol,ICMP)是一个错误检测与报告的机制,最大的功能就是可以确保网络连接与连接状态的正确性。ICMP数据包并不是独立存在的,同样是通过IP packet进行数据传送的。常用的网络状态检查命令ping和traceroute就是利用ICMP packet。
7.TCP/IP传输层
网络层的IP packet只负责将数据送到正确的目标主机,但这个packet会不会被接受以及有没有正确的接收,就不是IP的任务了,这是传输层的任务之一。传输层主要包括两种数据包,一种是面向连接的TCP packet,另一种是无连接的UDP packet。其中最常见的是TCP数据包,TCP packet需要放到IP packet中。TCP也有头数据记录数据包的相关信息。
- Code(Control Flag,控制标志码)
大小为6bits,分别代表6个状态位句柄。
①URG(Urgent):若为1代表该packet为紧急数据包。
②ACK(Acknowledge):若为1代表该packet为响应数据包。
③PSH(Push function):若为1代表要求对方立即传送缓冲区内的其他对应数据包,而无需等待缓冲区用满。
④RST(Reset):若为1表示连接会马上结束而无需等待终止确认,即这是个强制结束的连接,发送端已断线。
⑤SYN(Synchronous):若为1表示发送端希望双方建立同步处理,“主动”连接对方。
⑥FIN(Finish):若为1表示传送结束,通知对方数据传毕是否同意断线,发送者还在等待对方响应。
- Source Port(源端口)
- Destination Port(目标端口)
TCP头信息中,最重要的就是一对16位的来源与目标端口。因为是16bits,所以端口最大可达65535。为了方便和规范端口使用,Internet规定了一些特权端口(Privileged Port),启动者的身份必须要是root。这些port通常小于1024。Linux环境下,各网络服务与port number的对应默认写在/etc/services文件内。
由于网络是双向的,要达成连接需要服务器和客户端均提供IP与port才行,这个成对的数据称为Socket pair,网络寻址常常使用“IP:Port”。TCP是可靠的数据传输协议,主要的实现机制被称为“TCP三次握手”(Three-way handshake),不论是服务器还是客户端,都必须通过一次SYN和ACK来建立连接。
UDP不提供可靠的数据传输模式,它不考虑连接请求、连接终止和流量控制,不是面向连接的机制。在UDP传输过程中,接收端在接收到数据后,不会回复响应数据包给发送端。TCP packet的确是比较可靠的,因为通过三次握手。正因如此,TCP的传输速度会比较慢。UDP不需要ACK,头数据较少,packet里面可以填入更多的数据。UDP比较适合需要实时反应的一些数据流。
8.连接Internet
Internet使用TCP/IP通信协议,使用Public IP可以连接Internet。原始的32位IP即便转换成4小段的十进制数字,还是不方便记忆使用。好在计算机都有自己的主机名称,将主机名称与它的IP对应起来,要连接上该计算机,只要知道它的主机名称就可以了。主机名称(Host Name)对应IP地址的系统,即域名系统(Domain Name System,DNS)。即DNS最大的功能就是进行“主机名称与主机IP的解析”的一项协议。计算机要向DNS服务器查询Host Name对应的IP信息,就需要设置DNS主机的IP,以连接DNS服务器发送域名解析请求。Linux环境下,DNS服务器的IP设定是在/etc/resolv.conf文件。
一台主机如果要使用网络,必须要有IP。在IP的设置中,必须要有Network、Broadcast、Netmask等参数。跨网段传送数据包,还需要考虑路由里面的Default Gateway。为了主机名与IP的对应,还需要给系统添加一个DNS服务器的IP。所以,一组完整的网络设置包括以下参数。
- IP
- Netmask
- Network
- Broadcast
- Gateway
- DNS
内容整理自:
《鸟哥的Linux私房菜-服务器架设篇》(https://book.douban.com/subject/10794788/)
《Computer Networking A Top-Down Approach》(https://book.douban.com/subject/10573157/)