当前位置:首页>HTTP>Web及网络基础>与 HTTP 关系密切的协议 :TCP、IP协议

与 HTTP 关系密切的协议 :TCP、IP协议

作者:微学网发布时间:2019-09-05 23:41:33

负责传输的 IP 协议

按层次分, IP(Internet Protocol) 网际协议位于网络层。

Internet Protocol 这个名称可能听起来有点夸张,但事实正是如此,因为几乎所有使用网络的系统都会用到 IP 协议。

TCP/IP 协议族中的 IP 指的就是网际协议, 协议名称中占据了一半位置, 其重要性可见一斑。 可能有人会把“IP”和“IP 地址”搞混, “IP”其实是一种协议的名称。

IP 协议的作用是把各种数据包传送给对方。 而要保证确实传送到对方那里, 则需要满足各类条件。 其中两个重要的条件是 IP 地址和 MAC地址(Media Access Control Address) 。

IP 地址指明了节点被分配到的地址, MAC 地址是指网卡所属的固定地址。 IP 地址可以和 MAC 地址进行配对。 IP 地址可变换, 但 MAC地址基本上不会更改。

使用 ARP 协议凭借 MAC 地址进行通信

IP 间的通信依赖 MAC 地址。 在网络上, 通信的双方在同一局域网
(LAN) 内的情况是很少的, 通常是经过多台计算机和网络设备中转才能连接到对方。 而在进行中转时, 会利用下一站中转设备的 MAC地址来搜索下一个中转目标。 这时, 会采用 ARP 协议(Address Resolution Protocol) 。 ARP 是一种用以解析地址的协议, 根据通信方的 IP 地址就可以反查出对应的 MAC 地址。
没有人能够全面掌握互联网中的传输状况。

路由

在到达通信目标前的中转过程中, 那些计算机和路由器等网络设备只能获悉很粗略的传输路线。

这种机制称为路由选择(routing) , 有点像快递公司的送货过程。 想要寄快递的人, 只要将自己的货物送到集散中心, 就可以知道快递公司是否肯收件发货, 该快递公司的集散中心检查货物的送达地址, 明确下站该送往哪个区域的集散中心。 接着, 那个区域的集散中心自会判断是否能送到对方的家中。

我们是想通过这个比喻说明, 无论哪台计算机、 哪台网络设备, 它们都无法全面掌握互联网中的细节。

IP协议

IP地址是因特网上的每个主机(或路由器)的每一个接口分配的全世界唯一的32位标识符。 每个IP地址由网络地址和主机号组成,与MAC地址不同,IP地址和网络相关,使我们能区分两台主机是否属于同一个子网。如果两个IP地址在同一个子网内,则网络地址一定相同。

各类地址的分法不尽相同,以C类地址192.168.24.1为例,其中前24位就是网络地址,后8位就是主机地址。为了判断IP地址中的网络地址,IP协议还引入了子网掩码, IP地址和子网掩码通过按位与运算后就可以得到网络地址。 
A类地址的默认子网掩码是255.0.0.0 
B类地址的默认子网掩码是255.255.0.0 
C类地址的默认子网掩码是255.255.255.0

因此根据应用层传入的IP地址信息我们可以确定收发双方是否属于同一个子网。

ARP协议

ARP协议即地址解析协议,可以根据IP地址获得对应的MAC地址,与之相反还有RARP逆地址解析协议。

ARP协议具体过程为: 
首先会发起一个请求数据包,数据包的首部包含了目标主机的IP地址,然后这个数据包会在链路层进行再次包装,生成以太网数据包广播给子网内的所有主机,每一台主机都会接收到这个数据包,并取出标头里的IP地址,然后和自己的IP地址进行比较,如果相同就返回自己的MAC地址,如果不同就丢弃该数据包。ARP接收返回消息,以此确定目标机的MAC地址;与此同时,ARP还会将返回的MAC地址与对应的IP地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

路由协议

上述协议都有局限,即都是在同一个子网下,不在一个子网怎么办呢?因此引入了路由协议。回想上述步骤,根据IP协议判断收发双方是否在同一个子网,如果再,则使用ARP协议查询相应的MAC地址,然后广播数据包。如果不在,该数据包会转发给本子网的网关进行路由,多次路由之后找到目标IP所在的子网,再通过ARP获得MAC地址,然后以广播形式发送数据包。完成路由协议的物理设备就是我们常说的路由器。

因此网络层主要工作是定义网络地址并区分网段、确定MAC地址,对不同子网的数据包进行路由。

拓展知识:
网络层被“包裹”的数据称为IP数据报,由首部、数据部分两部分组成,首部长20字节,包括目标IP、源IP。数据部分最大传输65515字节数据,超过部分需要进行分割,多帧传输。

确保可靠性的 TCP 协议

按层次分, TCP 位于传输层, 提供可靠的字节流服务。

所谓的字节流服务(Byte Stream Service) 是指, 为了方便传输, 将大块数据分割成以报文段(segment) 为单位的数据包进行管理。

而可靠的传输服务是指, 能够把数据准确可靠地传给对方。 一言以蔽之,TCP 协议为了更容易传送大数据才把数据分割, 而且 TCP 协议能够确认数据最终是否送达到对方。

确保数据能到达目标

为了准确无误地将数据送达目标处, TCP 协议采用了三次握手(three-way handshaking) 策略。 用 TCP 协议把数据包送出去后, TCP不会对传送后的情况置之不理, 它一定会向对方确认是否成功送达。

握手过程中使用了 TCP 的标志(flag) —— SYN(synchronize) 和ACK(acknowledgement) 。

发送端首先发送一个带 SYN 标志的数据包给对方。 接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。 最后, 发送端再回传一个带 ACK 标志的数据包, 代表“握手”结束。

若在握手过程中某个阶段莫名中断, TCP 协议会再次以相同的顺序发送相同的数据包。

除了上述三次握手, TCP 协议还有其他各种手段来保证通信的可靠性。

三次握手