简介:
协议, 网络协议的简称,网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连
接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。它的 三要素是:语
法、语义、时序。
为了使数据在网络上从源到达目的,网络通信的参与方必须 遵循相同的规则,这套规则称为协议
(protocol),它最终体现为在网络上传输的数据包的格式。
协议往往分成几个层次进行定义, 分层定义是为了 使某一层协议的改变不影响其他层次的协议。
常见协议:
应用层常见的协议有:FTP协议(File Transfer Protocol 文件传输协议)、HTTP协议(Hyper Text
Transfer Protocol 超文本传输协议)、NFS(Network File System 网络文件系统)。
传输层常见协议有:TCP协议(Transmission Control Protocol 传输控制协议)、UDP协议(User
Datagram Protocol 用户数据报协议)。
网络层常见协议有:IP 协议(Internet Protocol 因特网互联协议)、ICMP 协议(Internet Control
Message Protocol 因特网控制报文协议)、IGMP 协议(Internet Group Management Protocol 因特网组管理协议)。
网络接口层常见协议有:ARP协议(Address Resolution Protocol 地址解析协议)、RARP协议
(Reverse Address Resolution Protocol 反向地址解析协议)。
UDP协议:
1. 源端口号:发送方端口号。
2. 目的端口号:接收方端口号。
3. 长度: UDP 用户数据报的长度,最小值是 8 (仅有首部)。
4. 校验和:检测 UDP 用户数据报在传输中是否有错,有错就丢弃。
图的上方是UDP的头,下面是数据。
TCP协议 :
1. 源端口号:发送方端口号。
2. 目的端口号:接收方端口号。
3. 序列号:本报文段的数据的第一个字节的序号。
4. 确认序号:期望收到对方下一个报文段的第一个数据字节的序号。
5. 首部长度(数据偏移): TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远,即首部长
度。单位: 32 位,即以 4 字节为计算单位。
6. 保留:占 6 位,保留为今后使用,目前应置为 0。
7. 紧急 URG :此位置 1 ,表明紧急指针字段有效,它告诉系统此报文段中有紧急数据,应尽快传送。
8. 确认 ACK :仅当 ACK=1 时确认号字段才有效, TCP 规定,在连接建立后所有传达的报文段都必须把 ACK 置 1。
9. 推送 PSH :当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。在这种情况下,TCP 就可以使用推送( push )操作,这时,发送方 TCP 把 PSH 置 1 ,并立即创建一个报文段发送出去,接收方收到 PSH = 1 的报文段,就尽快地 (即“ 推送 ” 向前)交付给接收应用进程,而不再等到整个缓存都填满后再向上交付
10. 复位 RST :用于复位相应的 TCP 连接。
11. 同步 SYN :仅在三次握手建立 TCP 连接时有效。当 SYN = 1 而 ACK = 0 时,表明这是一个连接请求报文段,对方若同意建立连接,则应在相应的报文段中使用 SYN = 1 和 ACK = 1 。因此, SYN 置 1 就表示这是一个连接请求或连接接受报文 12. 终止 FIN :用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要 求释放运输连接。
13. 窗口:指发送本报文段的一方的接收窗口(而不是自己的发送窗口)。
14. 校验和:校验和字段检验的范围包括首部和数据两部分,在计算校验和时需要加上 12 字节的伪头部。
15. 紧急指针:仅在 URG = 1 时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据),即指出了紧急数据的末尾在报文中的位置,注意:即使窗口为零时也可发送紧急数据。
16. 选项:长度可变,最长可达 40 字节,当没有使用选项时, TCP 首部长度是 20 字节。
IP协议 :
1. 版本: IP 协议的版本。通信双方使用过的 IP 协议的版本必须一致,目前最广泛使用的 IP 协议版本号为 4 (即 IPv4)。
2. 首部长度:单位是 32 位( 4 字节)。
3. 服务类型:一般不适用,取值为 0。
4. 总长度:指首部加上数据的总长度,单位为字节。
5. 标识( identification ): IP 软件在存储器中维持一个计数器,每产生一个数据报,计数器就加 1 , 并将此值赋给标识字段。
6. 标志( flag ):目前只有两位有意义。
标志字段中的最低位记为 MF 。 MF = 1 即表示后面 “ 还有分片 ” 的数据报。 MF = 0 表示这已是若干数据报片中的最后一个。 标志字段中间的一位记为 DF ,意思是 “ 不能分片 ” ,只有当 DF = 0 时才允许分片。
7. 片偏移:指出较长的分组在分片后,某片在源分组中的相对位置,也就是说,相对于用户数据段的起点,该片从何处开始。片偏移以 8 字节为偏移单位。
8. 生存时间: TTL ,表明是数据报在网络中的寿命,即为 “ 跳数限制 ” ,由发出数据报的源点设置这个字段。路由器在转发数据之前就把 TTL 值减一,当 TTL 值减为零时,就丢弃这个数据报。
9. 协议:指出此数据报携带的数据时使用何种协议,以便使目的主机的 IP 层知道应将数据部分上交。给哪个处理过程,常用的 ICMP(1) , IGMP(2) , TCP(6) , UDP(17) , IPv6 ( 41 )
10. 首部校验和:只校验数据报的首部,不包括数据部分。
11. 源地址:发送方 IP 地址。
12. 目的地址:接收方 IP 地址。
以太网帧协议:
类型:0x800表示 IP、0x806表示 ARP、0x835表示 RARP 。
也就是MAC地址的封装。
ARP协议 :
1. 硬件类型: 1 表示 MAC 地址。
2. 协议类型: 0x800 表示 IP 地址。
3. 硬件地址长度: 6字节。(存的是硬件地址是6个字节,实际上这里存的就是长度,占一个字节)
4. 协议地址长度:4字节。(存的是硬件地址是6个字节,实际上这里存的就是长度,占一个字节)
5. 操作: 1 表示 ARP 请求, 2 表示 ARP 应答, 3 表示 RARP 请求, 4 表示 RARP 应答。
封装:
上层协议是如何使用下层协议提供的服务的呢?其实这是通过封装( encapsulation )实现的。应用程序数据在发送到物理网络上之前,将沿着协议栈从上往下依次传递。每层协议都将在上层数据的基础上加上自己的头部信息(有时还包括尾部信息),以实现该层的功能,这个过程就称为封装。
由下往上传递的时候,上层都是 通过下层的头部或尾部来获取所需的信息。
分用:
当帧到达目的主机时,将沿着协议栈自底向上依次传递。各层协议依次处理帧中本层负责的头部数据,以获取所需的信息,并最终将处理后的帧交给目标应用程序。这个过程称为分用(demultiplexing )。分用是依靠头部信息中的类型字段实现的。
自下向上传递时,不保留头部数据。 上一层封装之后的内容就是作为下一层的数据去使用。
网络通信的过程:
过程中有一个错误就终止操作。 A通过ARP协议(根据ip找到MAC地址)得到B的MAC地址。在此之后就无需ARP协议了,因为电脑已经缓存下来了。
ARP到底是怎么封装的:
给局域网内的所有的机器发送ARP请求,然后通过数据报中的目的端IP地址来响应(是否匹配),匹配就应答。
ARP(地址解析协议)的请求和应答是在同一侧操作的,通常是由发送方发起的。
上图中的目的端以太网地址,一开始不知道就填:00:00:00:00:00:00:00。
以太网帧头中的目的物理地址,ff.ff.ff.ff.ff.ff.ff表示给局域网中所有的机器发送请求。ARP报文是数据。
ARP应答包更改其中的一些数据即可。
以太网帧协议变换过程:
-
初始情况: 假设两台主机首次进行通信。发送端希望与目标主机通信,但只知道目标主机的IP地址。此时,发送端会构建一个以太网帧,以太网帧的类型字段设置为0x0800,表示上层协议是IPv4。
-
ARP请求: 发送端发送这个以太网帧到本地网络,但由于只知道目标IP地址,而不知道目标MAC地址,所以发送的以太网帧的类型字段被设置为0x0806,表示上层协议是ARP。这个ARP请求广播到本地网络,目的是获取目标主机的MAC地址。
-
接收端响应: 目标主机接收到ARP请求,识别到自己的IP地址,然后发送ARP应答。这个ARP应答封装在以太网帧中,类型字段仍为0x0806。
-
获得MAC地址: 发送端接收到ARP应答,从中获取目标主机的MAC地址。此时,发送端已经知道目标主机的MAC地址,可以将这个MAC地址保存起来以便将来使用。
-
切换到IPv4通信: 接下来的通信可以使用IPv4。发送端构建以太网帧,类型字段设置为0x0800,表示上层协议是IPv4。这时发送端已经知道了目标主机的MAC地址,可以将IPv4数据封装在以太网帧中,然后发送到目标主机。