网络各层头部信息
Q:为什么需要那么多头部,比如TCP然后还需要IP头部,去掉不行吗?
综述:
- 每一层的首部字节中的信息很少重复
- 每一个信息存在都有其意义,保证其最基本的传输功能、无意义的传输
- 不可随意删除去掉
下面正在自顶向下来分析:
一个点是,检验和checksum,检验出错直接丢,避免无意义的传输
1 应用层
来自应用层的数据包需要让下层知道,“我”是使用什么协议的。
因此应用层需要携带应用层协议标识或者描述的头部信息
还需要知道数据的长度
2 传输层
传输层实现的端到端的传输
因此,传输层要知道发送方和接收方的端口,即源端口和目的端口
数据的长度
数据校验和:出错直接丢,避免无意义的传输?❓
- 对于TCP来说,保证可靠传输,因此需要额外的字段信息:
- 序列号 -> 数据报的序号,,帮助失序重排
- 确认序列号 -> 用于指示下一个数据报的序号,TCP确认机制
- 编码位 -> 用于控制报文段的传输,如会话的建立和终止
- 包括:URG、ACK、PSH、RST、SYN、FIN 6个
- SYN -> 用于建立连接请求
- FIN -> 用于结束连接
- ACK -> 应答报文
- 包括:URG、ACK、PSH、RST、SYN、FIN 6个
- 窗口大小 ->表示接收方能够继续接受的字节数,用于流量控制,
- ……
3 网络层
以IP协议为例
IP协议并 不保证 数据的可靠传输,因此在网络层之上(传输层)通过TCP协议来实现
(由此考虑,UDP在传输层并不能保证数据的可靠传输,因此可以在应用层上结合应用层协议来实现数据可靠传输)
实现主机与主机之间的数据传输
因此需要IP地址:源IP和目的IP
Version:网络层有两个主要的IP协议,IPv4/IPv6,因此需要标识所使用的协议
头部信息有一个option项,属于开放的空间,长度由用户定义,因此需要一个头部长度以及当前数据报的总长度(数据+头)
网络层IP协议会对报文进行分组转发,即进行分组,那么就需要知道该数据报原来来自哪个数据报packetID,是否进行了分组flag,以及组偏移(fragment offset,表示组号)
Type of service: 数据报的重要程度??
4 数据链路层
数据的导航
数据单位为帧
在物理层设备上传输不同于在网络上传输,因为在物理层上传输的是比特流(即01010101)之类的高低电平信号
如果数据一个一个发,发一个停一下再发一个,效率会十分低(如 0101 ---- 1010 ---- …………)
因此在数据链路层上给他加了一个帧定界符,标识不同数据帧的边界,因此有头有尾,从而可以达到连续发(如 01011010…………)
在链路层上数据导航依靠MAC地址,
因此 需要源MAC地址、目的MAC地址(下一跳)
此外,还需要类型说明字段
(来自网络层有不同的数据报类型,如IP数据报,ARP请求数据报,RARP请求数据报等)
不同类型的数据报传输的目的不一样,加的头尾不一样