计算机网络基础
本文主要介绍计算机网络的基础知识,为以后网络编程作基础。
学习网络编程,应时刻铭记一条基本原则:
“网络是不可靠的,数据包是可能丢失的”
0. 概念
ISP,Internet Service Provider,因特网服务提供商,是由多个分组交换机和通信链路组成的网络,提供多种不同类型的网络接入。
1. 网络分层模型
OSI模型
{物理层,数据链路层}-{网络层}-{传输层}-{会话层,表示层,应用层}
Open System Interconnection(开放式系统互联模型),OSI规范不同操作系统的互联标准,使两个不同的系统能够较容易的通信而不需要改变底层的硬件或软件的逻辑。
- 应用层(Application Layer):网络应用程序及应用层协议,文件服务、电子邮件等;
- 表示层(Presentation Layer):完成一些特定的功能,数据格式化、加解密、代码转换等;
- 会话层(Session Layer):允许不同机器上的用户(端点)之间建立会话关系;
- 传输层(Transport Layer):应用程序端点到端点(源端和目的端机器上的对等实体)之间传送应用层报文,从会话层接收数据,并传输给网络层,同时确保到达目的端的各段信息正确无误,而且使会话层不受硬件变化的影响;增强网络层服务质量;
- 网络层(Network Layer):确定分组从源端到目的端的路由选择,主机到主机的数据包传送;
- 数据链路层(Data Link Layer):数据链路层:建立相邻结点之间的数据链路、加强物理层的功能,错误检测机制提供数据帧在信道上无差错传输,通过路由器在源/目的地址之间转发分组(传输有地址的帧);
- 媒体访问控制(Medium Access Control,MAC)子层:制定如何使用传输媒体的通信协议;
- 逻辑链路控制(Logical Link Control,LLC)子层:控制信号交换、数据流量控制;
- 物理层(Physical Layer):物理层:建立在物理通信介质的基础上,作为系统和通信介质的接口,用来实现数据链路实体间透明的比特流传输(转发链路层分组,以二进制流数据的形式在物理媒介上传输数据)。
其中,物理层为真实物理通信,其它各层为虚拟通信。
TCP/IP模型
{网络接口层}-{网络层IP}-{传输层TCP/UDP}-{应用层<协议: FTP,SMTP,TELENT>}
TCP/IP(传输控制协议/因特网互联协议,网络通讯协议),Internet最基本的协议、Internet国际互联网络的基础,由网络层-IP协议和传输层-TCP协议组成,工业标准的协议集、为广域网(WANs)设计。TCP/IP指因特网整个TCP/IP协议族,定义主机如何连入因特网及数据如何传输的标准。TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中,每一抽象层建立在低一层提供的服务上并为高一层提供服务(第N层:服务提供者,第N+1层:服务用户)。
- 应用层(Application Layer):高层协议
- 传输层(Tramsport Layer):源端和目的端机器上的对等实体进行会话、数据传输
- 网络层(Internet Layer):核心关键部分,负责网络通信,该层使用因特网协议(IP,Internet Protocol)
- 网络接口层(Network Access Layer):指定主机必须使用某种协议与网络相连
组件工作层级
- 物理层:网卡,网线,集线器,中继器,调制解调器;
- 数据链路层:网桥,交换机
- 网络层:路由器;
- 第四层传输层及其以上:网关;
协议配置测试
- ipconfig /all:所有的网络配置信息;
- ping IP地址:连接性判断;
- nslookup:DNS解析信息;
2.报文(头)
数据封装格式
首先数据会封装到TCP的Segment中,然后TCP的Segment会封装到IP的Packet中,然后再封装到以太网Ethernet的Frame中,传到目的端后,各个层根据自己的协议解析数据、再把数据交给更高层的协议处理:
- 第二层:帧 - Frame
- 第三层:包 - Packet
- 第四层:(报文)段 - Segment
MSS = MTU - IP头 - TCP头(以字节为单位)
- MTU:Maximum Transmission Unit,最大传输单元,即最大数据包大小;
- MSS:Maximum Segment Size,最大报文段,TCP数据包每次能够传输的最大数据段大小,MSS限制TCP包携带数据的大小
一个通信连接需要一个五元组(协议 + src_ip, src_port, dest_ip, dest_port)来表示是同一个连接:
- IP层报头:指明源主机和目的主机地址
- TCP/UDP层报头:指明主机上的源端口和目的端口
IP报文头格式
[1] IPv4格式
- Header Length:IP包头长度,最小20字节、最大60字节;
- Time To Live:生存时间(TTL),IP包的TTL随路由的转发递减,当TTL=0时,IP包丢弃,防止由于路由环路而导致IP包在网络中不停被转发;
- Protocol:协议,标识上层所使用的协议;
- 校验和:头部校验(Header Checksum),IP头部的正确性检测,但不包含数据部分;
[2] IPv4 - IPv6
TCP报文头格式
- Sequence Number:32位同步序列号,标识报文段第一个数据字节在数据流中的序号,重组报文段、解决报文段乱序的问题;
- Acknowledgment Number:32位确认序列号,标识接收端期望收到的下一个序号(上次已成功收到数据字节序号加1),解决不丢包的问题,前提是标志位ACk=1;
- Data Offset:数据偏移,TCP首部长度(默认:5 * 单位4字节 = 20字节,最大:15 * 单位4字节 = 60字节);
- SYN:标志位,同步序号,用来建立连接(连接请求:SYN=1,ACK=0;连接响应:SYN=1,ACK=1;);
- ACK:标志位,数据正确接收确认信号;
- FIN:标志位,关闭连接信号;
- Window:Advertised-Window,滑动窗口(Sliding Window),用于解决流控;
- 校验和:差错控制,校验和的计算包括TCP首部、数据和其他填充字节;
UDP报文头格式
- 包长度:UDP首部的长度和UDP数据长度之和;
- 校验和:对UDP数据的差错检验,UDP协议提供的唯一可靠机制,校验和的计算包括UDP头部和伪头部;
- 伪首部:并不是报文真正的首部,用于计算检验和、在UDP报文前增加12个字节的伪首部,既不向下传送也不向上递交;
参考:协议森林系列;
3. 协议
协议,Protocol,定义2个或多个通信实体之间数据交换的报文格式和次序以及在报文的传输、接收等方面所采取的动作。
- DNS(Domain Name Service):域名解析服务,域名 ---> IP地址,port=53;
- HTTP(Hypertext Transfer Protocol):超文本传输协议,实现互联网WWW服务,port=80;
- FTP(File Transfer Protocol):文件传输协议,上传下载服务,数据端口=20,控制端口=21;
- SMTP(Simple Mail Transfer Protocol):简单邮件传输协议,控制信件的发送、中转,port=25;
- Telnet服务:用户远程登录服务,明码传送、保密性差、简单方便,port=23;
- NFS(Network File System):网络文件系统,网络中不同主机间的文件共享;
- IP:Internet Protocol,网络互连协议,网络层核心,IP数据报是无连接服务。在相互连接的网络之间传递IP数据报:[1]. 寻址和路由;[2]. 分段和重组。
- ICMP:Internet Control Message Protocol,Internet控制报文协议。ICMP包发送是不可靠的,Ping命令发送ICMP的echo包,通过回送的echo relay进行网络测试。
- TCP:Transmission Control Protocol,传输控制协议。面向连接、可靠、基于字节流的传输层协议。端到端,超时重发和流量控制。支持Telnet远程登陆、FTP文件传输协议、SMTP简单邮件传输协议。
- UDP:User Datagram Protocol,用户数据报协议。面向无连接、提供面向事务的不可靠信息传送服务。无超时重发等机制,速度快。支持NFS网络文件系统、SNMP简单网络管理协议、DNS域名系统、TFTP简单文件传输协议。
- ARP:Address Resolution Protocol,正向地址解析协议,IP地址 ---> MAC地址
- RARP:Reverse Address Resolution Protocol,反向地址解析协议,MAC地址 ---> IP地址
- HDLC:High-Level Data Link Control,高级数据链路控制。在同步网上传输数据、面向比特的数链路协议。数据报文可透明传输,用于实现透明传输的“0比特插入法”易于硬件实现。
- IPX:Internetwork Packet Exchange protocol,互联网数据包交换协议。32bit网络号+48bit节点号。
- FDDI: Fiber Distributed-Data Interface,光纤分布式数据接口。FDDI协议基于令牌环(Token-ring network,环形拓扑)协议,支持长距离和多用户。
- Ethernet: 以太网,采用CSMA/CD (Carrier Sense Multiple Access with Collision Detection,带冲突检测的载波监听多路访问技术协议),应用在OSI第2层数据链路层。总线拓扑。
- WiFi:链路层协议最重要的协议就是以太网(Ethernet)和WiFi;
4. IP地址
A类:1.0.0.1-127.255.255.254; B类:128.1.0.1-191.255.255.254; C类:192.0.1.1-223.255.255.254; D类:’1110’开始,保留段,用于多点广播;
注:全零(0.0.0.0)地址表示整个网络,即网络中的所有主机(所有不清楚的主机和目的网络),全1(255.255.255.255)地址是当前子网的广播地址。
5. DNS
Domain Name System,域名系统(分布式数据库),DNS服务器由域名解析器(域名->IP地址)和域名服务器组成,域名必须对应一个IP地址,而IP地址不一定有域名。
- host ip:IP->域名;
- host domainName:域名->IP
特点
- 使用高速缓存、加快查询速度;
- 支持TCP和UDP两种协议的查询方式,UDP查询为主;
6. HTTP状态码
2XX:成功
- 200:OK
3XX:重定向
- 301:永久移动到新位置
4XX:请求错误
- 401:未授权 (Unauthoried)
- 403:禁止访问 (Forbidden)
- 404:找不到页面 (Not Found)
5XX:服务器错误
- 500:内部错误
- 502:网关错误
- 503:服务器不可用
- 504:网关超时
7. 虚拟IP + ARP协议
虚拟IP地址(VIP) 是一个不与特定计算机或一个计算机中的网络接口卡(NIC)相连的IP地址。数据包被发送到这个VIP地址,但是所有的数据最终还是经过真实的网络接口。
优点:实现负载均衡,增强网络管理,充分利用VLAN优势,优化网络结构,合理分配网络资源,方便用户分组管理。
原理:TCP/IP的ARP协议。IP地址只是一个逻辑地址,在以太网中MAC地址才是真正数据传输的物理地址,每台主机中都有一个ARP高速缓存,存储同一个网络内的IP地址与MAC地址的对应关系,以太网中的主机发送数据时会先从这个缓存中查询目标IP对应的MAC地址,然后向这个MAC地址发送数据,操作系统会自动维护这个缓存。
具体参考:虚拟IP原理
ARP
Address Resolution Protocol(地址解析协议),根据IP地址获取物理MAC地址的一个TCP/IP协议。通常ARP协议只适用于局域网。
在TCP/IP模型中,ARP协议属于IP层;在OSI模型中,ARP协议属于链路层。
在建立TCP连接前,必须先进行ARP请求和应答。
为了减少频繁ARP广播次数、降低网路通量,提高通信效率,在路由器、主机、交换机上维护ARP高速缓存表(IP ---> MAC)
- 查看ARP缓存表:arp -a
- 清空缓存表:arp -d
- 在缓存表中手动指定映射对(IP-MAC):arp -s
但是,ARP缓存会有如下的问题:
(1)免费ARP
主机发送ARP广播查找自己的IP地址,即向所在网络请求自己的MAC地址。
- 查找是否有IP重复
- 更新同一网段内其他主机ARP高速缓存中旧的MAC地址:主备切换、负载均衡
- 防止ARP攻击或进行ARP攻击
(2)ARP欺骗
向目标主机发送伪造的应答ARP,并使目标主机接收应答中伪造的IP地址与MAC地址之间的映射对,以此更改同一网段内主机ARP缓存中网关的映射,将其缓存映射为一个不存在的MAC地址,导致网络ping不通。
- 主机级主动检测(免费ARP):可以防止或缓解ARP攻击
- 主机级被动检测:当接收到来自局域网上的ARP请求时,检查该请求发送端IP地址是否与自己IP地址相同。若相同,说明该网络上有主机与自己IP相同
- 服务器级检测:利用反向地址解析协议(RARP),让发送端发送RARP请求回答其IP
- 网络级检测
(3)代理ARP
通过使用一个主机(通常为router),让指定的设备使用自己的MAC地址对另一设备的ARP请求作出应答。
- PC1和PC2属于不同广播域、但处于同一网段中,PC1向PC2发出ARP请求广播包,请求获得PC2的MAC地址。由于路由器不会转发广播包,因此ARP请求只能到达路由器,不能到达PC2。
- 当在路由器上启用ARP代理后,路由器会查看ARP请求,发现PC2的IP地址属于它连接的另一个网络,因此路由器用自己的MAC地址xxx代替PC2的MAC地址,向PC1发送了一个ARP应答。
- PC1收到ARP应答后,会认为PC2的MAC地址就是xxx,不会感知到ARP代理的存在。
适用于没有配置默认网关和路由策略的网络上。
具体参考:浅谈ARP协议以及应用;TCP/IP协议——ARP详解
两台计算机有相同的IP地址会发生什么情况?两台计算机有相同的MAC地址会发生什么情况?
参考: