计算机网络基础
计算机网络体系结构
计算机网络体系结构分为3种:OSI体系结构、TCP / IP体系结构、五层体系结构
- OSI体系结构:概念清楚 & 理念完整,但复杂 & 不实用
- TCP / IP体系结构:含了一系列构成互联网基础的网络协议,是Internet的核心协议 & 被广泛应用于局域网 和 广域网
- 五层体系结构:融合了OSI 与 TCP / IP的体系结构,目的是为了学习 & 讲解计算机原理
OSI的体系结构详细介绍
TCP/IP的体系结构详细介绍
TCP/IP协议族中不同层次的协议
链 路 层
主要有三个目的:
(1)为IP模块发送和接收IP数据报
(2)为ARP模块发送ARP请求和接收ARP应答
(3)为RARP发送RARP请求和接收RARP应答
环回接口
一个传给环回接口的 IP数据报不能在任何网络上出现
最大传输单元MTU
以太网对数据帧的长度都有一个限制,其最大值分别是1500字节。链路层的这个特性称作MTU.
如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行分片,把数据报分成若干片,这样每一片都小于MTU. netstat -i
查看MTU
dyc@dyc:~$ netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
enp2s0 1500 783826 0 0 0 617387 0 0 0 BMRU
lo 65536 5626 0 0 0 5626 0 0 0 LRU
tun0 1400 23491 0 0 0 22760 0 0 0 MOPRU
路径MTU
当在同一个网络上的两台主机互相进行通信时,该网络的MTU是非常重要的。但是如果
两台主机之间的通信要通过多个网络,那么每个网络的链路层就可能有不同的MTU。重要的
不是两台主机所在网络的MTU的值,重要的是两台通信主机路径中的最小MTU。它被称作路
径MTU。
IP:网际协议
IP是TCP/IP协议族中最为核心的协议。所有的 TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输
IP协议提供的是不可靠的服务,任何要求的可靠性必须由上层来提供(如TCP)
IP数据报的格式
- 版本号 :4 位,用于标明 IP 版本号,0100 表示 IPv4,0110 表示 IPv6。目前常见的是 IPv4。
- 首部长度 :4 位,表示 IP 报头长度,包括选项字段。
- 服务类型(TOS) :分别有:最小时延、最大吞吐量、最高可靠性、最小花费 4 种服务
- 总长度 :16 位,报头长度加上数据部分长度,便是数据报的总长度。IP 数据报最长可达 65535 字节。
- 标识 :16 位,接收方根据分片中的标识字段相不相同来判断这些分片是不是同一个数据报的分片,从而进行分片的重组。通常每发送一份报文它的值就会加 1。
- 标志 :3 位,用于标识数据报是否分片。其中的第 2 位是不分段(DF)位。当 DF 位被设置为 1 时,则不对数据包进行分段处理;第 3 位是分段(MF)位,除了最后一个分段的 MF 位被设置为 0 外,其他的分段的 MF 位均设置为 1。
- 偏移 :13 位,在接收方进行数据报重组时用来标识分片的顺序。
- 生存时间(TTL) :8 位,用于设置数据报可以经过的最多的路由器个数。TTL 的初始值由源主机设置(通常为 32 或 64),每经过一个处理它的路由器,TTL 值减 1。如果一个数据报的 TTL 值被减至 0,它将被丢弃。
- 协议 :8 位,用来标识是哪个协议向 IP 传送数据。ICMP 为 1,IGMP 为 2,TCP 为 6,UDP 为 17,GRE 为 47,ESP 为 50。
- 首部校验和 :根据 IP 首部计算的校验和码。
- 源 IP 和目的 IP :数据报头还会包含该数据报的发送方 IP 和接收方 IP。
- 选项 :是数据报中的一个可变长、可选的信息,不常用,多用于安全、军事等领域。
使用wireshark抓取,实际抓到的IP报文可以对比观察下
ifconfig命令
ifconfig enp2s0
获取对应网口的网卡IP地址信息
ARP:地址解析协议
ARP(地址解析协议)和RARP(逆地址解析协议)
- ARP为IP地址到对应的Mac之间提供动态映射
- RARP为Mac到对应的IP地址之间提供动态映射
查ARP 缓存
arp -a
ARP的分组格式
- 字段1是ARP请求的目的以太网地址,全1时代表广播地址。
- 字段2是发送ARP请求的以太网地址。
- 字段3以太网帧类型表示的是后面的数据类型,ARP请求和ARP应答这个值为0x0806。
- 字段4表示硬件地址的类型,硬件地址不只以太网一种,是以太网类型时此值为1。
- 字段5表示要映射的协议地址的类型,要对IPv4地址进行映射,此值为0x0800。
- 字段6和7表示硬件地址长度和协议地址长度,MAC地址占6字节,IP地址占4字节。
- 字段8是操作类型字段,值为1,表示进行ARP请求;值为2,表示进行ARP应答;值为3,表示进行RARP请求;值为4,表示进行RARP应答。
- 字段9是发送端ARP请求或应答的硬件地址,这里是以太网地址,和字段2相同。
- 字段10是发送ARP请求或应答的IP地址。
- 字段11和12是目的端的硬件地址和协议地址。
使用wireshark抓取,实际抓到的ARP报文可以对比观察下
ICMP:Internet控制报文协议
ICMP地址掩码请求与应答
ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码
ICMP时间戳请求与应答
ICMP时间戳请求允许系统向另一个系统查询当前的时间
ICMP端口不可达差错
ICMP 的端口不可达差错报文数据部分必须要包含IP首部(包括选项)+原始IP数据报中数据的前8字节,这样发送端才可以根据返回的报文与主机上的进程相关联
ICMP回显请求和回显应答报文
Ping 命令使用
UDP:用户数据报协议
UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个 UDP
数据报,并组装成一份待发送的 IP数据报.
- UDP是无连接的
- UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态(这里面有许多参数);
- UDP是面向报文的
- UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
- UDP支持一对一、一对多、多对一和多对多的交互通信
- UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短
TCP:传输控制协议
- TCP是面向连接的。(就好像打电话一样,通话前需要先拨号建立连接,通话结束后要挂机释放连接);
- 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一);
- TCP提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达;
- TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据;
- 面向字节流。TCP中的“流”(stream)指的是流入进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。
TCP的三次握手和四次挥手
为什么要三次握手
三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
- 第一次握手:Client什么都不能确认;Server确认了对方发送正常
- 第二次握手:Client确认了:自己发送、接收正常,对方发送、接收正常;Server确认了:自己接收正常,对方发送正常
- 第三次握手:Client确认了:自己发送、接收正常,对方发送、接收正常;Server确认了:自己发送、接收正常,对方发送接收正常
所以三次握手就能确认双发收发功能都正常,缺一不可。
为什么要传回syn
接收端传回发送端所发送的SYN是为了告诉发送端,我接收到的信息确实就是你所发送的信号了。
TIME_WAIT状态也称为2MSL等待状态。每个具体 TCP实现必须选择一个报文段最大生
存时间MSL(Maximum Segment Lifetime)。它是任何报文段被丢弃前在网络内的最长时间。
我们知道这个时间是有限的,因为 TCP报文段以IP数据报在网络内传输,而IP数据报则有限制
其生存时间的TTL字段(IP数据报TTL的限制是基于跳数,而不是定时器)
为什么要四次挥手
TCP 协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP 是全双工模式,这就意味着,当 A 向 B 发出 FIN 报文段时,只是表示 A 已经没有数据要发送了,而此时 A 还是能够接受到来自 B 发出的数据;B 向 A 发出 ACK 报文段也只是告诉 A ,它自己知道 A 没有数据要发了,但 B 还是能够向 A 发送数据。所以想要愉快的结束这次对话就需要四次挥手。
TIME_WAIT状态
TIME_WAIT状态也称为2MSL等待状态。每个具体 TCP实现必须选择一个报文段最大生
存时间MSL(Maximum Segment Lifetime)。它是任何报文段被丢弃前在网络内的最长时间。
我们知道这个时间是有限的,因为 TCP报文段以IP数据报在网络内传输,而IP数据报则有限制
其生存时间的TTL字段(IP数据报TTL的限制是基于跳数,而不是定时器)
TCP的半关闭
TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。这就是所谓TCP的半关闭
复位报文段
了TCP首部中的RST比特是用于“复位”的。一般说来,无论何时一个报文段发往基准的连接( referenced connection)出现错误,TCP都会发出一个复位报文段(这里提到的“基准的连接”是指由目的IP地址和目的端口号以及源IP地址和源端口号指明的连接
到不存在的端口的连接请求
当一个数据报到达目的端口时,该端口没在使用,UDP将产生一个ICMP端口不可达的信息。而TCP则使用复位
异常终止一个连接
到终止一个连接的正常方式是一方发送 FIN。有时这也称为有序释放
(orderly release),因为在所有排队数据都已发送之后才发送 FIN,正常情况下没有任何数据
丢失。但也有可能发送一个复位报文段而不是 FIN来中途释放一个连接。有时称这为异常释放
(abortive release)。
异常终止一个连接对应用程序来说有两个优点:
- 丢弃任何待发数据并立即发送复位报文段;
- RST的接收方会区分另一端执行的是异常关闭还是正常关闭。应用程序使用的API必须提供产生异常关闭而不是正常关闭的手段
DNS:域名系统
域名系统(Domain Name System缩写DNS,Domain Name被译为域名)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。(百度百科)例如:一个公司的Web网站可看作是它在网上的门户,而域名就相当于其门牌地址,通常域名都使用该公司的名称或简称。例如上面提到的微软公司的域名,类似的还有:IBM公司的域名是www.ibm.com、Oracle公司的域名是www.oracle.com、Cisco公司的域名是www.cisco.com等。
推荐文章: