TCP/IP 协议相关的问题

541 阅读8分钟

一,什么是 TCP/IP?

TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议。

基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层、网络层、传输层和应用层。下图表示TCP/IP模型与OSI模型各层的对照关系。

TCP/IP协议族按照层次由上到下,层层包装。最上面的是应用层,这里面有http,ftp,等等我们熟悉的协议。而第二层则是传输层,著名的TCP和UDP协议就在这个层次。第三层是网络层,IP协议就在这里,它负责对数据加上IP地址和其他的数据以确定传输的目标。第四层是数据链路层,这个层次为待传送的数据加入一个以太网协议头,并进行CRC编码,为最后的数据传输做准备。

上图清楚地表示了TCP/IP协议中每个层的作用,而TCP/IP协议通信的过程其实就对应着数据入栈与出栈的过程。入栈的过程,数据发送方每层不断地封装首部与尾部,添加一些传输的信息,确保能传输到目的地。出栈的过程,数据接收方每层不断地拆除首部与尾部,得到最终传输的数据。下图以HTTP协议为例,具体说明。

二,TCP/IP模型

OSI TCP/IP 协议
应用层/表示层/会话层 应用层 HTTP、FTP、TFTP、SMIP、SNMP、DNS
传输层 传输层 TCP、UDP
网络层 网络层 ICMP、IGMP、IP、ARP、RARP
数据链路层/物理层 网络接口层 由底层网络定义协议

三,OSI七层网络模型—Open System Interconnection

OSI 功能 TCP/IP协议
应用层 面向计算机用户,提供应用程序和网络之间的接口,向用户提供服务, 完成用户希望在网上完成的各种工作 HTTP、FTP、TFTP、SMIP、SNMP、DNS
表示层 处理来自应用层的的命令和数据,对各种语法解释,按照规格传给会话层。处理编码,数据可是转换和加密解密 没有协议
会话层 用户应用程序和网络之间的接口,向两个实体表示层提供连接和连接方法,不同实体之间的表示层连接叫做会话,因此主要功能是维护和协调会话之间的数据通信 没有协议
传输层 为会话层和网络层提供传输服务,从会话层获得数据,在必要时进行分割,然后传送给网络层,主要起到建立,维护和取消传输连接功能,负责两节点的可靠传输 TCP、UDP
网络层 通过路由算法(两节点之间可能有多条路径),为报文选择最适当的路径,在网络层数据转换为数据包,通过路径选择等控制,将信息从一个网络设备传送到另一个网络设备 ICMP、IGMP、IP、ARP、RARP
数据链路层 数据链路层的数据传输单元成为帧,就是将网络层转发的数据封装为帧,传输给物理层,以及分析物理层传输过来的数据帧 SLIP、CSLIP、PPP、ARP、RARP、MTU等
物理层 为数据链路层提供数据帧和接收数据帧然后管理电脑通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机适配器等 ISO2110等

四,TCP/IP分层模型图

  • 链路层—网络接口层

网络接口层是TCP/IP模型的最底层,负责接收从上一层交来的数据报并将数据报通过底层的物理网络发送出去,比较常见的就是设备的驱动程序。ARP(地址解析协议)和RARP(逆地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换IP层和网络接口层使用的地址

  • 网络层

对应OSI网络层,负责数据包装、寻址、路由和交换错误报文。只管传送数据,不管成功与否

IP网络协议一种不可靠的服务,快速将源节点送到目标节点,被TCP/UDP使用,TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。

  • 传输层

位于应用层和网络接口层之间,为两台主机提供端到端的通信,在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。

五,TCP三次握手

三次握手

TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。

三次握手的原因:

确认建立联系,同步如序号等相关信息

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

六,TCP四次挥手

当客户端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕,肯定是要断开TCP连接的啊。那对于TCP的断开连接,这里就有了神秘的“四次分手”。

为什么要四次分手?

TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。

六,IP

TCP/IP 协议网络上的每一个网络适配器都有一个唯一的 IP 地址.

IP 地址是一个 32 位的地址,这个地址通常分成 4 端,每 8 个二进制为一段,但是为了方便阅读,通常会将每段都转换为十进制来显示,比如大家非常熟悉的 192.168.0.1

IP 地址分为两个部分:网络 ID 和 主机 ID

但是具体哪部分属于网络 ID,哪些属于主机 ID 并没有规定.

因为有些网络是需要很多主机的,这样的话代表主机 ID 的部分就要更多,但是有些网络需要的主机很少,这样主机 ID 的部分就应该少一些.

绝大部分 IP 地址属于以下几类

  • A 类地址:IP 地址的前 8 位代表网络 ID ,后 24 位代表主机 ID。
  • B 类地址:IP 地址的前 16 位代表网络 ID ,后 16 位代表主机 ID。
  • C 类地址:IP 地址的前 24 位代表网络 ID ,后 8 位代表主机 ID。

这里能够很明显的看出 A 类地址能够提供出的网络 ID 较少,但是每个网络可以拥有非常多的主机,但是我们怎么才能看出一个 IP 地址到底是哪类地址呢?

  • 如果 32 位的 IP 地址以 0 开头,那么它就是一个 A 类地址。
  • 如果 32 位的 IP 地址以 10 开头,那么它就是一个 B 类地址。
  • 如果 32 位的 IP 地址以 110 开头,那么它就是一个 C 类地址。

那么转化为十进制(四段)的话,我们就能以第一段中的十进制数来区分 IP 地址到底是哪类地址了。

  • 十进制第一段大于 223 的属于 D 类和 E 类地址,这两类比较特殊也不常见,这里就不做详解介绍了。
  • 每一类都有一些排除地址,这些地址并不属于该类,他们是在一些特殊情况使用地址
  • 除了这样的方式来划分网络,我们还可以把每个网络划分为更小的网络块,称之为子网
参考文章