秋招复习计划-计算机网络知识点1

  |  

前言

TCP/IP协议分层管理,TCP三次握手四次挥手机制及原因


47



TCP/IP协议簇分层管理

首先我们需要知道TCP/IP分为四层:应用层、传输层、网络层和网络接口层(网络接口层又可以分为数据链路层和物理层)。

接下来我们要了解一下协议的概念。

协议:计算机网络中的数据交换必须遵守事先约定好的规则。 这些规则明确规定了所交换的数据的格式以及有关的同步问题(同步含有时序的意思)。为进行网络中的数据交换而建立的规则、标准或约定即网络协议(network protocol),简称为协议

而TCP/IP协议簇并不是只指TCP、IP这两个协议,而是涵盖了这四层的所有协议。不同层有不同层自己的协议,它控制对等层之间的通行规则,并向上层提供服务。

接下来我们由下往上讲解TCP/IP协议簇分层体系中各层的功能及其包含的协议。

总体介绍

计算机网络1

TCP/IP协议簇的体系结构总体就是这样的。

当一个主机的应用产生一个信息并需要发送给另一个主机时,需要经过TCP/IP协议簇的层层封装

计算机网络2

同样的,当另一个主机接收到数据时,也需要层层解封。

接下来我们就从下网上介绍各层的作用和相应的协议

物理层

物理层负责一跳(节点)到一跳(节点)的位传输。简单的来说物理层的主要作用,就是将上层传输给他的数据,转换为电信号等,然后在实际线路中传输。物理层并不是我们需要考虑的重点

数据链路层

数据链路:链路是一个节点到另一个节点之间的物理线路,且中间没有其它交换节点。当数据在链路上传输时,就需要一些通信协议来控制数据传输。

数据链路层又可以分为两个子层:逻辑链路控制层和媒体访问控制层。具体这两层怎么划分又干什么,我们不需要了解。

我们需要了解的就是数据链路层的主要功能。

数据链路层的主要功能就是成帧和差错控制。

首先,什么是帧?

帧是数据链路上传递的协议数据单元。数据链路层将上层发送给他的数据加上帧首部和帧尾部,形成一个数据帧,然后交给物理层一位一位的发送。

计算机网络3

由于物理层在传输的过程中,可能会出现一些数据位的丢失、错误等问题。所以数据链路层还有一个功能就是差错控制。数据链里层使用CRC编码来进行差错控制。具体怎么控制的我们也不需要了解。只要知道它有这么个功能就行了。

那么链路层到底控制什么呢。链路层控制的是帧从一个节点到另一个节点的传输。假设主机A需要往主机B发送一跳消息。那么消息就需要从它的电脑发送到路由器,路由器可能需要发送到下一个路由器,如此传递,直到主机B。数据链路层就是控制从路由器到路由器之间的传递,也就是我们俗称的一跳(节点)到另一个跳(节点)。

网络层

网络层是我们的重点,因为它涉及到了一个重要的协议-IP协议。

众所周知,每台主机在网路中都有一个标识它的重要属性,IP地址。

那么一台主机上的数据,又是怎么找到另一个主机的。这就需要IP协议。

而IP层的数据,我们成为报文。IP层就是在上层数据上加上报文头。

目前广泛使用的IP协议有两个版本IPv4和另一个并用来提议代替IPv4的IPv6。不同版本的IP协议,它们有着不同的数据报格式。

计算机网络4

IPv4的报文头中,我们只需要关注三个内容。源IP地址、目的IP地址和生存时间。

前两个很好理解,生存时间是什么呢。生存时间就是这个数据报能在网络中转发多少跳。比如说主机到路由器是一跳,路由器到下一个路由器又是一跳。这个生存时间就是这个数据报能在网络中转发多少跳。如果跳数用完了,数据报还没到达目的IP的主机,那么这个报文就会被丢弃。

计算机网络5

这个是IPv6的数据报结构,从这个结构中我们就能知道为什么IPv6能用来替代IPv4,因为他的地址从32位扩大到了128位,从而解决了IPv4地址不够用的问题。

IP协议还有一个重要的内容叫做子网划分。

子网:互联某些主机与一个路由器接口的网络形成一个子网。

简单的来说,就是好几台主机的数据内容都是从一个路由器发出的,而子网外的主机想要发数据给子网内的主机,都要先把数据发给那个路由器。

那么子网如何划分呢,这就要涉及到IP地址的构成方式和子网掩码了。

首先IP地址由32位组成,分成四个部分,每个部分8位,表现形式为点分十进制。例如

192.168.1.1。同时我们把IP地址分为5类。其中网路号指的就是子网号,主机号就是指这个主机在子网中的号。

计算机网络6

  • A类:(1.0.0.0-126.0.0.0)(默认子网掩码:255.0.0.0或 0xFF000000)
  • B类:(128.0.0.0-191.255.0.0)(默认子网掩码:255.255.0.0或0xFFFF0000)
  • C类:(192.0.0.0-223.255.255.0)(子网掩码:255.255.255.0或 0xFFFFFF00)

拿要给A类地址举例,1.0.0.1,1是他的网络号,0.0.1是这个主机在网络1中的第一个主机。

那么什么又是子网掩码呢。子网掩码其实就是用来标识子网中的主机的。子网掩码也是由32位组成,表现形式也是点分十进制。

那么说了这么多,子网到底怎么划分呢。让我们来看一道我的期末复习题

计算机网络7

让我们来分析这道题,首先它给了一个IP地址192.168.5.0然后,后面写了个/24,/24表示,24位以前的是网络号,24位以后的都是主机号,那么这个IP网络中能有几个主机能,那就是2^(32-24),也就是2^8个主机。那么子网掩码又是255.255.255.248,这是什么意思呢,我们把255.255.255.248转换为二进制,就是11111111.11111111.11111111.11111000,1的位数表示这个子网的网络位占几位。这里1有29位,说明一个子网的IP地址网络号占29位,主机号占3位,那么一个子网能有几个主机呢。有2^3次方个主机。那么这个192.168.5.0/24的IP网络能划分几个子网呢。那就是2^8 / 2^3 = 2^5 ,32个子网。那么每个子网有几个可分配的地址呢。有6个,之所以不是前面的8个,是因为子网中000和111是不能分配的,这又是什么意思呢。我们先划分一个子网出来,192.168.5.0/29 ~ 192.168.5.7/29是第一个子网,我们再划分一个192.168.5.8/29~192.168.5.15/29是第二个子网的范围。那么在第一个子网中,我们能分配的地址只有192.168.5.1~192.168.5.6。子网掩码0代表的位数,这里就是最后3位,有两个值是保留的,就是全0和全1。

现在我们知道了子网是怎么划分的,所以一个正确的IP地址应该由是加上子网掩码的,就像

192.168.5.1/29一样,29就是简写的子网掩码,它表示的是前29位为网络号,后3位是主机号,就是主机在这个子网中是第几个主机。注意全0和全1的保留。

传输层

传输层是整个网络体系结构中最重要的一层,主要负责两个主机中进程间的通信。之前的网络层负责从一个主机到另一个主机,问题是一个主机上可能运行着很多程序,也就是进程。那么传输层就是负责主机间到底是哪两个进程在通信。

传输层中最为常见的两个协议分别是传输控制协议TCP和用户数据报协议UDP。

这里主要讲一下TCP和UDP的区别。后面会着重讲一下TCP。

TCP是面向连接的传输协议,数据传输之前必须建立连接,数据传输完成后必须释放连接。每条链接只能由两个端点,只能进行点对点的连接。

UDP是面向无连接的传输协议,UDP协议只会在上层数据上加上UDP报文头,然后就直接给目标发送,至于目标是否能收到,这就与UDP协议无关了。所以相比于TCP,UDP的传输效率更高,开销更小,但是无法保证数据传输的可靠性。

应用层

应用层指的就是各主机端口上运行的进程。众所周知,Web服务器运行在80端口。Web服务器就是应用层的一个应用,它们发送原始的数据并接受数据,处理之后提供相应的服务。

总结

说了这么多,我们最后来讲一个例子,来说明TCP/IP四层在一次网络传输中到底怎么运行。

例如,我们主机A的浏览器访问了主机B上的一个网页。

那么浏览器就会以一个随机端口(1024~65535)向目标服务器的WEB应用程序,及80端口发送TCP请求,请求建立TCP连接。那么在连接建立后,浏览器就会向服务器发送HTTP请求。

这个请求就是应用层中的浏览器生成的原始数据,然后应用层将这个数据交给传输层。传输层的TCP协议,在原始数据上加上TCP报文头,进行封装,用来增加一些信息,比如说源端口和目的端口(80)。然后传输层把封装好的信息交给网络层。网络层再在传输层报文上增加自己的信息,例如源IP地址和目的IP地址,进行封装。封装好后交给数据链路层。数据链路层同样会给数据上加上自己的信息,例如下一跳地址,差错控制信息等。然后数据链路层把最后封装好的信息交个物理层。物理层将信息一位一位的转换成可传输信号后在实际链路(网线啊啥的)中传输。当这个信息传递给下一个路由器的时候,路由器对数据中的一些信息做出修改,比如说链路层中的下一跳地址,网络层IP头中的存活时间等。然后发送给下一个路由器。经过一跳一跳的中转最后发送到目标主机的80端口。目标主机按层拆封数据,最后获得原始的HTTP请求,然后处理,然后返回HTTP响应报文。这个报文也需要经过四层封装,最后返回给请求主机。

TCP三次握手四次挥手机制

在拿到域名对应的IP地址之后,浏览器或以一个随机端口(1024<port<65535)向服务器的WEB应用程序80端口发起TCP请求。

TCP报文结构

TCP报文中文版

TCP报文英文版

报文结构:

源端口和目的端口:各占两个字节,分别写入源端口号和目的端口号

序号:占4个字节,序号使用mode运算。TCP是面向字节流的,在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。

确认序号:占4个字节,是期望收到对方下一个报文段的第一个数据字节的序号。若确认序号=N,则表明到序号N-1为止的所有数据都已正确收到

数据偏移:占4位,表示TCP报文字段的首部长度。以4字节为一个单位,4位最多能表示到15,那么TCP首部的最大长度为60字节(4*15字节)

6个保留标志位:占6位,默认全置0

  • 紧急URG:当它为1时,表明紧急指针字段有效。这是发送发TCP就把紧急数据插入到本报文段数据的最前面,后面仍为普通数据
  • 确认ACK:当它为1时,确认序号才有效。当ACK为0时,确认号无效。TCP规定,在建立连接后所有传输的报文段都必须把ACK置1
  • 推送PSH:当它为1时,及受访TCP收到后就需要尽快地交付给接收应用进程,而不再等到整个缓存都填满后再向上交付
  • 复位RST:当它为1时,表明TCP连接中出现了严重差错,必须释放连接,重新建立
  • 同步SYN:在连接建立时用来同步序号。但它为1时,表明这是一个连接请求和连接接收报文
  • 终止FIN:用来释放连接,当它为1时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接

校验和:占2字节。检验和字段检验的范围包括首部和数据这两部分。和UDP数据报一样,在计算检验和时,也要在TCP报文段的前面加上12字节的伪首部。伪首部的格式与UDP用户数据报的伪首部一样,但要将伪首部第四个字段中的17 改为6(协议号),把第5字段中的UDP长度改为TCP长度。

紧急指针:占2字节。紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数。

TCP三次握手

讲完了TCP报文头的结构,下面讲讲TCP连接的建立和断开。TCP连接的建立需要通过客户端与服务端的三次握手

  • 第一次握手:客户端主动打开,发送连接请求报文段,将SYN标识为置为1,Sequence Number置为x(TCP规定SYN为1时,不能携带数据,x为随机产生的一个值),然后客户端进入SYN_SEND状态
  • 第二次握手:服务器收到SYN报文段进行确认,将SYN设置为1,ACK置为1,SequenceNumber置为y, Acknowledgment Number置为x+1,然后进入SYN_RECV状态,这个状态被称为半连接状态
  • 第三次握手:客户端再进行一次确认,将ACK置为1(SYN不再使用,为0),Sequence Number置为x+1,Acknowledgment Number置为y+1发向服务器,最后客户端与服务器进入连接状态

三次握手

为什么客户端需要第三次握手来再次确认

是为了防止资源浪费。假设只需要两次握手,如果客户端向服务器发送第一次连接请求在网络节点上滞留了,没有收到服务器的确认,于是又重新发送了一次连接请求,服务器收到客户端的第二次请求发送确认,则连接建立完成。服务器客户端进行数据传输,传输完成断开连接。此时,在网络上滞留的客户端第一次连接请求到达服务器,服务器发送确认连接但是客户端实际上并没有发送请求,因此不会理睬服务器发送的请求。但是服务器认为连接已完成,并等待客户端进行数据传输。这样会造成资源的浪费

TCP四次挥手

TCP四次挥手是TCP连接释放的过程:

  • 客户端发送一个报文给服务端(没有数据),其中FIN设置为1,Sequence Number置为u,客户端进入FIN_WAIT_1状态
  • 服务端收到客户端请求,发送一个ACK给客户端,Acknowledge置为u+1,同时发送Sequence Number为v,服务端进入CLOSE_WAIT状态
  • 服务端发送一个FIN给客户端,ACK置为1,Sequence Number置为w,Acknowledge置为u+1,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态
  • 客户端收到FIN后,进入TIME_WAIT状态,接着发送一个ACK给服务端,Acknowledge置为w+1,Sequence Number置为u+1,最后客户端和服务端都进入关闭状态

四次挥手

为什么握手是三次而挥手需要四次

因为服务器在第二次握手的时候收到建立连接请求的SYN报文后,将ACK和SYN放在一个报文里发送给客户端。而在关闭连接的时候,由于TCP是全双工的,所以发送发和接收方都需要FIN和ACK。而关闭连接是,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方表示同意现在关闭连接,因此,己方ACK和FIN一般分开发送。

文章目录
  1. 1. TCP/IP协议簇分层管理
    1. 1.1. 总体介绍
    2. 1.2. 物理层
    3. 1.3. 数据链路层
    4. 1.4. 网络层
    5. 1.5. 传输层
    6. 1.6. 应用层
    7. 1.7. 总结
  2. 2. TCP三次握手四次挥手机制
    1. 2.1. TCP报文结构
    2. 2.2. TCP三次握手
    3. 2.3. TCP四次挥手