目录
TCP/IP四/五层模型
应用层常见协议——传输数据PDU
传输层协议——传输数据段
端口号
TCP面向连接服务CONS
UDP无面向连接服务DLNS
网络层协议——传输数据包
IP协议
数据链路层——传输数据帧
Ethernet帧格式
IEEE802.3帧格式
标准定义的TCP/IP模型为四层模型,没有对网络接口层进行明确的细分
但是我们在使用TCP/IP模型时,一般会网络接口层分为链路层物理层来使用
通过各种协议向终端用户提供业务应用
DNS——建立域名与IP之间的关系
HTTP——超文本传输协议
HTTP将图像,视频,文件有,音乐等传输给客户端供用户上网访问
不安全,现在基本都是用Https协议
HTTPS——安全的超文本传输协议
相比于Http增加了加密验证功能
SMTP——用于发送邮件
POP3/IMAP——用于接收邮件
IMAP功能相比于POP3更多
IMAP和POP3的主要区别
Telnet——远程登录服务的标准协议
不安全,现在一般使用SSH进行远程登录
SSH——加密远程登录管理
通过密钥进行加密认证
FTP——文本传输协议
提供可靠的文件传输 服务,具有认证,权限的功能
TFTP——简单文件传输协议
提供不可靠的文件传输服务
消耗资源小,速度快
常用于网络设备的配置文件和系统文件传输
传输层提供面向连接或非面向连接服务以及进行重传前的差错检验
传输层只定义了两种协议TCP和UDP
端口号用来区分不同的应用层协议,当解封时看到传输层携带的端口号,就能了解到上层应用层携带的是何种应用层协议
端口号分类
0~1023 公认/知名端口号
1024~49151 应用注册使用的端口号
49152~65535 私有/动态端口(主机/客户端使用)
知名端口号
面向连接服务——在通信前要建立会话连接
TCP报文格式 固定长度20字节,可变长度40字节
TCP的最大报文段长度即MSS一般是1460字节(1500MTU-20IP Head-20TCP Head)
MSS(最大分段大小)指数据的长度最大1460字节
源端口 Source port
标识哪个应用程序发送的
目标端口 Destination Port
标识哪个应用程序接收的
序列号 Sequence Number(简称seq)
在TCP传送的数据流中,每一个字节都有一个序号,在发送报文时会携带Seq
seq=seq+载荷(seq是自己上次发的seq)
载荷就是上层的所有包,此处指应用层的包(数据data)
seq是32位的无符号数,当seq到达2^32-1后从0开始,依次循环
例如:第一报文段的seq为300,而且载荷数据共100字节,则下一个报文段的seq就是400
确认序号 Acknowledge Number (简称ack)
确认序号对收到的TCP报文做确认,Ack=seq+载荷(seq是别人发的seq)
注意:只有Flags中的ACK标志为1时,确认序号才有效
报头长度Header length
用0000~1111来标识,其得出来的数值乘以4就是报文头部长度
即0001=1,则其就代表报文头部为4个字节
tcp头部默认20个字节,其报文长度也就是0101(5)
标识 Flags
Urgent:紧急指针位。当URG=1时,先发送此报文,不用等待,和紧急位字段一起使用。
ACK:确认位。只有当ACK=1时,确认序号字段才有 效;
Push:急迫位。当PSH=1时,发送到对方后,对方先接收处理。
RST:重置位。当RST=1时,表示出现连接错误,必须释放连接,然后再重建传输连接。复位比特还用来拒绝一个不法的报文段或拒绝打开一个连接;
SYN:同步位。SYN=1代表SYN置位,SYN=1,ACK=0时表示请求建立一个连接,携带SYN标志的TCP报文段为同步报文段;只有刚开始前两次握手SYN置位。
FIN:终止位
窗口 Window
通过接收端来调节窗口大小来控制网络拥塞,最大65535
当其为0时,报文为Zero window包,下个包为保活包(keep-alive)
检验和 Checksum
对头部和内容进行校验
紧急位 Urgent Pointer
只有当Flags的URG标志置1时紧急指针才有效。
紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。
先处理此序号的报文
可变长度 Option(0~40)
TCP流量控制
TCP流量控制主要使用滑动窗口协议,滑动窗口是接受数据段端使用的窗口大小,用来告诉发送端接收端的缓存大小,以此可以控制发送端发送数据的大小,从而达到流量控制的目的。
TCP会话建立——三次握手
通过标志位syn、ack以及序列号seq确认序列号ack实现
TCP三次握手,一定会交互三次报文
会话建立的三种情况
发送信号→对方确认→收到回复(就是上述图片的情况)
发送信号→对方否认→重传
发送信号→发送超时→主动重传
TCP会话结束——四次握手
通过标志位fin、ack以及序列号seq确认序列号ack实现
TCP四次握手,不一定交互四次报文(主机直接拔电的情况)
无面向连接服务——在通信前要不需要建立会话连接,直接开始传输数据,不可靠
报文格式
源端口 Source port
标识哪个应用程序发送的
目标端口 Destination Port
标识哪个应用程序接收的
长度 Length
UDP头部+UDP数据的字节数,最小为8字节
检验和 Checksum
对头部和内容进行校验
提供逻辑地址,通过寻址来选择合适的路由和交换节点,实现数据从源到目的地的转发
网络层协议主要是IP协议,除了IP协议还有GRE、ICMP、IGMP、OSPF等协议
IP协议主要分为IPv4协议和IPv6协议,此处只讨论IPv4协议
报文格式 固定头部20字节,可变头部40字节(总共20~60字节)
IP报文最大长度为1500字节(头部+数据)
Version 版本
IP协议的版本,目前的IP协议版本号为4,下一代IP协议版本号为6
Header Length 头部长度
固定部分的长度(20字节)和可变部分的长度之和
通过0000~1111来标识
即0001=1,则其就代表报文头部为4个字节
IP固定头部20个字节,其报文长度也就是0101(5)
DS Field 区分服务字段
用于QoS
Total Length 总长度
IP报文的总长度。报头的长度和数据部分的长度之和。
总长度最大为MTU的值,缺省为1500
Identification 标识——分片使用
该字段标记当前分片为第几个分片,在数据报重组时很有用(让其按照顺序重组)
Flags 分段标志——分片使用
该字段用于标记该报文是否为分片(有一些可能不需要分片,或不希望分片)
后面是否还有分片(是否是最后一个分片)。
该字段共3位。R、DF、MF三位。目前只有后两位有效
R——保留位必须为0
DF——报文是否分片,为1表示不分片,为0表示分片。
MF——报文是否是最后一个分片,为1表示“更多的片”,为0表示这是最后一片。
例如:0x00---000 代表分片,最后一片
0x40---010 代表不分片,最后一片
0x20---001 代表不分片,还有更多的片
Fragment Flags 分段偏移——分片使用
指当前分片在原数据报(分片前的数据报)中相对于用户数据字段的偏移量,即在原数据报中的相对位置,为 0 代表是第一个包
TTL 存活时间
IP报文所允许通过的三层设备的最大数量,最大为255
每经过一个三层设备,TTL减1,当为0时,路由器将该数据报丢弃。
丢弃报文时向报文中的源IP地址发送ICMP错误消息(TTL Exceeded包)类型为 11 0。
Protocol 协议
该值标识网络层的上层协议,可以是其它网络层协议,也可以是传输层协议
Header Checksum 校验和
计算IP头部的校验和,检查IP报头的完整性
Source Address源地址
Destination Address 目的地址
Options 可选字段(0~40字节)
将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用MAC地址)来访问介质,并进行差错检测
数据链路层定义了两个子层
LLC 逻辑链路控制
负责识别网络层的协议类型,对网络层的数据进行封装并向下层传递
MAC 介质访问控制
负责控制物理层设备,也就是MAC地址,大小为48位二进制(12位十六进制)
代表一个网络接口的物理地址,全球唯一
24供应商代码(组织唯一标识符OUI,由IEEE分配和管理)+24厂商自己分配
第八位为0是单播,为1是组播
以太网帧的两种标准帧格式
Ethernet_Ⅱ、IEEE802.3
IEEE802.3是Ethernet的前生,目前基本未使用(STP目前使用的是IEEE802.3帧格式)
帧大小为64~1518,NTU最大传输单元默认为1500
Type类型值大于等于1536即(0x0600)
DMAC
目的MAC地址 6字节
SMAC
源MAC地址 6字节
Type
标识上层协议类型 2字节
帧长度字段值小于1500(0x05DC),MTU为1492
DMAC
目的MAC地址 6字节
SMAC
源MAC地址 6字节
Length
定义了Data字段包含的字节数,不包过CRC检验码
DSAP
目的服务访问点,此处表示后面类型为STP帧
当为0x06,表示后面类型为IP帧
当为0xfe,表示后面类型为ISIS帧
SSAP
源服务访问点,此处表示后面类型为STP帧
当为0x06,表示后面类型为IP帧
Control 字段
通常为0x03,标识无连接服务的IEEE 802.2无编码数据格式
OUI
组织唯一标识符,通常为MAC地址的前3字节
Type
标识以太网帧所携带的上层数据类型
ISIS包
STP包