1、分层模型
1.1、OSI七层模型
1、OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型 ,是一个逻辑上的定义,一个规范,它把网络从逻辑上分为了7层。
2、每一层都有相关、相对应的物理设备,比如路由器,交换机。OSI 七层模型是一种框架性的设计方法 ,建立七层模型的主要目的是为解决异种网络互连时所遇到的兼容性问题,其最主要的功能使就是帮助不同类型的主机实现数据传输。
3、它的最大优点是将服务、接口和协议这三个概念明确地区分开来,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
1.2 、TCP/IP四层模型
应用层—http,ftp,ssh
传输层----TCP/UDP协议
网络层----IP协议
网络接口层-----以太网帧协议
2、协议
2.1、以太网帧协议
以太网帧大小必须在64-1518字节(不包含前导码和定界符),即包括目的地址(6B)、源地址(6B)、类型(2B)、数据、FCS(4B)在内,其中数据段大小在46-1500字节之间。
2.1.2、MAC地址(网卡编号)
1、MAC地址用来识别数据链路层中相连的节点;
2、长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
3、在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)
2.1.3、类型2字节
当类型为0800时,正常发送IP数据报
当帧类型为0806时,会发送arp数据报-,根据IP获取对方的mac地址
当帧类型为0835时,会发送parp数据报,返回自己的mac地址
arp数据报,根据IP获取对方的mac地址【比如我们从北京向广州的主机发送消息,要获取广州主机的MAC地址】
2.2、ARP报文格式
- 硬件类型:目标网卡的硬件类型,表明ARP报文可以在哪种类型的网络上传输。1表示以太网地址。
- 协议类型:硬件地址要映射的协议地址类型。映射IP地址时的值为0x0800.
- 硬件地址长度:即MAC地址的长度(以太网的MAC地址长度为6)。
- 协议地址长度:即IP地址的长度。
- 操作类型:指定本次ARP报文的类型。1:ARP请求报文;0:ARP响应报文。
- 源MAC地址:发送设备的MAC地址。
- 源IP地址:发送设备的IP地址。
- 目标MAC地址:接收设备的MAC地址。在ARP请求报文中,目标MAC地址未知,MAC字段的值为全0(即00-00-00-00-00-00)。
- 目标IP地址:接收设备的IP地址。
2.3、IP报文格式
2.3.1、IP协议的首部格式(IPV4)
组成部分
- 4位版本号:用来指定IP协议的版本,IPV4的版本号为4,前4位存储0100。IPV6的版本号是6,前4位存储0110
- 4位首部长度(Internet Header Length):表明IP首部的大小,单位是4个字节,length * 4的字节数,因为这一字段共4个比特位,所以这一字段最大值为2 ^ 4 - 1即15,所以IP首部最大长度为15 * 4即60字节;在默认情况下,该字段被设置为5,所以默认IP首部20字节。
- 8位服务类型:前三位表示优先度(已经弃用),第4位表示最低延迟、第5位表示最大吞吐、第6位表示最大可靠性、第7位表示最小代价,这四位互相冲突,只能选择一个。需要根据不同情况进行选择,如果是SSH/TELNET这类远端登录,那么就应该选择最小延时,如果是FTP类型的程序,则应该选择最大吞吐量;第8位是保留位,目前没有使用,必须填0。
- 16位总长度(Total Length):表示IP首部和后面携带的数据部分一共有多少个字节。该字段有16个比特位,因此IP数据报整体最大长度为65535个字节。
- 16位标识(ID):唯一地标识主机发送的报文,如果一份IP报文在数据链路层被分片,那么每一片的该字段应该都是相同值。帮助对端主机在接收后进行分片重组。
- 3位标志(Flag):第一位保留(保留的意思是现在不使用,未来如果需要的话再使用),必须填0;第二位用来指明是否可以分片,如果为0则可以分片,如果为1则不能分片。
- 13位片偏移(Fragment Offset):该字段表示分片相对于原始IP报文开始处的偏移量,其实就是表示当前分片在原报文中所处的位置,第一个分片对应值为0。由于该字段总共13个比特位,因此最多可以表示2 ^ 13即8192个相对位置。单位为8字节,所以最大可以表示8192 * 8 = 65536个字节的位置。
- (8位生存时间(Time To Live):数据报到达目的地的最大报文跳数(Hop,指网络中一个区间,IP数据包正是在网络中一个跳间被转发),一般为64,每次经过一个路由,TTL–,如果TTL == 0时还没到达目的地,那么这个报文就会被丢弃。这个字段主要是为了防止出现路由循环,数据包在一个循环中一直转发,浪费网络资源。
- 8位协议(Protocol):表示IP的上层是什么协议,我们熟知的TCP、UDP、ICMP等都是在IP上层的。
- 16位首部校验和(Header Checksum):使用CRC进行校验,鉴别IP首部是否收到损坏,如果损坏直接丢弃,它只校验IP头部,不校验下面的内容,因为内容部分的校验是上层传输层(TCP)需要考虑的,IP协议只要发现首部有问题就直接丢弃该报文。
- 32位源IP地址(Source Address):表示发送端的IP。
- 32位目的IP地址(Destination Address):表示接收端的IP。
- 选项字段(Options):不定长,最大可以到40个字节。
2.3.2、IP地址分类
IP地址由网络标识(网络地址)和主机标识(主机地址)两部分组成。
IP地址划分为五个级别,分别为A类、B类、C类、D类和E类(一直没有使用过),所以目前我们所能见到的IP地址只有A、B、C、D四类。划分的依据就是IP地址从第1位到第4位的比特位。
2.4 、UDP报文格式
- 16位源端口(进程)
- 16位目的端口(进程)
- 16位UDP长度(数据长度)
- 16位UDP校验和(数据校验)
2.5、TCP报文格式
- 16位源端口(进程)
- 16位目的端口(进程)
- 32位序号(Seq)【用来表示A发送给B的数据报序号】
- 32位确认序号(Ack)【客户端和服务器端都可以发送,Ack=Seq+1】
- 4位首都长度:表示TCP头部有4个字节(32位),所以TCP头部最大长度为15*4=60
- 6个标志位【每个标志位1bit,分别是 URG、ACK、PSH、RST、SYN、FIN】
URG:紧急指针有效
ACK:确认序号有效
PSH:接收方应该尽快将这个报文交给应用层
PST:重置连接
SYN:建立一个连接
FIN:断开一个连接
- 16位滑动窗口(表示缓存存储空间的大小)
传输数据的双方,如果一边传输的快,一边接收的慢。那么数据接收方会告诉传输方,自己 有一个缓存。传输方就会把数据放入缓存,当缓存满了,数据的传输方就会进入阻塞等待。
- 16位校验和:检验数据是否一致
- 16位紧急指针:标识哪部分数据是紧急数据
2.6、ICMP报文格式
ICMP(Internet Control Message Protocol)是一种网络协议,它用于在IP网络中传递控制信息和错误消息。它通常与IP协议一起使用,IP协议负责发送和路由数据包,而ICMP协议负责检查网络是否可达、路由是否正确、主机是否可达等网络状态的反馈信息
ICMP报文属于IP子协议,协议号为1。
2.6.1、ICMP首部格式
其中各字段的含义如下:
类型(Type):指定 ICMP 报文的类型,占 1 个字节。常见类型有:回显应答(Echo Reply:0)、回显请求(Echo Request:8)等。
代码(Code):指定 ICMP 报文的代码,占 1 个字节。用于进一步描述 ICMP 报文,与 Type 字段组合使用。
校验和(Checksum):校验和,用于检查 ICMP 报文是否有损坏,占 2 个字节。
由类型决定的4字节:根据类型不一样,4字节表达的意思不一样。
数据(Data):数据,可变长度。可以是任意数据,长度由具体的 ICMP 报文类型和代码决定。
2.6.2、ICMP报文类型列表