浅谈TCP/IP

2018-02-22  本文已影响0人  October_yang

TCP/IP四层协议系统

  1. 链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。

  2. 网络层,有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。

  3. 运输层主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。

  1. 应用层负责处理特定的应用程序细节。几乎各种不同的TCP/IP实现都会提供下面这些通用的应用程序:
1519256577761.png

链路层

Internet协议族中的最底层协议,链路层协议
在TCP/IP协议族中,链路层主要有三个目的:

TCP/IP支持多种不同的链路层协议,这取决于网络所使用的硬件,如以太网、令牌环网、FDDI(光纤分布式数据接口)及RS-232串行线路等

以太网链路层协议 , 两个串行接口链路层协议 ( S L I P 和 P P P ), 以及大多数实现都包含的环回( l o o p b a c k )驱动程序

SLIP:串行线路IP

它是一种在串行线路上对IP数据报进行封装的简单形式,下面的规则描述了SLIP协议定义的帧格式:

SLIP是一种简单的帧封装方法,其中有一些缺陷:

尽管存在这些缺点, SLIP仍然是一种广泛使用的协议

PPP:点对点协议

PPP点对点协议修改了SLIP协议中的所有缺陷,PPP包括以下三个部分:

PPP比SLIP具有下面这些优点:

为这些优点付出的代价是在么一帧的首部增加3个字符,当建立链路时要发送几帧协商数据,以及更为复杂的实现

环回接口

大多数的产品都支持环回接口( Loopback Interface),以允许运行在同一台主机上的客户程序和服务器程序通过TCP/IP进行通信

A类网络号127就是为环回接口预留的,根据惯例,大多数系统把IP地址127.0.0.1分配给这个接口,并命名为localhost

一个传给环回接口的IP数据报不能再任何网络上出现:一旦传输层检测到目的端地址是环回地址时,应该可以省略部分传输层和所 有网络层的逻辑操作。但是大多数的产品还是照样完成传输层和网络层的所有过程,只是当I P 数据报离开网络层时把它返回给自己

下图为环回接口处理IP数据报的过程


1519263350446.png

图中需要指出的关键点是:

    1. 传给环回地址(一般是127.0.0.1 )的任何数据均作为IP输入
    1. 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上
    1. 任何传给该主机IP地 址的数据均送到环回接口

最大传输单元MTU

以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节。链路层的这个特性称作MTU,最大传输单元,不同类型的网络大多是都有一个上限

如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行分片,把数据报分成若干片,这样每一片都小于MTU

点到点的链路层(如SLIP和PPP)的MTU并非指的是网络媒体的物理特性。相反,它是一个逻辑限制,目的是为交互使用提供足够快的响应时间

IP:网际协议

在网络中,每台计算机都有一个唯一的地址,方便别人找到它,这个地址称为IP地址
IP是TCP/IP协议族中最为核心的协议,所有的TCP/UDP/ICMP及IGMP数据都以IP数据报格式传输

IP提供不可靠、无连接的数据报传送服务:

IP首部

普通的IP首部长为20个字节,除非含有选项字段
IP数据报格式及首部中的各字段,如图所示:


1519263993880.png

IP路由选择

大多数主机采用的IP路由选择机制:

路由表中的每一项都包含下面这些信息:

IP路由选择是逐跳地进行的,IP并不知道到达任何目的地的完整路径(除了那些鱼主机直接相连的目的),所有的IP路由选择只为数据报传输提供下一站路由器的IP地址,它假定下一站路由器比发送数据报的主机更接近目的,而且下一站路由器与该主机是直接相连的

IP路由选择主要完成以下这些功能:

如果上面这些步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或“网络不可达”的错误

为一个网络指定一个路由器,而不必为每个主机指定一个路由器,这是IP路由选择机制的另一个基本特性。这样做可以极大地缩小路由表的规模,比如Internet上的路由器有只有几千个表目,而不会是超过100万个表目

IP地址的分类

IP地址的网络部分是由Internet地址分配机构来统一分配的,这样可以保证IP的唯一性

1519266982953.png

如图所示,红色为网络部分,绿色为主机部分

子网寻址

现在所有的主机都要求支持子网编址

  • 如果把IP看成单纯的一个网络号和一个主机号组成,A类和B类地址为主机号分配了太多的空间,可容纳的主机数分别为 2^24-2 和 2^16-2(除了全 0 和全 1),然而一个网络中人们并不安排这么多的主机
  • 现在把主机号再分成一个子网号和一个主机号,如对一个 B 类地址,前 16 位为网络号,将后 16 位主机号拆分为 8 位子网号和 8 为主机号。子网对外部路由器来说隐藏了内部网络组织(校园或公司内部)的细节。这样外部路由器仅需要知道下一跳路由的子网号,而无需知道具体的主机号,可以大大缩减路由表的规模

子网掩码

子网掩码(subnet mask)又叫子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机位的掩码。 子网掩码不能单独存在,它必须结合IP地址一起使用。 子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分

两种不同的B类地址子网掩码的例子,如图:


1519267598109.png

A B C 三类地址都有自己默认的子网掩码

给定IP地址和子网掩码后,主机就可以确定IP数据报的目的是:

TCP:传输控制协议

TCP提供一种面向连接的、可靠的字节流服务
TCP提供全双工服务,即数据可在同一时间双向传播

面向连接指的是两个使用TCP的应用(通常是客户端和服务端)在彼此交换数据之前必须先建立一个TCP连接,保证双向的接收和发送都是正常的

TCP通过下列方式来提供可靠性:

TCP数据包封装

1519289710856.png
源端口号和目标端口号,计算机通过端口号识别访问哪个服务,比如http服务或ftp服务,发送方端口号是进行随机端口,目标端口号决定了接收方哪个程序来接收

32位序列号:0~2^32-1范围内,32位序列号 TCP用序列号对数据包进行标记,以便在到达目的地后重新重装,假设当前的序列号为 s,发送数据长度为 l,则下次发送数据时的序列号为 s + l。在建立连接时通常由计算机生成一个随机数作为序列号的初始值

32位确认号:0~2^32-1范围内,对发送端的确认信息,告诉发送端这个序号之前的数据段都收到了。确认应答号,它等于下一次应该接收到的数据的序列号。假设发送端的序列号为 s,发送数据的长度为 l,那么接收端返回的确认应答号也是 s + l。发送端接收到这个确认应答后,可以认为这个位置以前所有的数据都已被正常接收

首部长度:TCP 首部的长度,单位为 4 字节。如果没有可选字段,那么这里的值就是 5。表示 TCP 首部的长度为 20 字节

控制位:TCP的连接、传输和断开都受这六个控制位的指挥

窗口值:说明本地可接收数据段的数目,这个值的大小是可变的。当网络通畅时将这个窗口值变大加快传输速度,当网络不稳定时减少这个值可以保证网络数据的可靠传输。它是来在TCP传输中进行流量控制的

窗口大小:用于表示从应答号开始能够接受多少个 8 位字节。如果窗口大小为 0,可以发送窗口探测

16位校验和:主要用来实现差错控制的,TCP校验和的计算包括TCP首部、数据和其它填充字节。在发送TCP数据段时,由发送端计算校验和,当到达目的地时又进行一次检验和计算。如果两次校验 和一致说明数据是正确的,否则 将认为数据被破坏,接收端将丢弃该数据

TCP的三次握手

为了建立一条TCP连接,经过以下过程:


1519291083705.png

这三个报文段完成连接的建立,这个过程也称为三次握手

TCP的四次挥手

建立一个连接需要三次握手,而终止一个连接要经过 4次握手,这是TCP的半关闭造成的

1519291815161.png

这样就终止一个连接的典型握手顺序,图中,发送FIN将导致应用程序关闭它们的链接,这些FIN和ACK是由TCP软件自动产生的

连接通常是由客户端发起的,这样第一个SYN从客户端传到服务器,每一端都能主动关闭这个连接(即首先发送FIN),一般是由客户端决定何时终止连接,因为客户进程通常由用户交互控制

UDP:用户数据报协议

UDP是一个无连接、不保证可靠性的传输层协议,也就是说发送端不关心发送的数据是否到达目标主机、数据是否出错等,收到数据的主机也不会告诉 发送方是否收到了数据,它的可靠性由上层协议来保障

首部结构简单,在数据传输时能实现最小的开销,如果进程想发送很短的报文而对可靠性要求不高可以使用

UDP首部

1519300585742.png

端口号表示发送进程和接收进程

UDP长度:指的是UDP首部和UDP数据的字节长度,该字段最小值为8字节,包含数据的长度,可以算出数据的结束位置

UDP校验和:覆盖UDP首部和UDP数据,UDP的差错控制(可选)

上一篇下一篇

猜你喜欢

热点阅读