TCP/IP基础知识汇总
网络基础(持续更新)
网络协议分层模型
OSI 参考模型 与 TCP/IP 协议
OSI 参考模型(7层)
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
TCP/IP 协议 (4层)
应用层
传输层
网络层
数据链路层
术语
包:通用型术语;
帧:数据链路层中包的单位;
报文:网络层IP包的单位;
段:TCP 传输层中包的单位;
RFC 文档
一个协议的标准化一定要通过IETF 讨论
RFC 文档官网:https://www.rfc-editor.org
数据链路
MTU 最大传输单元,单位字节;以太网的默认MTU为 1500字节;
每条数据链路的MTU值可能是不一样的。
MAC地址
MAC是网络中用来标识网卡设备的唯一物理地址。
MAC 地址为6个字节长度,通常这样表示:d0-76-e7-75-95-6d
以太网
以太网帧格式
一个数据帧所能容纳的最大数据范围是46-1500个字节。
无线通信
IP 协议
IP (Internet Protocol)即网际协议
数据链路层提供两个直连设备之间的通信功能。与之相比,网络层的IP协议则负责没有直连的两个网络之间进行通信。
IP协议三个作用:
- IP寻址
- 路由
- IP分包与组包
IP地址
IPv4 地址由32位正整数来表示。IP地址在计算机内部以二进制的方式处理,人们则通过十进制点符号的形式查看IP地址,也就是将32位的IP地址以每8位分为一组,共4组,每组之间以点号隔开。
如:192.168.86.1
IP地址由网络地址和主机地址两部分组成。我们平时所说的同一网段就是网络号相同的IP地址。
IP包被转发到途中某个路由器时,正是利用目标IP地址的网路地址进行路由。因为仅凭网络标识就能判断出是否为该网段内的主机。
网络地址和主机地址的划分:
从第几位开始到第几位算网络地址?又从第几位开始到第几位算主机标识?目前有两种类型:
- 以分类进行划分;(A类、B类、C类、D类)
- 以子网掩码进行划分;(更普遍)
IP地址分类
根据网络规模的大小,将IP地址分为 A、B、C、D、E 五类。A B C 三类为常用地址,D E 类为特殊地址。
根据IP地址的第一个字节,可以判断IP地址的分类。
类别 | 最大网络数 | IP地址范围 | 单个网段最大主机数 | 私有IP地址范围 |
---|---|---|---|---|
A | 126(2^7^ -2) | 1.0.0.1-127.255.255.254 | 16777214 | 10.0.0.0 - 10.255.255.255 |
B | 16384(2^14^) | 128.0.0.0-191.255.255.255 | 65534 | 172.16.0.0 - 172.31.255.255 |
C | 2097152(2^21^) | 192.0.0.0-223.255.255.255 | 254 | 192.168.0.0 - 192.168.255.255 |
A类地址中,前8位表示网络号,后24位表示主机号(默认子网掩码:255.0.0.0),网络号最高的位必须是 0;
B类地址中,前16位表示网络号,后16位表示主机号(默认子网掩码:255.255.0.0),网络号最高的位必须是 10;
C类地址中,前24位表示网络号,后8位表示主机号(默认子网掩码:255.255.255.0),网络号最高的位必须是 110;
公有地址和私有地址
3类IP地址中,各自保留了一段区域作为私有地址。公有地址由 Internet 信息中心进行分配和注册;私有地址不能注册,专门为组织机构内部使用。其地址范围如下:
类别 | IP地址范围 | 私有IP地址范围 |
---|---|---|
A | 1.0.0.1-127.255.255.254 | 10.0.0.0 - 10.255.255.255 |
B | 128.0.0.0-191.255.255.255 | 172.16.0.0 - 172.31.255.255 |
C | 192.0.0.0-223.255.255.255 | 192.168.0.0 - 192.168.255.255 |
子网和子网掩码
子网掩码
直接使用A类、B类、C类、IP地址太浪费资源,引入子网掩码后,从逻辑上把一个大网络划分为一些小网络(子网)。一个IP地址可以不再受限于自己的类别,而是通过子网掩码自由的定义网络标识的长度。
子网掩码和IP地址一样共32位,左边一段连续的1表示网络号的长度,右边一段连续的0表示主机号的长度。子网掩码用来指明一个IP地址的哪些位是网络号,子网掩码不能单独使用,必须结合IP地址一起使用,子网掩码与IP地址做 “与” 运算得出IP地址的网络号是多少。
至此,一个IP地址就有了两个识别码:IP地址本身和子网掩码。
例子:
IPv4 地址: 192.168.1.111,子网掩码 : 255.255.255.0 ,表示前24位表示网络号,后8位表示主机号;也可以用 192.168.1.111/24 表示。
网关
前面说到子网掩码把一个网络划分为多个子网,同一网段的两个主机属于同一个子网。不同子网的两个主机如果需要通信,就需要网关。
网关实质上是一个网络通向其他网路的IP地址,IP就是该网段内可用IP的其中一个,通常是第一个或最后一个;
网关设备是用来连接两个不同网络的设备。
路由控制
IP地址的网络地址部分用于路由控制,
IP路由表
IP协议始终认为路由表是正确的,路由控制表中记录着网络地址与下一步应该发送至路由器的地址。
本机上使用 netstat -r
命令查看路由表
IP报文的分片与重组
太网的默认MTU为 1500字节,因此发送4500字节的IP数据报文是无法在一帧中传输完成的,因此必须将IP报文分片发送。
MTU路径发现
IPv6
IPv6 采用128位(16个字节)表示,可以彻底解决IPv4 地址不足的问题。IPv6 地址一般采用十六进制表示法,2个字节为一组(8个十六进制表示),每组之间用英文冒号隔开,如 fe80:0000:0000:ec96:139c:c5d4:95fb:deed
。
IP协议相关技术
DNS
域名解析系统
将域名解析为IP地址
使用 nslookup
命令可以查看域名对应的IP地址:
> nslookup www.baidu.com
服务器: 192.168.1.1
Address: 192.168.1.1
非权威应答:
名称: www.baidu.com
Addresses: 110.242.68.4
110.242.68.3
ARP 与 RARP
ARP (Address Pesolution Protocol)地址解析协议:根据IP地址查找对应的MAC地址
RARP:将MAC地址解析为IP地址
ARP 通过ARP请求和ARP响应两种类型的包来确定MAC地址的。
ARP缓存表:
缓存了IP地址与MAC地址的对应关系。 可通过 arp -a
命令查看ARP表。
> arp -a
接口: 192.168.98.1 --- 0x6
Internet 地址 物理地址 类型
192.168.98.254 00-50-56-e6-8f-f8 动态
192.168.98.255 ff-ff-ff-ff-ff-ff 静态
224.0.0.22 01-00-5e-00-00-16 静态
224.0.0.251 01-00-5e-00-00-fb 静态
239.11.20.1 01-00-5e-0b-14-01 静态
239.255.255.250 01-00-5e-7f-ff-fa 静态
255.255.255.255 ff-ff-ff-ff-ff-ff 静态
接口: 192.168.86.1 --- 0xa
Internet 地址 物理地址 类型
192.168.86.254 00-50-56-e2-e7-78 动态
192.168.86.255 ff-ff-ff-ff-ff-ff 静态
224.0.0.22 01-00-5e-00-00-16 静态
224.0.1.60 01-00-5e-00-01-3c 静态
239.11.20.1 01-00-5e-0b-14-01 静态
239.255.255.250 01-00-5e-7f-ff-fa 静态
255.255.255.255 ff-ff-ff-ff-ff-ff 静态
ICMP
辅助的 ICMP(Internet Control Message Protocol)
ICMP消息
注:网络上常用的Ping 命令,就是通过ICMP实现的。
TTL字段
TTL(Time To Live)是IPv4报头的一个8bit字段,该字段指定IP数据包被路由器丢弃之前允许通过的最大网段数量,从而限制IP数据包在计算机网络中的生存时间,TTL最大值是255;
DHCP
动态主机配置协议
用于动态分配IP地址
NAT
NAT(NetWork Address Translator)网络地址转换协议,用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。
NAT实际上是为正在面临地址枯竭的IPv4而开发的技术。不过在IPv6中为了提高网络安全也在使用NAT。
除了转换IP地址,还有可以转换TCP、UDP端口号的 NAPT(NetWork Address Port Translator)技术。
注:通常人们提到的NAT,其实就是NAPT。
NAT 工作机制:
10.0.0.10 的主机与 163.221.120.9 的主机进行通信,利用NAT技术,途中的路由器将发送源地址从 10.0.0.10 转换为全局的IP地址 202.244.174.37 再发送数据。反之,当包从地址 163.221.120.9 发过来时,目标地址202.244.174.37 先别转换成私有地址 10.0.0.10 以后再进行转发。
在NAT路由器的内部,有一张自动生成的用来转换地址的表。
NAT 潜在问题
无法从NAT的外部向内部服务器建立连接。
转换表的生成与转换操作都会产生一定的开销。
通信过程中一旦NAT 遇到异常需要重启时,所有的TCP 连接都将被重置。
NAT 穿越技术
TCP 与 UDP
传输层协议
端口号
IP地址中的网络地址用于标识
TCP
TCP(Transmission Control Protocol)传输控制协议,从名字可以知道TCP协议在传输时加入控制逻辑,以保证数据传输是可靠的。
可靠性
TCP通过序列号与确认应答提高可靠性。
当主机A发送1000字节给主机B时,会告诉主机B自己发送的数据序号为 1-1000,主机B接收数据后,给主机A发送 ACK 确认应答,告诉主机A自己已经接收到,并且希望下一次接收的数据包的序号为1001,每发送一次数据,都会有一次应答。
如果主机A在发送完数据后,没有接收到确认应答,则会在超时时间后重复发送数据包,以保证即便数据包丢失,也能实现可靠性传输。(接收不到确认应答有两种情况:第一种是主机B确实没有收到数据,数据包在发送的途中丢失;第二种是主机B已经收到数据,返回的确认应答丢失)
注:为什么会有序列号和确认应答号,试想下上面说的第二种情况:主机B已经收到数据,返回的确认应答丢失,此时主机A进行超时重发,主机B就会收到重复的数据包,所以必须有个序列号来标识数据包达到去重的目的。确认应答号是主机B回应主机A下一次期望接收的数据包。
连接管理
三次握手、四次挥手
一个连接的建立和断开,至少需要来回发送7个包才能完成。
以段位单位发送数据
利用窗口提高速度
每发送一次数据,都要等待一次应答才继续发送下一条数据,这样的策略有个缺点,那就是包的返回时间越长,通信性能就越低。
为此,TCP引入窗口这个概念来解决这个问题。
窗口的大小是指无需等待确认应答就可以继续发送数据的最大值。
发送端主机需要设置缓存保留这些待被重传的数据,直到收到他们的确认应答。
滑动窗口机制:
收到确认应答后,将窗口滑动到确认应答中的序列号位置。这样可以顺序地将多个段同时发送以提高通信性能。这种机制也被称为滑动窗口机制。
窗口控制和重发机制
部分确认应答丢失也无需重发数据:
使用窗口,如果1-1000的确认应答中途丢失,而1001-2000的确认应答被发送端接收到,则发送端认为2000 之前的数据都已经成功接收了,所以 1-1000的数据无需重新发送。
高速重发机制:
发送端主机如果连续3次收到同一个确认应答,就会将对应的数据重新发送,这种机制比之前的超时发送更加高效,因此也叫高速重发机制。
UDP
UDP 是面向无连接的通信协议,UDP没有复杂的控制,换句话说,如果想在应用层加入自定义的控制逻辑,选择UDP协议是个不错的选择。
Socket API
Socket 是操作系统提供的API,用于实现应用的数据发送和接收。
应用层协议
远程登录
Telnet 非加密
SSH 加密的远程登录系统
文件传输
FTP
SFTP(SSH)
电子邮件
SMTP
POP
超文本传输
HTTP
CSS
JavaScript
静态资源
网络安全
防火墙
入侵检测系统
加密技术
README
参考:
《图解TCP/IP》第五版
2018-05-12 米开