TCP/IP你需要知道的

本文深入讲解TCP/IP协议的原理和应用,包括通信协议、参考模型、数据封装过程、应用层服务、传输层功能、端口号分配、TCP连接建立与断开、可靠性机制、Internet层协议、ICMP报文、ARP与RARP功能、子网规划等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、通信协议
TCP/IP(传输控制协议/网际协议)是发展至今最成功的通信协议。它的成功和和人们最Internet的广泛使用使其成为互联网络的市场标准。几乎所有厂商的设备都支持TCP/IP。但是TCP/IP并不为某个厂商、专业协会或者标准团体所有。

2、TCP/IP协议参考模型
TCP/IP协议栈主要分为四层:应用层(Application)、传输层(Transport)、网络层(Internet)、物理层(Network Access)。OSI参考模型有七层,下面是两者的对比:在这里插入图片描述
3、数据封装的过程
(参考上图)

  • 用户调用应用程序通过TCP/IP来访问相应的服务。应用层负责讲这些应用程序信息转化为数据流,交给传输层处理。
  • 传输层的基本任务是提供端到端的通信(即应用程序之间的通信)。在发送方,传输层将应用层提供的数据流分段,并将这些数据段加上标识,包括有哪个应用程序发出,由那个用用程序处理,使用什么传输协议、校验、报文长度等等,这种标识称为传输层报文头,例如TCP报文头、UDP报文头。在接收方,传输层拔掉报文头,并检验数据在传输过程中是否发生错误,然后将数据交给应用程序处理。
  • 网络层负责处理主机间的通信。该层要决定如何交付数据,是交给网关(路由器),还是交给适当的本地端口。
  • 网络访问层负责吧Internet层提供的数据包装封装成帧,然后通过选定的网络接口发送出去。
  • 物理层将帧转换成比特流发送出去。

下图很好的显示了这一个过程:在这里插入图片描述
4、应用层
TCP/IP应用层对应OSI参考模型的上三层,包括了一些服务。这些服务是和端用户相关认证、数据处理及压缩。应用层还主要包括了一下的Internet协议:

  • 文件传输类:如 HTTP(超文本传输协议)、FTP(文件传输协议)、TFTP(简单文件传输协议)
  • 远程登录类:如 Telnet
  • 电子邮件类:如 SMTP (简单邮件传输协议)
  • 网络管理类:如 SNMP (简单网络管理协议)
  • 域名解析类:如 DNS (域名服务)

HTTP
HTTP(Hypertext Transfer Protocol 、超文本链接协议)是一个用用层的面向对象的协议,适用于分布式超媒体信息系统。
WWW(World Wide Web、万维网)服务器使用的主要协议就是HTTP。但是HTTP支持的服务不限于WWW。
FTP
FTP(File Transfer Protocol、文件传输协议)。他的服务就是可以使用户高效的从Internet上的FTP服务器下载数据文件,以达到资源共享和传递信息的目的。
TFTP
TFTP(Trivial File Transfer Protocol、简单文件传输协议)是基于UDP的应用,适用于小文件的传输,它对内存和处理器的要求很低,速度快。
DNS
DNS(Domain Name System域名管理系统)是一台域名解析的服务器。在互联网中我们常用一些域名(www.taobao.com)来代替复杂的IP地址以定位计算机和服务。因此DNS的作用就是:把域名转换为IP地址。

4、传输层
传输层的主要功能是:分割并2重新组装上层提供的数据流,为数据流提供端到端的传输服务。
在TCP/IP协议中,有两个传输层协议:传输控制协议(TCP)、用户数据包协议(UDP)。
TCP和UDP的区别

  • TCP是一个可靠的面向连接的协议,可以保证数据的正确性和数据顺序,但是比较慢,效率低。
  • UDP是一个不可靠、无连接的协议,可能会丢包且不保证数据准确性,传输比较快。

端口号
每个应用程序都会产生自己的数据流,这些数据流可以把目标主机上相应的服务程序看做自己的目的地。对于传输层来说,他只需要知道目标主机上的那个服务程序是来响应这个应用程序,而不需要知道这个服务程序是干什么的。因此,传输层使用端口号来标识这些应用程序和服务程序。
计算机端口号的大致分配

端口号用途
小于255用于公共应用
225~1023特定供应商应用程序的注册端口号
高于1023未做规定

端口分配的例子
主机A telnet 到主机B,主机A首先向TCP请求一个可用端口,TCP分配端口号1088给他,主机A将目标端口号置为23,。A和B通信后,B看到A过来的端口号是23,就知道这是一个 telnet 应用,然后他就会创建一个 telnet 会话。如下图:在这里插入图片描述
那如果有多个 telnet 会话的发起呢?当另外一个 telnet 用户向TCP发送请求,然后TCP会分配一个端口1099,那么主机B上便会创建第二个会话。如下图所示:在这里插入图片描述
UDP
UDP为应用程序提供的一种不可靠的分组交付服务,UDP报文可能会出现丢失、重复、时延等问题。但是正是由于它的不可靠性,所以它的开销很小。换句话说:UDP提供了一种在高效可靠的网络上传输数据而不用消耗不必要的网络资源和处理时间的通信方式。

TCP所提供的服务

  • 面向链接的虚电路:在传输过程之前,通信双方要进行三次握手建立链接操作,以保证链接的可靠性。在传输过程中,通信双方的协议模块继续进行通信,以保证数据正确到达。在通信结束之后,关闭链接。
  • 面向流:当通信双方大量传输数据时,TCP将数据流看作可分的字节流,进行分组,接收方将收到的报文复原。
  • 流量控制:避免拥塞:为了提高传输效率和减少网络通信量,TCP会尽量一次传输足够多的数据。
  • 多路复用技术:端口号来实现。
  • 全双工连接:可以在一条连接上同时传输两个独立的、流向相反的数据流。

建立TCP连接(三次握手)
下图为TCP报文格式:
在这里插入图片描述
重点介绍几个字段:

  1. 序号:Seq序号,用来标识从TCP源端向目的端发送的字节流,发送方发送数据时对此进行标记。
  2. 确认序号:Ack序号,只有ACK标志为1的时候,确认序号才有效,Ack=Seq+1
  3. 标志位:SYN:发起一个新连接、FIN:释放一个连接、RET:重置连接、ACK:确认序号有效

在这里插入图片描述
第一次握手:Client随机产生一个值Seq=X,发送给服务器。
第二次握手:Sever接收到数据之后,知道这是Client请求 建立连接,然后随机产生一个值Seq=Y并发送给Client以确认连接请求。
第三次握手:Client收到确认之后,检查Ack是否为X+1,如果正确的话,Client发送Ack=Y+1到Sever,Sever收到之后检查Ack是否为Y+1,如果是,则连接建立成功。

四次挥手
在这里插入图片描述
第一次挥手:Client发送FIN(Finish),并随机产生一个序列号 Seq=X 发送给Sever,表示自己要断开连接了。
第二次挥手:Sever会随机产生一个序列号 Seq=Y ,而且产生Ack字段,一并发送给Client,表示我已经知道你的断开请求了。
第三次挥手:在第二次挥手之后,Sever不会马上断开连接,Sever确保在断开之前,所有数据已经传输完毕。一旦传输完毕,Sever随机产生一个 Seq=Z 的序列,并且和Ack字段一并发送给Client。
第四次挥手:在Client收到Sever发送过来的TCP断开请求后,随机产生一个 Seq=H 的序列,和Ack字段一起发送给Sever。

好了,到这里,TCP断开的4次挥手完毕。

TCP的可靠性
在通过三次握手建立链接时,序列号Seq被初始化,在传输过程中,将继续使用这一序列号来标记发送的数据,每发送一个数据段,序列号加一。在传输过程中确认号Ack的作用就是告诉发送的哪些数据已经被接收,并且会发送自己希望收到的下一个数据段的序列号。这种机制被称为预期确认。过程如下图所示:
在这里插入图片描述
超时与重传
如果在传输过程中某个数据段丢失,导致发送端得不到应答方的应答,那么这个丢失的数据就会被要求重发。数据段被存放在发送端的缓冲区,直到接收到应答方的应答信号,这个缓冲区才会被释放。这种机制被称为肯定确认与重新传输。
example:比如在网络拥堵的时候,发送端由于迟迟没有收到应答方的应答信号,它会认为数据段已经丢失了,然后会重新发送这个数据段,这种情况可能会导致网络恢复正常的时候接收方接收到两个完全相同的数据段,那么岂不是发送重复了,这个问题如何解决呢?其实呢序列号的作用之一就是:如果收到了两个相同的数据段,会自动第二个一样的数据段。

窗口技术
窗口技术就是TCP用来改善流量控制的,以便充分利用带宽。滑动窗口允许发送方在接收到接收方的应答信号之前发送多个数据段。滑动窗口的大小决定了在收到应答方的确认之前,可以一次性发送的最大数据段量。

流量控制
在通信双方进行通信的过程中,滑动窗口的大小是可以随时改变的,以便充分利用带宽。在TCP的每个确认(Ack)中,还会返回一个流量通告,通告中指出了接收方还能再接收多少数据段。如果通告值增大,滑动窗口也会相应的增大,通告值减小,滑动窗口也会减小。比如:在网络拥堵导致数据段丢失时,窗口大小自动减小一半,以保证数据传输正常。

TCP/IP中的Internet层
Internet层提供寻址和路由选择协议,路由器主要工作在该层。Internet层主要运行以下几个协议:

  • 网际协议(IP):对数据包进行无连接的最佳路由选择,它不关心数据包的内容,仅仅是查找一个路径将数据包发送到目的地。
  • 网际控制报文协议(ICMP):提供控制和传递消息的功能。
  • 地址解析协议(ARP):由已知的IP地址确定数据链路层的MAC地址。
  • 反向地址解析协议(RARP):有已知的数据链路层MAC地址确定IP地址。
  • 动态主机配置协议(DHCP):将IP地址和一些TCP/IP配置分配给网络中的计算机的一项服务和协议。

IP头格式:
在这里插入图片描述
下面对它的一些字段进行简单的描述:

  • 版本:表明了一个数据包采用的是Internet网协议的哪个版本。例如对于IPV4来说,这个字段的值为4
  • 标志:指出数据包是否存在
  • 生存期(TTL):报头的存活时间,一旦该值为0,该报就会被丢弃。TTL用于限制一个IP包所经历的站数,正常设置为64,最大设为255,TTL每经过一个路由器减1。通常数据包只会由于网络存在路由闭环而被丢弃。例如:当第一台路由器认为数据到达目的地的路径需要经过第二个路由器,而第二个路由器又认为数据该路径经过第一个路由器,这时数据包就会在他们之间一直来回传送,如果没有TTL的话,这个数据包就会在这两个路由器构成的环路中间永远转下去。
  • 头校验和:报头上的完整性检查。如果目的地计算的校验和与报文中所含的校验和不同,那么这个数据包就会被丢弃。

数据包的分片
数据包是被封装在物理帧中传输的,对于网络硬件来说,它们对一个物理帧可传数据量都规定了一个上限值,这个上限值就是最大传输单元,及数据包的MTU(maxmum transfer unit)。如果数据包的大小比MTU大,那么它是无法传输的,如果又比MTU小太多的话,则会造成带宽的浪费。那么TCP/IP是如何来解决这一问题呢?
1、它会选择接近相连网络的MTU值来初始化数据包的大小。
2、在较小的网络上,可以把大的数据包划分为更小的数据包片(分片)。

数据包分片后的重组
数据包的重组之后是发生在分片到达目标主机之后的,而不是在通过MTU较小的网络之后的路由器上。一旦数据包分片之后,每个数据包片将作为独立的数据包发送,即使在中途遇到了也不会重组,只有到达目标主机之后才会发生重组。如果在传输过程中某个数据包片丢失了,目标主机会将整个数据包丢弃。所以分片增加了数据包丢失的概率,应尽量避免分片。

ICMP报文
ICMP经常被认为是IP层的一个组成部分,它携带与IP数据包中:在这里插入图片描述
ICMP定义了一套差错报文和控制报文,用于主机和路由之间交换不可达目的地址、网络拥塞、重定向到更好的路径、报文生命周期超时等信息。下面介绍一下比较常见的几种ICMP报文。

1、ICMP不可到达
在这里插入图片描述

  • 网络不可到达
    如果路由A没有到达路由B的路由,那么路由A会向客户端返回ICMP消息(网络不可到达)以响应客户端发送给服务器的数据包。

  • 主机不可到达
    如果路由A有到达路由B的路由,那么数据包就可以顺利到达路由B了,但是突然在这个时候服务器Down机了,那么路由B就收不到服务器返回的消息了,此时它会向客户端返回ICMP消息(主机不可到达)。

  • 禁止分割
    在MTU较小的网络上,需要把大数据包分成许多较小的数据包,但是有些数据包的IP头中却设置了拒绝分片位,那么,此时路由器就会向客户端返回ICMP消息(禁止分割)。

  • 协议不可到达
    若数据包成功的到达了服务器,但是服务器上却不运行TCP或者UDP协议(基本上不可能),那么服务器将返回ICMP消息(协议不可到达)。

  • 端口不可到达
    如果数据包成功的到达了服务器,服务器上面也运行TCP、UDP协议,但是服务器上面的相关软件还没有运行,所以就无法处理客户机的连接,此时服务器将会返回ICMP消息(端口不可到达)。

2、ICMP超时
在cmd中使用tracert命令可以让我们看到IP数据包从一台主机传输到 另一台主机上所经过的路由。如下图所示:在这里插入图片描述
这个过程是怎么样的呢?它如何得到路由器的地址并且如何判断是否已经到达目标主机了呢?

  • 首先,使用tracter命令时,发送方故意发送一份TTL为1的数据包,处理这个数据包的路由器将数据包TTL减1,这样数据包的TTL值就为0了,然后丢弃该数据包,路由器向发送方返回ICMP(超时)报文,这样,tracter就得到了第一个路由器的地址。然后用tracter命令发送一份TTL=2的数据包 ,重复以上步骤直到数据包到达目标主机。
  • 当使用tracter命令的时候,它会选择一个几乎不可能的值作为目标UDP的端口号(大于3000),目标主机的任何一个应用程序都不可能使用该端口。当数据包到达目标主机的时候,目标主机将产生一份ICMP(端口不可到达)报文,这样就可以和之前路由器返回的(超时)报文区分了,进而就可以判断数据包是否已经到达目标主机了。

3、 ICMP重定向
重定向报文是一个非常重要的工具。当主机向非本地子网发送数据包的时候,TCP/IP会将数据包转发给它的默认网关(缺省路由器),但如果网络中还存在一个更好的本地路由器时,ICMP重定向功能会通知主机以后将这些数据包发送给那个更好的路由器。在这里插入图片描述
example:(假设此例中路由A是主机的默认网关,但是路由B才是最优选择)
默认情况下,主机会将数据包发送给它的默认网关(即:路由A),但是路由B才是更好的选择。当路由A转发数据包的时候,它发现数据包是从E接口进来的,又从E接口发送出去了,自己在这次发送中并没有什么作用,它就会向主机发送一份ICMP(重定向)报文,通知主机以后将这些数据包发送给路由B,而不要给自己了。

ARP
ARP(Address Resolution Protocol)用来将IP地址映射到MAC地址,以便设备可以在多路访问介质通信。
MAC(Media Access Control,介质访问地址)对于每台计算机来说唯一的。如果一个主机要和另一个主机进行直接通信,必须要直到目标主机的MAC地址。

  • 每台计算机都有一个ARP缓冲,它保存了一定数量的从IP到MAC地址的映射,同时当一个ARP广播到来的时候,虽然这个广播可能与它无关,但它也会把其中的物理地址与IP地址的映射记录下来,这样可以减少ARP报文在局域网中发送的次数。
  • 每一个ARP映射都是有自己的寿命,如果在一段时间内没有使用,这个ARP映射就会从缓冲区删除。这样可以减少缓冲表的长度,加快查询速度。

当主机要确定某个IP地址的MAC地址的时候,它会先检查自己的ARP缓冲区,如果缓冲区内没有目标地址,那么主机会发送一个广播(ARP请求),网段上任何主机都可以收到该广播,但是只有目标主机才会响应这个ARP请求,目标主机在收到这个ARP请求时可以获取到发送方的IP地址和MAC地址,因此它会用一个单播消息来回应请求。
过程如下图所示:
ARP请求:
在这里插入图片描述
ARP回应:
在这里插入图片描述
RARP
主机的IP地址都是保存在硬盘中,Windows启动时会找到它,但是对于那些把文件存放在远程服务器上的工作站来说,它们在启动时是如何获取IP地址呢?这就要提到RARP了。

RARP是ARP的逆过程,如果一个主机不知道自己的IP地址,它会发送一个RARP请求(广播形式),网络中所有的主机都会收到该广播,但是只有被授权的RARP服务器才可以处理这个请求,RARP服务器有一张映射表,可以查到MAC地址与哪个IP地址相对应,然后将IP地址发送给主机。

RARP请求:
在这里插入图片描述
RARP回应:
在这里插入图片描述
如果这个主机收到多个RARP回应,它只会接收第一个回应。

子网规划
数据包在网络上传输时,数据包的目的IP地址是不会变的,路由器的任务就是:根据自己的路由表选择到目标IP地址的最佳路径出口,让数据包发往下一跳。不变的IP地址保证将数据包发送到正确的地址。
目前应用最广泛的IP版本为IPv4,它使用32位的二进制地址,每个地址由4个8位组成,每个8为被转化成十进制,中间用 “.” 分割。它们的转换如下图所示:在这里插入图片描述
网络地址与主机地址
每一台主机都有一个IP地址,要想发送给目标主机数据包,就要知道目标主机的IP地址。IP地址由两部分构成:网络地址与主机地址。我们可以把这两个地址类比为现实生活中的街道和门牌号。如果我们想在现实生活中找到某所房子,我们就需要先找到它所在的街道,然后在该街道中找到它的门牌号。所以在网络中如果要发送给某一主机数据包,首先要找到它的网络地址,然后在该网络地址中找到它的主机地址。这样,就可以将数据包准确的发送给目标主机了。

子网掩码
子网掩码使用来区分网络地址和主机地址的,它其实就是一个过滤过程,将IP地址和子网掩码 按位求与 **”**就可以过滤出IP地址中的网络地址,按位求与就是将IP地址中的每一位和相应的子网掩码进行与运算。与运算的规则如下:

  • 1 & 1 = 1
  • 1 & 0 = 0
  • 0 & 0 = 0

每一类IP地址都有相应的缺省子网掩码,下面的表格列出了A、B、C类地址的子网掩码:

IP子网掩码
A类255.0.0.0
B类255.255.0.0
C类255.255.255.0

下面使用IP地址 172.16.1.1 255.255.255.0 说明一下子网掩码是如何将网络地址过滤出来的:
在这里插入图片描述
最后得到的 172.16.0.0 就是IP地址中的网络地址了。

A类地址
A类地址的子网掩码是:255.0.0.0,它使用IP地址中的第一个8位表示网络,剩余3个8位表示主机地址。由此可以看出A类网络拥有的主机数非常多,所以它是为巨型网络设计的。A类地址的第一个8位的第一个总是被设置为0。下图所示为A类地址:在这里插入图片描述
网络0.0.0.0用于广播地址,网络127.x.x.x用作回路测试,所以它们不分配给任何网络。

B类地址
B类地址的子网掩码是:255.255.0.0,前两个8位表示网络地址,后两个8位表示主机地址。B类地址主要支持大中型网络。下图所示为B类地址:在这里插入图片描述
C类地址
C类地址的子网掩码是:255.255.255.0,前三个8位表示网络地址,最后一个个8位表示主机地址。主要支持小型网络。下图所示为C类地址:在这里插入图片描述
D类地址
D类地址用于IP网络中的组播。他和A、B、C类地址不同。每一个D类地址标示了一个IP地址组,所以它可以同时把一个数据流发送给多个接收端,可以有效节省带宽。下图所示为D类地址:在这里插入图片描述
E类地址
Internet网上没有E类地址可用,它被保留为IETF研究使用。下图所示为E类地址:
在这里插入图片描述
子网规划
随着Internet的迅速发展,当前的IP地址即将耗尽。所以就产生了子网规划,这样可以使得IP地址得到充分的利用,避免了一些IP地址的浪费。那么什么是子网规划呢?子网规划就是将网络进行细分,细分之后得到的新网络就是子网。将这些新产生的子网进行规划,就可以使得IP地址的利用更加高效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楠哥聊AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值