每时每刻我们都在网上冲浪,但是网络中的数据都是怎么组成的呢?我们又是如何访问到各种资源的呢?这篇通过层级介绍协议的文章会给你答案!

各层的协议将会在后文介绍,协议帧格式来自Cisco Packet Tracer软件。

1. TCP/IP协议栈(五层模型为例)

TCP/IP协议栈

  • 应用层——提供应用程序网络接口—HTTP、WWW、FTP、SMTP、DNS、TELNET

  • 传输层——建立端到端连接—TCP、UDP

  • 网络层——寻址和路由选择—IP地址

  • 数据链路层——物理介质访问—IP数据包

  • 物理层——二进制数据流传输

数据传输真实环境封装:

封装包

2. 数据链路层

作用:维护主机连接网络接口卡地址(MAC)和驱动程序。

MAC为网卡身份标识,全球唯一性(可以通过一定手段复制)。由6字节组成,前3字节为厂商编号,后3字节为网卡流水号。


数据帧格式:

数据帧格式

  • Ethernet II 协议名称:以太网帧格式

  • PREAMBLE:前导码和帧开始符(SFD)

  • DEST MAC:目的mac

  • SRC MAC:源地址mac

  • TYPE:类型 IPv4-0x0800、IPv6-0x86dd、ARP-0x0806、PPPoE-0x8864

  • DATA:数据(长度46-1500)

  • FCS:32位帧校验序列


广播形式把数 据发送给子网内所有主机,将mac对比,不同时丢弃,相同进行下一步处理。

3. 网络层

3.1 ARP协议

ARP(Address Resolution Protocol) 同一局域网内地址解析协议

作用:通过IP地址获取MAC地址


ARP协议数据格式:

ARP协议数据格式

  • HARDWARE TYPE:硬件地址类型,0x1为以太网

  • PROTOCOL TYPE:协议地址类型,0x800为IP

  • HLEN:硬件地址长度

  • PLEN:协议地址长度

  • OPCODE:操作码,0x1为ARP请求报文、0x2为ARP响应报文

  • 源MAC地址 源IP地址 目的MAC地址 目的IP地址


访问公网IP地址时,ARP只会获取到边界路由器的MAC地址,然后在局域网中主机将数据发给边界路由器,再由路由器选择路由进行传输。

3.2 IP网际协议

作用:不可靠、无连接,维护IP地址(逻辑地址),使得数据包通过选择路由路径到达目的地,实现点到点传输


IP协议数据格式:

IP协议数据格式

IP协议文字解析


私有和特殊IP地址(无法在Internet中使用,只能在内部使用)

  • A类:10.0.0.0/8 10.0.0.0~10.255.255.255

  • B类:172.16.0.0/12 172.16.0.0~172.31.255.255

  • C类:192.168.0.0/16 192.168.0.0~192.168.255.255

  • 本地回环(永远在线,测试连通):127.0.0.1~127.255.255.254

本地回环

3.3 ICMP协议

ICMP(Internet Control Message Protocol)网际控制信息协议

常用指令:ping 127.0.0.1 -t

作用:确认IP包是否成功到达目标地址,通知在发送过程中IP包被丢弃的原因


ICMP协议数据格式:

ICMP协议数据格式

  • TYPE:类型 0x08-请求包、0x00-回复包

4. 传输层

4.1 UDP用户数据报协议

UDP(User Datagram Protocol) 用户数据报协议

作用:提供无连接的数据交付


UDP协议数据格式:

UDP协议数据格式

  • SRC PORT:源端口

  • DEST PORT:目的端口(交付给应用)

  • LENGTH:长度

  • CHECKSUM:校验和

  • DATA:数据


端口类型:

  • 知名端口:0~1023,由IANA指派和控制

  • 注册端口:1024~49151,IANA不指派也不控制,但需要在IANA注册以防止重复

  • 动态端口:49152~65535,不需要向IANA注册,可以由任何进程使用,也称短暂端口

4.2 TCP传输控制协议

TCP(Transmission Control Protocol) 传输控制协议

作用:提供面向连接的、可靠的、基于字节流的数据传输


TCP协议数据格式:

TCP协议数据格式
  • SRC PORT:16位源端口

  • DEST PORT:16位目的端口

  • SEQUENCE NUM:32位序列号(数据包传输后按顺序排序)

  • ACK NUM:32位确认序号

  • OFF:首部长度

  • RES:保留

  • FLAGS:标志位 0b000000 从左到右置1依次为 URG-紧急标志 ACK-确认标志 PSH-推标志 RST-复位标志 SYN-同步标志 FIN-结束标志

  • WINDOW:滑动窗口控制数据接收序号范围的大小

  • CHECKSUM:校验和

  • URGENT POINTER:紧急指针,数据优先处理

  • OPTION:选项


TCP保障数据可靠性的三次握手和四次挥手:

可靠性保障

滑动窗口协议(确认数据全部收到且不会丢包):

滑动窗口协议

TCP传输时的拥塞控制(慢开始、拥塞避免、快重传、快恢复):

拥塞控制

5. 应用层

5.1 HTTP协议

HTTP(HyperText Transfer Protocol) 超文本传输协议(基于TCP、80端口服务)

作用:请求-响应规则,给客户端呈现网页内容


HTTP请求格式:

HTTP请求格式

HTTP响应格式:

HTTP响应格式


状态码:

  • 1XX 消息-请求已被服务接收,继续处理

  • 2XX 成功-请求已成功被服务器接收、理解、接受

  • 3XX 重定向-需要后续操作才能完成这一请求

  • 4XX 请求错误-请求含有词法错误或者无法被执行

  • 5XX 服务器错误-服务器在处理某个正确请求时发生错误

5.2 DNS协议

DNS(Domain Name System) 域名解析协议(基于UDP,53端口服务)

域名解析IP流程:

  1. 先尝试从Host文件(C:\Windows\System32\drivers\eth\hosts)中获取域名对应IP地址
  2. 从DNS服务器中,通过对应域名获取IP地址

DNS配置

5.3 DHCP

DHCP 动态主机分配协议

局域网的网络协议,UDP协议工作,67端口(DHCP Server),68端口(DHCP Client),集中管理、分配IP地址、一般集成在无线路由器中

DHCP数据发送流程:

  1. 客户端广播DHCP Discover消息

  2. 服务器提供地址租约(Offer)

  3. 客户端选择并请求地址租用(Request)

  4. 服务器确认将地址租用给客户端(ACK)

DHCP租约

5.4 SMTP简单邮件传输协议

基于TCP,端口25

SMTP协议的python发送QQ邮件流程

B站视频讲解:https://www.bilibili.com/video/BV1Pf4y1D7Z3

数据包传输流程:

  1. ARP协议寻找DNS服务器的MAC地址

  2. 访问DNS服务器 获取域名对应的IP地址

  3. ARP获取边界路由器的MAC地址

  4. 通过TCP三次握手与HTTP服务器建立连接

  5. 使用HTTP协议传输网页数据

  6. 四次挥手关闭TCP连接

  7. STP生成树协议:防止网络中的冗余链路形成环路工作

传输流程一 传输流程二

感谢观看,如有不足或错误,恳请大佬指正 (^_^)#