TCP/IP协议

来源:互联网 发布:建站影响以后的优化吗 编辑:程序博客网 时间:2024/05/21 09:55

OSI参考模型

早期,不同的公司会有不同的网络体系结构,不同公司之间的网络难以相互连通,因此,为了实现大一统,让不同的体系结构的网络能够互连,国际标准化组织ISO提出了计算机能在世界范围内互连成网的标准框架,即开放系统互连基本参考模型OSI/RM(Open System Interconnection Reference Model),简称OSI。

分层设计

相互通信的计算机必须高度协调工作才行,但“协调”相当的复杂,为了设计这样复杂的网络,设计时就提出了分层方法。“分层”可以将庞大而复杂的问题,转化为若干个小的局部问题,而较小的局部问题就相对而言就较易于研究和处理。

为什么到最后OSI没有流行起来

20世纪90年代初,虽然整套OSI已经制定出来,然而由于因特网抢先覆盖市场,而市场上几乎找不到有什么厂家生产符合OSI标准的商用产品。因此有,“OSI只得到理论研究成果,无缘市场化”的说法。回过头来,那它为什么会失败呢?

  • OSI专家们缺乏实际经验,缺乏商业驱动力;
  • OSI协议实现起来过分复杂,运行效率低;
  • 制定周期长,无法及时进入市场;
  • 层次划分不太合理,有些功能在多个层次中重复出现。

OSI7层协议体系结构概念清楚,理论也较完整,但它既复杂又不实用,TCP/IP则不同,得到非常广泛的应用。

为什么TCP/IP

就像人与人之间可以用语言进行交流,而我们语言又会遵循一定的语法规则(一堆协议)。同样地,连接在网络上的电脑之间,要想相互之间搭个招呼交个流也是如此,需要大家遵循同样一套办法来“说话”和“翻译”,他们之间的语法规则就是TCP/IP(协议族)

首先,一句话应该怎么说,别的机器才能听懂,来看下语法规则。

这里写图片描述

相关概念:

  • 包 :TCP / IP 协议中,每一层的数据都可以成为包;
  • 帧 (以太网数据帧):链路层包的单位;
  • 数据包 (IP数据报):网络层以上包的单位,IP 给链路层的数据包称为 IP 数据报 (IP datagram);
  • 段 (TCP 报文段) : TCP 数据包,TCP 传递给 IP 的数据包成为 TCP 报文段 (TCP segment);
  • 消息: 应用层的数据包;

TCP/IP是什么

TCP/IP不是一个协议,而是一个协议族的统称,他不是计算机网络的全部,但协议涵盖了OSI参考模型的网络层、传输层,也不只是有TCP+IP两种协议,他是协议栈的统称,至少还包括ARP、ICMP、IGMP、UDP,以及让域名访问成为可能的DNS,以及电脑/手机自动获取IP地址DHCP,当然还有应用层协议如HTTP/SMTP/FTP等。分层结构如下:

应用层

负责处理特定的应用程序细节,包括:Telnet (远程登录)、FTP (文件传输协议)、SMTP (简单邮件传输协议)、SNTP (简单网络管理协议);

传输层

主要功能为两台主机上的应用程序提供端到端的通信,通过端口号识别两台主机上相对应程序之间进行通信。主要包括:TCP (传输控制协议)、UDP (用户数据报协议);

  • TCP 协议
    是一种面向连接的传输层协议,确保两台主机提供高可靠性的数据通信。它的任务是把来自应用程序的数据分成合适的小块交给下面的网络层,确认接收到数据的分组。为数据块设置超时时钟,一旦超过该时间就重新发送数据;

  • UDP 协议
    是一种面向无连接的传输层协议,为应用程序发送和接收数据报,只是将数据报的分组从一台主机发送到另一台主机,但并不保证数据报能够到达另一端,任何必须的可靠性都由应用程序提供。UDP 协议常用于分组数据较少或多播、广播通信以及视频通信等多媒体领域;

网络层

处理分组在网络中的活动,例如分组的选路。主要包括:IP 协议(网际协议)、ICMP 协议(Internet 互联网控制报文协议)、IGMP 协议(Internet 组管理协议)。

  • IP 协议
    负责基于 IP 地址转发数据包,不具有重发机制,是一种不可靠、无连接的传输协议,整个互联网能够通过把 IP 地址的作为主机标识,跨越网络传送和接收数据包;

  • ICMP 协议
    是 IP 协议的附属协议,IP 层用它来与其他主机或路由器交换错误报文或其他重要信息。IP 数据包在发送过程中发生异常导致无法到达目的端,则使用 ICMP 协议给发送端发送一个异常消息通知,该协议也可用来检查网络的健康状态;

  • IGMP 协议
    它用来把一个 UDP 数据报多播到多个主机;

链路层

处理与传输媒介相关的物理接口细节。主要包括:操作系统的设备驱动程序、计算机中对应的网络接口卡。

为什么三次握手

主要要是保证双方都确认自己都是存在的,就像红1红2军要联合起来打蓝军,于是出现了下面的双方对话。

当然这个过程也有可能不是可靠的,但是三次握手是最少的方式了。2次握手行不行呢?

原则上来说,2/3次都是不可靠的,但是为什么不采用2次,其原因在于为了防止已失效的连接请求报文段突然又传送到B,从而产生错误”,叙述如下:

A发出一个报文但没有丢失,但是在某个网络节点长时间滞留,以至延误到连接释放以后的某个时间才到达B,然而他是一个很早的已失效的报文段。但是B会怎么看呢?

B会觉得A想和我对话,于是就向A发了确认报文,同意建立连接,假如2次握手就可以,那么只要B发处确认信息,新的连接就建立了。但是,A会怎么看呢?

因为A根本没有发出建立连接的请求,因此A都不会理睬B的确认,也不会向B发送确认信息。几个意思?

也就是B的连接已经建立,然后还苦苦等待A发送消息,白白地浪费了资源。

四次挥手

参考

知乎专栏

网络协议TCP/IP概述