1 ISO七层参考模型
2 TCP\IP模型
2.1 四层模型与参考模型的对应关系
2.2 四层模型下的协议
2.2.1 数据链路层
数据链路层: 实现物理地址的寻址,实现网卡接口的驱动,完成数据在物理媒介间的传输。
数据链路层协议: ARP(Address Resolve protocol)和RARP(ReverseAddress Resolve protocol)是链路层常用的两个协议,这对协议的主要功能是实现IP逻辑地址与MAC设备物理地址的转换。IP地址通过ARP协议转化为MAC地址,而RARP则为网络上的无盘工作站提供MAC地址的查询。
2.2.2 网络层
网络层: 实现数据传输时的路径选择和转发。
网络层协议: 最核心的协议就是因特网协议(Internet protocol, 简称IP协议)。此协议更新传输数据的地址进行寻址并选择合适的路径供数据传输,这个过程中数据有事并非直达,所以IP协议也负责数据的中间转发。
2.2.3 传输层
传输层: 为网络上运行在不同主机上的两个应用程序提供端到端的通信,传输层只是关注数据其实发送端及最终的接受端,而不在乎数据在网络中运送的中间过程。
传输层协议: 传输层中最最重要的两个协议就是TCP协议及UDP协议。前者为应用层提高可靠地、面向连接的、基于数据流的传输服务;后者提供不可靠的、无连接的、基于数据报的传输服务。
2.2.4 应用层
应用层: 直接和用户交互,主要负责处理应用程序所需的各种不同类型的应用层协议,如HTTP\HTTPs、DNS、RTP、NFS等等。
2.3 四层模型下的交互
数据从发送方逐层进行数据传输的时候,在每层都会添加该层的必要信息,组成包头,如下:
而在接收端数据解析时,逐层剥离包头信息,最后得到真实的数据信息。
3 以太网报文
3.1 解析
-目标地址: 目标MAC地址。
-源地址: 源MAC地址。
-协议类型: 上层协议,表示网络层使用的协议。
-数据: 高层协议、数据和填充符,范围在46~1500字节。
-CRC: 数据帧校验序列,用于确定数据包在传输过程中是否损坏。
4 IP报文
网络通信的过程中,我们通常不需要处理以太网包首部的信息,因为其主要封装的是硬件的一些协议及配置信息,而通常需要我们关注的主要是IP报文头及其之后的报文信息。IP报文头通常为20字节,如果有选项信息加入时,最大长度也不超过60字节,如下是剥离以太网包首部后的报文。
4.1 解析
-
版本: IP协议版本号,IPV4还是IPV6。
-
首部长度: IP头部的长度,以4字节为单位,除去选项20字节,选项长度可变,范围0-40字节。
-
服务类型: 包含一个4位优先权字段:最小延时,最大吞吐量,最高可靠性和最小费用。
优先权: 数值(十进制0~7)越大,表示该数据报优先权越高。网络中路由器可以使用优先权进行拥塞控制,如当网络发生拥塞时可以根据数据报的优先权来决定数据报的取舍。
短延迟位D: 该位置为1时,数据报请求以短延迟信道传输,0表示正常延时。
高吞吐量位T: 该位置1时,数据报请求以高吞吐量信道传输,0表示普通。
高可靠位R(Reliability): 该位置1时,数据报请求以高可靠性信道传输,0表示普通。
保留位: 保留字段 -
总长度: 整个IP数据报的长度,最大为65535,但由于MTU的限制,一般远小于这个数值。
-
标识: 数据报的标识,系统采用边发送边赋值的方式。
-
标志: 三位分别是保留区,禁止分片标志,和更多分片标志。DF位设置1时表示禁止分区,如果数据报文过大,可能会发送失败;MF位设置1时不是结尾报文段,最后一个分片该位为0。
-
片偏移: 分片相对于原始报文片开始的偏移,单位是每8个字节为1个单位。以太网最大的帧长为1518, IP报文1500byte + 帧头18byte = 1518byte
-
生存时间: 报文抵达目的地址前,允许经过的路由跳数,每经过1跳TTL值减1,值减到0的时候,丢包。
-
协议: 用来区分上层协议(例如TCP,UDP等)。
-
首部校验和: 以CRC算法校验数据在传输过程中头部是否损坏。
-
源IP地址: 发送端的IP地址。
-
目的IP地址: 目的IP地址。
-
选项: 此字段很少使用,用于控制、转发要求、测试等。
4.2 报文分片及重组
报文分片: 一数据报总长度5428字节,首部28字节,数据5400字节。当前网络能传送的数据报的最大长度为1500字节.
我们将分片长度设置为1440B,及偏移量为180,分片的时候每个分片数据前面需要加上报文头,并填充标识、标志和偏移量,分片如下:
报文重组: 接收端收到的报文片段并不是顺序到达的,根据收到的报文碎片中的16位标识可以标识一个IP报文,当识别到当前标识的报文片段中DF为0的片段时,则意味着找到了第一个片段,再根据偏移量顺序的组接对应片段(去掉第一个片段后分片报文的头部),当重组到最后一个分片是MF标志位0,意味着完整地报文重组完成。
5 TCP报文
当原始的报文在剥离了以太网包头部及IP报文头部后,就是TCP报文头,同IP头部比较类似类似,TCP头部通常也为20字节,带上选项部分,最大不超过60字节,其报文结构如下:
5.1 解析
源端口号: 发送端的端口号,用来标识数据的返回接口。
目的端口号: 目的端的端口号,用来明接收方计算机上的应用程序接口。
序号: TCP通信过程中,通过序列号来保证传输过程中数据的有序性。它是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。如果一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。
确认序号: 其指明了下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0。
首部长度: TCP头部的大小,以4字节为单位。
保留位: 保留字段。
URG: 表示紧急指针。为1时表示紧急指针有效,为0则忽略紧急指针。
ACK: 表示确认号。为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。
PSH: 为1表示是带有push标志的数据,通知对端立即从缓冲区取走数据。指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。
**RST:**重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。
SYN: 表示请求建立连接。同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。
FIN: 标志要通知对端本端的数据发送要关闭。为1时表示发送方已经没有数据发送了,即关闭本方数据流
窗口大小: 滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535。
校验和: 由发送方填充,接收端用CRC校验算法,用以检查TCP报文在传输过程中是否有损坏。
紧急指针: 只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。
6 Socket通信
套接字是通信的基石,是支持TCP/IP协议的路通信的基本操作单元。可以将套接字看作不同主机间的进程进行双间通信的端点,它构成了单个主机内及整个网络间的编程界面。Socket(套接字)可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,这是一个逻辑上的概念。它是网络环境中进程间通信的API(应用程序编程接口),也是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连进程。
6.1 三次握手
6.2 四次分手
7 应用层协议
应用协议是建立在IP/TCP协议层之上的应用协议。
7.1 HTTP
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。
http的长连接和短连接,本质上是tcp层的长连接和短连接
(1) http 1.0 默认使用短连接,就是,客户端和服务端每进行一次http操作,就建立一次连接,任务结束就中断连接。如果请求的html中有网络js和图片,则需要新建连接去取。
client发起请求–建立连接–server响应请求—发送消息–关闭连接
建立连接–数据传输–关闭连接
(2) http 1.1 默认使用长连接,在使用的http协议,在响应头会加上 Connection:keep-alive,当一个网页打开完成之后,连接不会马上关闭,再次访问这个服务时,
会继续使用这个长连接,而是在一段时间后关闭,这个时间可以再浏览器设置。
建立连接–数据传输…保持连接…数据传输–关闭连接
7.2 RPC
RPC是远程过程调用(Remote Procedure Call)的缩写形式。SAP系统RPC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。