TCP/IP 协议详解

TCP/IP 协议

一、TCP/IP 是什么?

​ TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)体系结构是指能够在多个不同网络间实现的协议簇

​ TCP/IP 是一种体系结构,也代表了一系列的协议簇,同时,TCP 和 IP 又分别是建立在传输层和网络层的协议。而传输层协议还包含常见的面向无连接的 UDP 协议等。

二、基础知识

2.1 IP 地址

​ 网络上每一个节点都必须有一个独立的 IP地址 。现在,通常使用的IPv4标准的 IP地址 是一个32bit的数字,这32bit的数字分成四组,也就是常见的 255.255.255.255 的样式(点分十进制)。IPv4标准上,地址被分为五类,我们常用的是B类地址。具体的分类请参考IP地址的分类。需要注意的是IP地址是网络号+主机号的组合,这非常重要。

2.2 域名解析

​ 域名解析是把域名(eg: www.baidu.com)指向网站空间IP (eg: 163.177.151.110),让人们通过注册的域名可以方便地访问到网站的一种服务。为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。

2.3 端口号(port)

​ 注意,这个号码是用在TCP,UDP上的一个逻辑号码,并不是一个硬件端口,我们平时说把某某端口封掉了,也只是在IP层次把带有这个号码的IP包给过滤掉了而已。

2.4 应用编程接口

​ 现在常用的编程接口有socket和TLI。

2.5 OSI 七层参考模型

在这里插入图片描述

图2.5.1 OSI 七层参考模型
  • 应用层

    为应用程序提供服务并规定应用程序中通信相关的细节。包括文件传输、电子邮件、远程登录(虚拟终端)等协议。

  • 表示层

    将应用处理的信息转换为适合网络传输的格式,或将来自下一层的数据转换为上层能够处理的格式。因此它主要负责数据格式的转换。具体来说,就是将设备固有的数据格式转换为网络标准传输格式。不同设备对同一比特流解释的结果可能会不同。因此,使它们保持一致是这一层的主要作用。

  • 会话层

    负责建立和断开通信连接(数据流动的逻辑通路),以及数据的分割等数据传输相关的管理。

  • 传输层

    起着可靠传输的作用。只在通信双方节点上进行处理,而无需在路由器上处理。

  • 网络层

    将数据传输到目标地址。目标地址可以是多个网络通过路由器连接而成的某一个地址。因此这一层主要负责寻址和路由选择。

  • 数据链路层

    负责物理层面上互连的、节点之间的通信传输。例如与1个以太网相连的2个节点之间的通信。
    将0、1序列划分为具有意义的数据帧传送给对端(数据帧的生成与接收)。

  • 物理层

    负责0、1比特流(0、1序列)与电压的高低、光的闪灭之间的互换。

三、TCP/IP 协议与 OSI 7 层参考模型的关系

在这里插入图片描述

图3.1 OSI 参考模型与TCP/IP的关系

在这里插入图片描述

图3.2 OSI 参考模型与TCP/IP的关系

OSI参考模型注重 ”通信协议必要的功能是什么”,而TCP/IP则更强调 “ 在计算机上实现协议应该开发哪种程序 ” 。

3.1 应用层

​ TCP/IP的分层中,将OSI参考模型中的会话层、表示层和应用层的功能都集中到了应用程序中实现。这些功能有时由一个单一的程序实现,有时也可能会由多个程序实现。因此,细看TCP/IP的应用程序功能会发现,它不仅实现OSI模型中应用层的内容,还要实现会话层与表示层的功能。

​ TCP/IP应用的架构绝大多数属于客户端/服务端模型。提供服务的程序叫服务端,接受服务的程序叫客户端。在这种通信模式中,提供服务的程序会预先被部署到主机上,等待接收任何时刻客户可能发送的请求。
​ 客户端可以随时发送请求给服务端。有时服务端可能会有处理异常 、超出负载等情况,这时客户端可以在等待片刻后重发一次请求。

3.1.1 WWW

​ 浏览器与服务端之间通信所用的协议是 HTTP(HyperText Transfer Protocol)。所传输数据的主要格式是HTML(HyperText Markup Language)。WWW中的HTTP属于OSI应用层的协议,而HTML属于表示层的协议。

3.1.2 E-mail

​ 电子邮件其实就是指在网络上发送信件。有了电子邮件,不管距离多远的人,只要连着互联网就可以相互发送邮件。发送电子邮件时用到的协议叫做 SMTP(Simple Mail Tranfer Protocol)。

​ 最初,人们只能发送文本格式的电子邮件。然而现在,电子邮件的格式由 MIME 协议扩展以后,就可以发送声音、图像等各式各样的信息。甚至还可以修改邮件文字的大小、颜色。这里提到的MIME属于OSI参考模型的第6层——表示层。

3.1.3 文件传输(FTP)

​ 文件传输是指将保存在其他计算机硬盘上的文件转移到本地的硬盘上,或将本地硬盘的文件传送到其他机器硬盘上的意思。
​ 该过程使用的协议叫做 FTP(File Transfer Prototol)。FTP很早就已经投入使用,传输过程中可以选择用二进制方式还是文本方式(表示层功能) 。
​ 在FTP中进行文件传输时会建立两个TCP连接,分别是发出传输请求时所要用到的控制连接与实际传输数据时所要用到的数据连接(这两种连接的控制管理属于会话层的功能。) 。

3.1.4 远程登录协议(TelnetSSH

​ 远程登录是指登录到远程的计算机上,使那台计算机上的程序得以运行的一种功能。TCP/IP网络中远程登录常用TELNET(TELetypewriter NETwork的缩写。有时也称作默认协议。)和SSH(SSH是Secure SHell的缩写。) 两种协议。其实还有很多其他可以实现远程登录的协议,如BSD UNIX系中rlogin的 r 命令协议以及XWindow System中的X协议。

3.1.5 网络管理(SNMP)

​ 在TCP/IP中进行网络管理时,采用 SNMP(Simple Network Management Protocol)协议。使用SNMP管理的主机、网桥、路由器等称作SNMP代理(Agent),而进行管理的那一段叫做管理器(Manager)。SNMP正是这个Manager与Agent所要用到的协议。

​ 在SNMP的代理端,保存着网络接口的信息、通信数据量、异常数据量以及设备温度等信息。这些信息可以通过MIB(Management Information Base)(MIB也被称为是一种可透过网络的结构变量。) 访问。因此,在TCP/IP的网络管理中,SNMP属于应用协议,MIB属于表示层协议。
​ 一个网络范围越大,结构越复杂,就越需要对其进行有效的管理。而SNMP可以让管理员及时检查网络拥堵情况,及早发现故障,也可以为以后扩大网络收集必要的信息。

3.1.6 其他协议

​ 域名服务协议(Domain Name Service,DNS
​ 网络新闻传送协议(Network News Transfer Protocol,NNTP

HTTP 协议是 TCP/IP 协议簇中的一员,是应用层协议

3.2 传输层

​ 它的主要功能是对应用层传递过来的用户信息分成若干数据报,加上报头,便于端到端的通信。包括的协议有:

3.2.1 TCP

​ TCP是一种面向有连接的传输层协议。它可以保证两端通信主机之间的通信可达。TCP能够正确处理在传输过程中丢包、传输顺序乱掉等异常情况。此外,TCP还能够有效利用带宽,缓解网络拥堵。

​ 然而,为了建立与断开连接,有时它需要至少7次的发包收包,导致网络流量的浪费。此外,为了提高网络的利用率,TCP协议中定义了各种各样复杂的规范,因此不利于视频会议(音频、视频的数据量既定)等场合使用。

3.2.2 UDP

​ UDP有别于TCP,它是一种面向无连接的传输层协议。UDP不会关注对端是否真的收到了传送过去的数据,如果需要检查对端是否收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现。UDP常用于分组数据较少或多播、广播通信以及视频通信等多媒体领域。

3.3 网络层(互联网层)

​ 网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。

3.3.1 IP 协议

​ IP是跨越网络传送数据包,使整个互联网都能收到数据的协议。IP协议使数据能够发送到地球的另一端,这期间它使用IP地址作为主机的标识(连接IP网络的所有设备必须有自己唯一的识别号以便识别具体的设备。分组数据在IP地址的基础上被发送到对端。) 。

​ IP还隐含着数据链路层的功能。通过IP,相互通信的主机之间不论经过怎样的底层数据链路都能够实现通信。

​ 虽然IP也是分组交换的一种协议,但是它不具有重发机制。即使分组数据包未能到达对端主机也不会重发。因此,属于非可靠性传输协议。

3.3.2 ICMP 协议

​ IP数据包在发送途中一旦发生异常导致无法到达对端目标地址时,需要给发送端发送一个异常的通知。ICMP就是为这一功能而制定的。它有时也被用来诊断网络的健康状况。

3.3.3 ARP 协议

​ 从分组数据包的IP地址中解析出物理地址(MAC地址)的一种协议。

3.4 数据链路层

​ 这个层次为待传送的数据加入一个以太网协议头,并进行 CRC 编码,为最后的数据传输做准备。再往下则是硬件层次了,负责网络的传输,这个层次的定义包括网线的制式,网卡的定义等等,所以有些书并不把这个层次放在tcp/ip协议族里面,因为它几乎和tcp/ip协议的编写者没有任何的关系。

3.5 工作方式

​ 发送协议的主机从上自下将数据按照协议封装,而接收数据的主机则按照协议从得到的数据包解开,最后拿到需要的数据。这种结构非常有栈的味道,所以某些文章也把tcp/ip协议族称为tcp/ip协议栈。

四、TCP/IP通信传输流

在这里插入图片描述

图4.1 TCP/IP通信传输流

​ 假设甲给乙发送电子邮件,内容为:“早上好”。而从TCP/IP通信上看,是从一台计算机A向另一台计算机B发送电子邮件。我们就通过这个例子来讲解一下 TCP/IP 通信的发送过程。

■ ① 应用程序处理

​ 启动应用程序新建邮件,将收件人邮箱填好,再由键盘输入邮件内容“早上好”,鼠标点击“发送”按钮就可以开始TCP/IP的通信了。
​ 首先,应用程序中会进行编码处理。例如,日文电子邮件使用ISO2022-JP或UTF-8进行编码。这些编码相当于OSI的表示层功能。
​ 编码转化后,实际邮件不一定会马上被发送出去,因为有些邮件的软件有一次同时发送多个邮件的功能,也可能会有用户点击“收信”按钮以后才一并接收新邮件的功能。像这种何时建立通信连接何时发送数据的管理功能,从某种宽泛的意义上看属于OSI参考模型中会话层的功能。
​ 应用在发送邮件的那一刻建立TCP连接,从而利用这个TCP连接发送数据。它的过程首先是将应用的数据发送给下一层的TCP,再做实际的转发处理。

■ ② TCP模块的处理

​ TCP根据应用的指示(这种关于连接的指示相当于OSI参考模型中的会话层。) ,负责建立连接、发送数据以及断开连接。TCP提供将应用层发来的数据顺利发送至对端的可靠传输。

​ 为了实现TCP的这一功能,需要在应用层数据的前端附加一个TCP首部。TCP首部中包括源端口号和目标端口号(用以识别发送主机跟接收主机上的应用)、序号(用以发送的包中哪部分是数据)以及校验和(Check Sum,用来检验数据的读取是否正常进行的方法。) (用以判断数据是否被损坏)。随后将附加了TCP首部的包再发送给IP。

■ ③ IP模块的处理

​ IP将TCP传过来的TCP首部和TCP数据合起来当做自己的数据,并在TCP首部的前端在加上自己的IP首部。因此,IP数据包中IP首部后面紧跟着TCP首部,然后才是应用的数据首部和数据本身。IP首部中包含接收端IP地址以及发送端IP地址。紧随IP首部的还有用来判断其后面数据是TCP还是UDP的信息。

​ IP包生成后,参考路由控制表决定接受此IP包的路由或主机。随后,IP包将被发送给连接这些路由器或主机网络接口的驱动程序,以实现真正发送数据。

​ 如果尚不知道接收端的MAC地址,可以利用ARP(Address Resolution Protocol)查找。只要知道了对端的MAC地址,就可以将MAC地址和IP地址交给以太网的驱动程序,实现数据传输。

■ ④ 网络接口(以太网驱动)的处理

​ 从IP传过来的IP包,对于以太网驱动来说不过就是数据。给这数据附加上以太网首部并进行发送处理。以太网首部中包含接收端MAC地址、发送端MAC地址以及标志以太网类型的以太网数据的协议。根据上述信息产生的以太网数据包将通过物理层传输给接收端。发送处理中的FCS(Frame Check Sequence) 由硬件计算,添加到包的最后。设置FCS的目的是为了判断数据包是否由于噪声而被破坏。
在这里插入图片描述

图4.2 数据包的分层封装

​ 发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。这种把数据信息包装起来的做法称为封装(encapsulate)。传输时的数据包结构如下图:
在这里插入图片描述

图4.3 数据包首部的层次化

在这里插入图片描述

图4.4 分层中包的结构

五、几种协议详解

5.1 负责传输的 IP 协议

​ 按层次分,IP(Internet Protocol)网际协议位于网络层。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),有点像快递公司的送货过程。想要寄快递的人,只要将自己的货物送到集散中心,就可以知道快递公司是否肯收件发货,该快递公司的集散中心检查货物的送达地址,明确下站该送往哪个区域的集散中心。接着,那个区域的集散中心自会判断是否能送到对方的家中。我们是想通过这个比喻说明,无论哪台计算机、哪台网络设备,它们都无法全面掌握互联网中的细节。

img

图5.1.1 IP 数据报格式

5.2 确保可靠性的 TCP 协议

​ 按层次分,TCP 位于传输层,提供可靠的字节流服务。
​ 所谓的字节流服务(Byte Stream Service)是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传给对方。一言以蔽之,TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方。

确保数据能到达目标

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

img

图5.2.1 TCP 三次握手

img

图5.2.2 TCP 四次挥手

img

图5.2.3 TCP 报文格式(首部)

在这里插入图片描述

图5.2.4 TCP 报文格式(首部)

​ 另外,TCP中没有表示包长度和数据长度的字段。可由IP层获知TCP的包长由TCP的包长可知数据的长度。

■ 源端口号(Source Port)

​ 表示发送端端口号,字段长16位。

■ 目标端口号(Destination Port)

​ 表示接收端端口号,字段长度16位。

■ 序列号(Sequence Number)

​ 字段长32位。序列号(有时也叫序号)是指发送数据的位置。每发送一次数据,就累加一次该数据字节数的大小。

​ 序列号不会从0或1开始,而是在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传给接收端主机。然后再将每转发过去的字节数累加到初始值上表示数据的位置。此外,在建立连接和断开连接时发送的SYN包和FIN包虽然并不携带数据,但是也会作为一个字节增加对应的序列号。

■ 确认应答号(Acknowledgement Number)

​ 确认应答号字段长度32位。是指下一次应该收到的数据的序列号。实际上,它是指已收到确认应答号减一为止的数据。发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。

■ 数据偏移(Data Offset)

​ 该字段表示TCP所传输的数据部分应该从TCP包的哪个位开始计算,当然也可以把它看作TCP首部的长度。该字段长4位,单位为4字节(即32位)。不包括选项字段的话,如图6.26所示TCP的首部为20字节长,因此数据偏移字段可以设置为5。反之,如果该字段的值为5,那说明从TCP包的最一开始到20字节为止都是TCP首部,余下的部分为TCP数据。

■ 保留(Reserved)

​ 该字段主要是为了以后扩展时使用,其长度为4位。一般设置为0,但即使收到的包在该字段不为0,此包也不会被丢弃(保留字段的第4位(如图6.27中的第7位)用于实验目的,相当于NS(Nonce Sum)标志位。) 。

■ 控制位(Control Flag)

​ 字段长为8位,每一位从左至右分别为CWR、ECE、URG、ACK、PSH、RST、SYN、FIN。这些控制标志也叫做控制位。当它们对应位上的值为1时,具体含义如下图所示。

在这里插入图片描述

图5.2.5 控制位
  • CWR(Congestion Window Reduced)
    CWR标志与后面的ECE标志都用于IP首部的ECN字段。ECE标志为1时,则通知对方已将拥塞窗口缩小。

  • ECE(ECN-Echo)

    ECE标志表示ECNEcho。置为1会通知通信对方,从对方到这边的网络有拥塞。在收到数据包的IP首部中ECN为1时将TCP首部中的ECE设置为1。

  • URG(Urgent Flag)

    该位为1时,表示包中有需要紧急处理的数据。对于需要紧急处理的数据,会在后面的紧急指针中再进行解释。

  • ACK(Acknowledgement Flag)
    该位为1时,确认应答的字段变为有效。TCP规定除了最初建立连接时的SYN包之外该位必须设置为1。

  • PSH(Push Flag)
    该位为1时,表示需要将受到的数据立刻传给上层应用协议。PSH为0时,则不需要立即传而是先进行缓存。

  • RST(Reset Flag)
    该位为1时表示TCP连接中出现异常必须强制断开连接。例如,一个没有被使用的端口即使发来连接请求,也无法进行通信。此时就可以返回一个RST设置为1的包。此外,程序宕掉或切断电源等原因导致主机重启的情况下,由于所有的连接信息将全部被初始化,所以原有的TCP通信也将不能继续进行。这种情况下,如果通信对方发送一个设置为1的RST包,就会使通信强制断开连接。

  • SYN(Synchronize Flag)
    用于建立连接。SYN为1表示希望建立连接,并在其序列号的字段进行序列号初始值的设定(Synchronize本身有同步的意思。也就意味着建立连接的双方,序列号和确认应答号要保持同步。) 。

  • FIN(Fin Flag)
    该位为1时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换FIN位置为1的TCP段。每个主机又对对方的FIN包进行确认应答以后就可以断开连接。不过,主机收到FIN设置为1的TCP段以后不必马上回复一个FIN包,而是可以等到缓冲区中的所有数据都因已成功发送而被自动删除之后再发。

■ 窗口大小(Window Size)

​ 该字段长为16位。用于通知从相同TCP首部的确认应答号所指位置开始能够接收的数据大小(8位字节)。TCP不允许发送超过此处所示大小的数据。不过,如果窗口为0,则表示可以发送窗口探测,以了解最新的窗口大小。但这个数据必须是1个字节。

■ 校验和(Checksum)

​ TCP的校验和与UDP相似,区别在于TCP的校验和无法关闭。TCP和UDP一样在计算校验和的时候使用TCP伪首部。这个伪首部如图6.28所示。为了让其全长为16位的整数倍,需要在数据部分的最后填充0。首先将TCP校验和字段设置为0。然后以16位为单位进行1的补码和计算,再将它们总和的1的补码和放入校验和字段。

​ 接收端在收到TCP数据段以后,从IP首部获取IP地址信息构造TCP伪首部,再进行校验和计算。由于校验和字段里保存着除本字段以外其他部分的和的补码值,因此如果计算校验和字段在内的所有数据的16位和以后,得出的结果是“16位全部为1(1的补码中该值为0(负数0)、二进制中为1111111111111111,十六进制中为FFFF,十进制中则为正整数65535。) ”说明所收到的数据是正确的。

■ 紧急指针(Urgent Pointer)

​ 该字段长为16位。只有在URG控制位为1时有效。该字段的数值表示本报文段中紧急数据的指针。正确来讲,从数据部分的首位到紧急指针所指示的位置为止为紧急数据。因此也可以说紧急指针指出了紧急数
据的末尾在报文段中的位置。

​ 如何处理紧急数据属于应用的问题。一般在暂时中断通信,或中断通信的情况下使用。例如在Web浏览器中点击停止按钮,或者使用TELNET输入Ctrl + C时都会有URG为1的包。此外,紧急指针也用作表示数据流分段的标志。

■ 选项(Options)

​ 选项字段用于提高TCP的传输性能。因为根据数据偏移(首部长度)进行控制,所以其长度最大为40字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值