网络协议入门
一、网络协议分层
- 协议分层(由上至下)
- 应用层 Application layer
- 传输层 Transport Layer
- 网络层 Network Layer
- 链接层 Link Layer
- 实体层 Physical Layer
网络协议还有其他分层模型,可自行查阅
二、分层详解
-
实体层 Physical Layer
- 介绍
- 实体层主要解决的是使用物理手段(光缆线、双绞线、无线电波等)把网络设备,例如PC,并传递0|1信号。
- 介绍
-
链接层 Link Layer
- 介绍
- 链接层在实体层之上,主要解决的是规范化0|1信号的分组,使不同0|1信号组合可以表达不同且通用的意思(毫无规律的0|1信号没有意义,而不统一的信号分组规范不利于信息广泛传播)。
- 以太网协议
- 以太网协议制定具体的0|1信号分组规范
- 以太网协议规定一组电信号构成一个数据包,叫做帧(Frame)。每一帧分成标头(Head)和数据(Data)两个部分。
- 标头主要包含说明项,比如:发送者、接收者、数据类型等;标头长度固定为18个字节。
- 数据是具体内容,数据长度46~1500字节。
- 数据包长度范围64~1518字节,发送内容超过数据包长度,分割成多个数据包进行发送。
- MAC地址
- 以太网规定入网设备都需要具备网卡接口,帧实际上是在物理网卡之间传递,网卡地址就是MAC地址。
- 以太网协议同时规范了帧的具体格式,比如帧的标头应该包含发送者和接受者的设备网卡MAC地址。
- MAC地址长度为48个二进制单位,通常用12个十六进制数表示。
- 广播(Broadcasting)
- 以太网传输数据方式不是想象中的从PC1到PC2之间的精确传递,而是从PC1同时发送给PC2-PC6(假设局域网内总共有6台PC),这种发送方式叫广播。
- 同时接收到上述数据包的网卡们,将自动对比标头部分接收者MAC地址是否和自己匹配,如果是则接收做进一步处理,否则将drop该数据包。
- 介绍
-
网络层 Network Layer
- 引入
- 理论上,通过上述两层协议已经可以完成PC间数据传输。但延展一下这个想法,我们所有网络设备全部在一个子网络中,且数据均通过广播方式发送,这必然导致网络崩溃!
- Internet是由无数子网络组合而成,在同一个子网络中数据通过广播发送,不同子网络数据是通过路由发送。
- 介绍
- 网络层主要解决不同子网络之间通信问题,网络层为PC重新分配了一个全新的地址,叫做网络地址,简称网址。
- IP协议
- ==IP协议定义具体的IP地址规范,IP数据包格式,包括如何判断两个不同IP地址是否在同一子网络中。==目前运用广泛的是IP协议第四版(IPv4)。
- IP地址分为两部分,网络号和主机号,网络号决定不同PC是否在同一子网络内。IP地址和子网掩码做AND运算,可得到其网络号和主机号,不同IP地址和各自子网掩码做AND运算,得到各自网络号,网络号相同,则设备在同一子网络内。
- IP数据包
- IP数据包包含IP地址;同样也分为标头和数据两部分,标头包括版本、长度、IP地址等信息,长度20-60字节;数据则是具体内容;整个IP数据包最大为65535字节;由于IP数据包包裹在以太网数据包中,所以IP数据包超过1500字节,需分割为多个以太网数据包分开发送
- IP数据包包含IP地址;同样也分为标头和数据两部分,标头包括版本、长度、IP地址等信息,长度20-60字节;数据则是具体内容;整个IP数据包最大为65535字节;由于IP数据包包裹在以太网数据包中,所以IP数据包超过1500字节,需分割为多个以太网数据包分开发送
- ARP协议
- 在以太网数据包发送时假设发送者知道接收者MAC地址,但真实情况下网卡A是无法凭空知道网卡B的MAC地址,ARP协议用于解决这个问题。
- ARP本质是通过IP寻址的协议,址指的是MAC地址。以太网数据包在子网络内采用广播发送,网卡接收到数据包后对比接收者MAC地址是否是自身,否则丢弃。ARP协议发送以太网数据广播包在接收者MAC地址部分填写为FF:FF:FF:FF:FF:FF,网卡接收到全F的地址,将进一步取出数据包的中IP地址部分和自身进行匹配,不匹配则丢弃,匹配则做出回复,向发送者告知自己的MAC地址。发送者通过ARP协议找到子网络内接收者IP对应的MAC地址,如果接收者不在子网络内,则数据包将交给网关处理。
- 引入
-
传输层 Transport Layer
- 引入
- 有了MAC地址和IP地址,PC可以和同一子网络和不同子网络PC建立通信。但在实际应用场景中,通信是建立在PC上的应用程序之间,而一台PC一般同时存在多个应用程序(系统进程)。于是又引入了端口概念。
- 端口:端口明确了从IP层上来的数据包是属于那个应用程序的,端口是使用网卡的程序编号。端口长度是16个二进制位,端口范围是0~65535,其中0到1023被系统占用。
- 介绍
- 传输层主要解决网络设备上应用程序之间的通信,也就是端口到端口的通信。
- 传输层相关协议,常用的是UDP、TCP
- UDP数据包:同样包括标头和数据,标头包含了端口信息,标头长度8个字节;数据为具体内容;UDP数据包总长度不超过65535字节,刚好装入IP数据包
- TCP部分详见TCP协议详解,TCP数据包没有长度限制,但通常不建议超出IP数据包长度,避免切割
- 引入
-
应用层 Application Layer
- 介绍
- 传输层实现了端到端的数据包传递,应用层主要作用是规范应用程序的数据格式。
- 应用层相关协议,常用的是HTTP、FTP等等
- 应用层数据包理论上不限制长度。但为了保证网络效率,一般情况下应该避免IP数据包的切割
- 介绍
三、从使用角度讲解
- PC网络配置
- 配置静态IP地址
- 计算机每次开机都使用相同的IP地址。配置静态IP地址参数需至少包括:本机IP地址、子网掩码、网关的IP地址、DNS服务器IP地址
- 分配动态IP地址
- DHCP协议负责分配动态IP地址,动态IP地址是相对静态IP地址而言,则使用者无需手动配置,子网内DHCP服务器自动负责分配
- 动态IP地址分配流程
1)以太网标头部分,发送者MAC地址为本机网卡MAC地址,接收者MAC地址为DHCP服务器网卡MAC地址,此时接收者MAC地址未知,故填入广播地址(FF-FF-FF-FF-FF-FF)
2)IP标头部分,发送者和接收者IP地址均未知,故发送者IP地址设为0.0.0.0,接收者IP地址设为255.255.255.255(IP广播地址)
3)UDP标头,发送者端口号为68,接收者端口号为67
4)Data部分为dhcp应用层协议请求内容
5)以太网数据包在子网内以广播发送,同一子网内所有PC均收到该数据包,查看以太网标头中接收者MAC地址为广播地址,所有PC会进一步对比IP标头数据,发现发送者IP为0.0.0.0且接收者IP为255.255.255.255,则DHCP服务器会继续处理该数据包,其他PC丢弃该数据包
6)DHCP服务器将分配好的IP地址等信息,同样封装成以太网数据包做为DHCP请求响应返回给请求PC
7)响应数据包中,以太网标头发送者MAC地址为DHCP服务器的网卡地址,接收者MAC地址为请求PC网卡地址
8)响应数据包中,IP标头中发送者IP地址为DHCP服务器IP地址,接收者IP地址为255.255.255.255(IP广播地址)
9)响应数据包中,UDP标头发送者端口号为67,接收者端口号为68
10)响应数据包中,Data部分dhcp应用层协议响应内容
11)PC接收到响应数据包,成功分配到IP地址、子网掩码、网关地址、DNS服务器参数,完成PC动态网络配置
- 配置静态IP地址
- 普通网页访问
- 完成PC网络配置后,简述PC上网流程
- 打开浏览器输入域名,例如:www.baidu.com
- 访问DNS服务器(61.139.2.69)解析域名,获取目标网络ip地址,比如:119.75.217.109
- 已知本机IP(192.168.2.100)和目的IP(119.75.217.109),通过与子网掩码(255.255.255.0)AND运算,计算结果分别为192.168.2.0、119.75.217.0,结论是不在同一子网络。则数据包交给网关转发,以太网数据包标头中接收者MAC地址为网关MAC地址
- http协议在TCP协议之上,数据包示意图详见下
- 根据http数据长度不同,http请求可能都会切分为多个IP包发送
- 完成PC网络配置后,简述PC上网流程
补(1)数据包套娃
参考阮一峰日志:
http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html
http://www.ruanyifeng.com/blog/2012/06/internet_protocol_suite_part_ii.html