计算机网络体系结构

五层协议体系结构

五次协议的理解


五层协议是综合OSI和 TCP/IP的优点,所形成的,主要是为了方便学习计算机网络的原理。

物理层的理解

发送端的物理层负责接收从数据链路层传下来的数据帧,然后将数据帧的比特流以0和1的电信号在物理媒介上进行传输。
接收端的物理层从物理媒介接收传输的电信号之后,将其解码为比特流,然后上传给数据链路层进行后续处理。例如,网线将数据转换为电信号以在计算机之间进行传输。

而物理层的主要任务就是决定如何在物理媒介(如电缆、光纤)上传输比特流,也就是决定如何将这些比特流转换为电信号或光信号,包括传输介质的选择、电信号的编码和调制方式、物理层会考虑用多大的电压代表“1”或“0”,以及接收方如何识别出发送方所发送的电信号等。

总的来说,物理层的任务就是决定如何在物理媒介上去传输数据。

物理层传输的数据被称作比特流(Bits)。

数据链路层的理解

发送端数据链路层主要负责将网络层交下来的数据报封装成帧,然后传给物理层。
接收端数据链路层在接收物理层传上来的比特流后,根据帧的首部和尾部的标记,识别帧的边界,并将帧从连续的比特流中分离出来。然后上传给网络层,进行后续处理。

封装成帧(framing)就是将数据报的前后分别添加首部和尾部,这样就构成了一个帧。之后接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的边界,并将帧从连续的比特流中分离出来。
在物理媒介传输数据时,它是连续的传递数据,也就是说,接收端收到的数据是连续的比特流,如果没有明确的标记来表示数据的边界,接收端无法直接从收到的连续比特流中识别出数据的开始和结束,从而提取出数据出来,封装成帧的过程就是为了解决这个问题。
因此数据链路层的主要任务,就是决定要传输的数据的基本格式,也就是决定网络层的数据报在传输时需要封装的格式,同时还包括帧同步和错误检测等功能。帧同步指的是在传输过程中确保接收端保持与发送端的同步。错误检测则是通过添加校验位或冗余信息,使接收端能够检测出传输过程中的比特错误,从而提高数据的可靠性。

总的来说,数据链路层决定了要传输的数据的基本格式,也就是封装成帧的方式,并提供帧同步和错误检测等功能,以确保数据在传输时的可靠性和准确性。

在数据链路层传输的数据称作帧。帧的本质也是由比特流组成的。不过与物理层的比特流不同的是,帧的比特流添加了结构、标识和控制信息。而物理层的比特流没有明确的结构和含义。

网络层的理解

发送端的网络层将运输层产生的报文段或用户数据报进行封装,形成数据报。该数据报包括网络层的首部和传输层的数据,然后传递给数据链路层。
接收端的网络层在收到链路层传上来的帧之后,首先会去除数据链路层添加的首部和尾部,提取出原始的数据报。然后,根据数据报中的目的地址进行路由选择和转发.
最终接收端的网络层会将数据报传递给上层的运输层,以便进行进一步的处理。

数据报的首部主要记录了,网络通信相关的控制信息和地址信息。
地址信息包含了源地址和目的地址,用于标识数据报的发送方和接收方。在传输过程中,发送端会将数据报先传送给给附近的路由,路由的网络层在提取出原始的数据报之后,根据数据报里首部记录的源地址和目的地址,选择下一个要传输的路由,在这过程中,数据报会经过多个路由器进行转发,每个路由器根据数据报中的目的地址进行路由选择,最终将数据报传递给目标地址所在的网络。
当数据报到达目标网络后,根据目的地址找到目标主机,网络层将数据报传递给目标主机的网络层进行进一步处理。目标主机的网络层会检查数据报的目的地址,如果与主机的地址匹配,就将数据报传递给上层的运输层,完成数据的传输。
控制信息,例如生存时间(Time to Live,TTL)字段,用于限制数据报在网络中的生存时间,防止数据报在网络中无限循环。还有服务质量(Quality of Service,QoS)字段,用于指定数据报的优先级和传输要求,确保网络能够按照特定的要求处理数据报。
因此网络层的主要任务,首先就是为每个网络设备分配唯一的标识,即IP地址。通过IP地址,源主机可以将数据报发送到目标主机,而目标主机也可以根据IP地址将数据报传递给相应的应用程序或上层协议。另一个主要任务是定义路由的功能,路由根据数据报中的目的地址,选择最佳的路径将数据报转发到下一个路由器或目标主机。路由器根据网络层的路由表和路由算法来进行路由选择

总的来说网络层的功能,就是分配IP地址和定义路由功能,实现了网络设备之间的通信和数据传输。

网络层传送的数据称作数据报。(在 TCP/IP体系中,由于网络层使用IP协议,因此分组也叫做IP数据报,或简称为数据报。)

运输层的理解

发送端在接收应用层传下来的应用层报文之后,运输层会根据传输协议的要求对应用层报文进行封装,添加相应的首部和校验和,然后传输给网络层。
如果使用的是TCP协议,运输层会将应用层报文分割成更小的TCP报文段,并为每个报文段添加TCP首部,包括源端口号和目的端口号等信息。运输层还会计算校验和来确保数据的完整性,并将TCP报文段传递给网络层。
如果使用的是UDP协议,运输层会直接封装应用层报文为UDP报文,其中包含源端口号和目的端口号等信息,然后传递给网络层

接收端的运输层在接收网络层的数据报之后,首先会根据数据报的首部的协议标识字段,来确定使用的是哪个传输层协议,例如TCP或UDP。然后,运输层会根据该协议对数据报进行解封,并根据该传输协议对解封后的数进行进一步的处理,处理后传递给应用层。

如果使用的是TCP协议,运输层会根据TCP首部的信息进行进一步处理,包括对TCP报文段进行排序和重组,确保数据按正确的顺序传递给上层应用程序,同时,运输层还会处理流量控制和拥塞控制等机制,以确保网络的可靠性和高效性。
如果数据报使用UDP协议,运输层会将数据报直接传递给相应的UDP端口,供上层应用程序使用。

TCP协议提供可靠的、面向连接的通信;UDP协议提供无连接的通信,简单地将数据传递给上层应用程序。

注意,运输层本身并不决定数据该用什么协议去传输,而是根据应用层传递给它的信息来确定使用的是哪个传输层协议。

因此运输层的任务,建立端口到端口的通信,然后是实现TCP协议传输数据或者UDP协议传输数据的功能,确保数据的可靠传输(对于TCP)或无连接传输(对于UDP)。

如果是TCP协议,则运输层传输的数据单位是TCP报文段。如果是UDP协议,则运输层传输的协议叫UDP数据报

应用层的理解

发送端的应用层进程会根据应用层协议,将要传输的数据形成对应的应用层报文,并将其传递给运输层。
接收端的应用层的进程在收到运输层传来的数据后,会根据应用层协议去解析和处理接收到的数据。

应用层协议定义了数据的格式、交互方式和语义,发送端的应用层的进程会按照协议规定的方式去将要发送的数据,组织形成规定好的数据格式然后再将数据交给运输层。而接收端的应用层的进程也会根据协议规定的方式解析和处理接收到的数据。
举例来说,HTTP协议规定了Web应用中客户端和服务器之间的通信规则,定义了请求和响应报文的格式、方法、状态码等。SMTP协议定义了电子邮件的传输规则,规定了邮件报文的结构和传输流程。

因此应用层的主要任务,就是制定各种应用层的协议,而应用层的协议是应用进程间通信和交互的规则,包括数据格式、处理方式和交互流程,确保了应用程序之间数据的正确传输与处理。

应用层传输的数据叫应用层数据报。

数据在各层传递的过程



OSI七层协议结构

OSI七层协议的理解


OSI的七层协议体系结构是一个标准,概念清楚,理论也较完整,但它非常复杂,因此实际应用不采用这个结构。

TCP/IP体系结构

TCP/IP体系结构的理解


TCP/IP体系结构,是简化版的OSI七层协议结构,实际的应用就采用这个模型。不过从实质上讲,TCP/IP只有最上面的三层,因为最下面的网络接口层并没有什么具体内容。

网络层

网络层的基础知识

网络层的理解

发送端的网络层将运输层产生的报文段或用户数据报进行封装,形成数据报。该数据报包括网络层的首部和传输层的数据,然后传递给数据链路层。
接收端的网络层在收到链路层传上来的帧之后,首先会去除数据链路层添加的首部和尾部,提取出原始的数据报。然后,根据数据报中的目的地址进行路由选择和转发.
最终接收端的网络层会将数据报传递给上层的运输层,以便进行进一步的处理。

数据报的首部主要记录了,网络通信相关的控制信息和地址信息。
地址信息包含了源地址和目的地址,用于标识数据报的发送方和接收方。在传输过程中,发送端会将数据报先传送给给附近的路由,路由的网络层在提取出原始的数据报之后,根据数据报里首部记录的源地址和目的地址,选择下一个要传输的路由,在这过程中,数据报会经过多个路由器进行转发,每个路由器根据数据报中的目的地址进行路由选择,最终将数据报传递给目标地址所在的网络。
当数据报到达目标网络后,根据目的地址找到目标主机,网络层将数据报传递给目标主机的网络层进行进一步处理。目标主机的网络层会检查数据报的目的地址,如果与主机的地址匹配,就将数据报传递给上层的运输层,完成数据的传输。
控制信息,例如生存时间(Time to Live,TTL)字段,用于限制数据报在网络中的生存时间,防止数据报在网络中无限循环。还有服务质量(Quality of Service,QoS)字段,用于指定数据报的优先级和传输要求,确保网络能够按照特定的要求处理数据报。
因此网络层的主要任务,首先就是为每个网络设备分配唯一的标识,即IP地址。通过IP地址,源主机可以将数据报发送到目标主机,而目标主机也可以根据IP地址将数据报传递给相应的应用程序或上层协议。另一个主要任务是定义路由的功能,路由根据数据报中的目的地址,选择最佳的路径将数据报转发到下一个路由器或目标主机。路由器根据网络层的路由表和路由算法来进行路由选择

总的来说网络层的功能,就是分配IP地址和定义路由功能,实现了网络设备之间的通信和数据传输。

网络层传送的数据称作数据报。(在 TCP/IP体系中,由于网络层使用IP协议,因此分组也叫做IP数据报,或简称为数据报。)

网络层的中间设备

路由器

IP协议

IP协议的概述

IP地址的理解

他是网络层所使用的地址。互联网上的每一台主机(或路由器)的每一个接口都会分配一个IP地址。
IP地址由32位或128位二进制数组成,表示为点分十进制格式(例如:192.168.0.1)
源IP地址和目的IP地址放在IP数据报的首部

物理地址

他是数据链路层和物理层所使用的地址。
物理地址由48位二进制数组成,通常以十六进制表示,格式为6对冒号分隔的十六进制数(例如:00:1A:2B:3C:4D:5E)。

源MAC地址和目的MAC地址都写在帧的首部中。

IP协议的理解

IP协议定义了一种地址格式,即IP地址,每台连接到互联网的设备都有一个唯一的IP地址。
同时IP协议,还定义了网络层的数据的传输方式,即怎么根据对方的IP地址,将数据传输给对方的网络层,以及怎么将接收到的数据传输给运输层。

IP协议的配套协议


地址解析协议ARP(Address Resolution Protocol)
网际控制报文协议ICMP (Internet Control Message Protocol)网际
组管理协议IGMP (Internet Group Management Protocol)
图画出了这三个协议和网际协议IP的关系。在这一层中,ARP画在最下面,因为P经常要使用这个协议。ICMP和 IGMP画在这一层的上部,因为它们要使用IP协议。

IP数据报在传递过程中,IP地址和mac地址的变化

举例传输图

图画的是三个局域网用两个路由器R1和R2互连起来。现在主机H1要和主机H2通信。这两台主机的IP地址分别是IP1,和IP2,而它们的硬件地址分别为HA1和 HA2(HA表示Hardware Address)。通信的路径是:H1→经过R1转发→再经过R2转发→H2。
路由器R1,因同时连接到两个局域网上,因此它有两个硬件地址,即 HA3,和 HA4。同理,路由器R2也有两个硬件地址HA5和 HA6。

传输过程的IP地址和物理地址图

开始在H1到R1间传送时,MAC帧首部中写的是从硬件地址HA1发送到硬件地址HA3,路由器R1,收到此MAC帧后,在数据链路层,要丢弃原来的MAC帧的首部和尾部。.
在转发时,在数据链路层,要重新添加上MAC 帧的首部和尾部。这时首部中的源地址和目的地址分别便成为HA4和 HA5。路由器R2收到此帧后,再次更换 MAC帧的首部和尾部,首部中的源地址和目的地址分别变成为HA6和 HA2。

ARP协议

ARP协议的理解

ARP协议的作用,就是在已知一个机器的IP地址后,找到其对应的MAC地址。
在IP数据报的传输过程中,当需要将数据发送到目标机器时,需要知道目标机器的MAC地址才能正确地进行数据传输。这时IP协议就会使用ARP协议来找到其MAC地址。

如果目标机器在同一个局域网内,ARP协议可以直接通过目标机器的IP地址找到其MAC地址。
如果目标机器不在同一个局域网内,ARP协议就无法直接找到目标机器的MAC地址。在这种情况下,ARP会查找附近的路由器的MAC地址。发送设备会将数据发送到该路由器的MAC地址,然后让路由器根据目标机器的IP地址完成剩下的工作。

ARP协议的实现原理

每一台主机都设有一个 ARP 高速缓存(ARP cache),里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表,这些都是该主机目前知道的一些地址。

当主机A要向本局域网上的某台主机B发送IP数据报时,就先在其 ARP高速缓存中查看有无主机B的P地址。如有,就在ARP 高速缓存中查出其对应的硬件地址,再把这个硬件地址写入 MAC帧,然后通过局域网把该MAC帧发往此硬件地址。

也有可能查不到主机B的IP地址的项目。这可能是主机B才入网,也可能是主机A刚刚加电,其高速缓存还是空的。在这种情况下,主机A就自动运行ARP,然后按以下步骤找出主机B的硬件地址。


1.ARP进程在本局域网上广播发送一个 ARP请求分组,上面是示意图。ARP 请求分组的主要内容是:“我的IP地址是209.0.0.5,硬件地址是00-00-C0-15-AD-18。我想知道P地址为209.0.0.6的主机的硬件地址。”
2.在本局域网上的所有主机上运行的ARP进程都收到此ARP 请求分组。主机B的IP地址与ARP请求分组中要查询的P地址一致,就收下这个ARP请求分组。


3.之后主机B并向主机A发送 ARP响应分组。同时在这个ARP响应分组中写入自己的硬件地址。由于其余的所有主机的IP地址都与ARP请求分组中要查询的IP地址不一致,因此都不理睬这个ARP请求分组。
ARP响应分组的主要内容是:“我的IP地址是209.0.0.6,我的硬件地址是08-00-2B-00-EE-0A。”
请注意:虽然ARP请求分组是广播发送的,但ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。
主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。
当主机A向B发送数据报时,很可能以后不久主机B还要向A发送数据报,因而主机B也可能要向A发送ARP请求分组。为了减少网络上的通信量,主机A在发送其ARP 请求分组时,就把自己的IP地址到硬件地址的映射写入 ARP请求分组。当主机B收到A的ARP请求分组时,就把主机A的这一地址映射写入主机B自己的 ARP高速缓存中。以后主机B向A发送数据报时就很方便了。

使用ARP的四种情况


IP层转发分组的流程


ICMP协议

ICMP协议的理解

ICMP是一种用于在IP网络中进行错误报告和诊断的协议。它允许主机或路由器发送控制消息给其他主机或路由器,以测试网络状况、错误情况或执行特定的网络功能。

举个例子,假设你想测试与某个远程主机的连接是否正常。你可以在命令行中输入ping命令,后跟目标主机的IP地址或域名。操作系统会生成ICMP Echo Request消息,并将其发送到目标主机。如果目标主机正常工作并且连接畅通,它将接收到ICMP Echo Request消息,并回复一个ICMP Echo Reply消息作为响应。你的计算机会计算回复消息的往返时间(RTT)和丢包率等信息,并将结果显示给你。

通过使用ICMP协议进行ping测试,你可以了解到目标主机的可达性和网络延迟情况。

ICMP的应用

一个是ping,一个是Traceroute(路由跟踪)

ping命令的理解

当你使用ping命令测试网络连接时,实际上就是在使用ICMP协议。Ping是一种常用的网络诊断工具,它通过发送ICMP回显请求消息(Echo Request)到目标主机,并等待目标主机发送回相应的回显应答消息(Echo Reply)来测试网络的连通性和延迟。

Traceroute(路由跟踪)的理解

是一种网络诊断工具,用于确定数据包从源主机到目标主机的路径和经过的网络节点。
它通过发送一系列的数据包(通常是使用ICMP协议)并观察返回的数据包的传输时间,来确定数据包经过的路由路径和网络延迟。

IGMP协议

多播通信的理解

多播通信是一种网络通信方式,它允许一个主机将数据同时发送给多个接收者,而不是只发送给一个特定的目标主机。在多播通信中,发送者只需发送一份数据,而网络将负责将数据传输到所有参与的接收者。
在多播通信中,参与通信的主机必须属于同一个多播组。

IGMP协议的理解

IGMP是在多播通信中管理组成员的协议。
IGMP允许主机加入或离开特定的多播组,并通知网络中的路由器。这样,路由器可以根据组成员的信息来有效地转发多播数据包,而不将其发送给不相关的主机。

举例
当一个主机希望接收某个多播组的数据时,它会发送一个IGMP报文给相应的多播组地址,表明它要加入该多播组。路由器在收到这个报文后,就知道该主机对该组播组感兴趣,并将相关信息记录在路由表中,确保将多播数据转发给对应的主机。
当主机不再对某个多播组感兴趣时,它会发送一个IGMP报文离开该多播组,路由器也会相应地更新路由表

IPV4和IPV6

IPV4和IPV6的区别

IPv4和IPv6是IP协议中的两个版本

IPV4的特点
IPv4使用32位地址
IPv4使用点分十进制表示法
,例如 192.168.0.1。

ipv6特点
IPv6使用128位地址
IPv6使用冒号分组表示法
,例如 20 01:0 db8:85a3:00 00:00 00:8 a2e:03 70:73 34。

自动配置:IPv6引入了一种称为“无状态地址自动配置(SLAAC)”的机制,使设备能够根据网络中的路由器广告自动配置自己的IPv6地址。这简化了网络的配置和管理。

安全性:IPv6提供了内置的IPSec支持,提供了对数据的加密和认证,增强了网络层的安全性。

流量优先级:IPv6引入了流量类别和流量流标签,使得网络能够更好地管理流量

总的来说,IPv6相对于IPv4不仅提供了更大的地址空间,还具有更好的扩展性、安全性和功能性。
由于IPv4的广泛部署和现有基础设施的限制,IPv4仍然广泛使用

运输层

UDP协议

UDP协议的概述

UDP协议的理解

UDP(User Datagram Protocol)是一种在运输层提供无连接的传输服务的协议。

UDP协议的特点

1无连接性
UDP是无连接的,即在通信之前不需要进行握手和建立连接的过程。发送端将数据封装成UDP报文后,直接发送给接收端,而不需要在发送端和接收端之间建立持久的连接。这使得UDP具有更低的延迟和开销,适用于实时性要求高、数据量较小的应用场

2不可靠性
UDP不提供数据的可靠传输。一旦UDP报文发送出去,就无法保证其是否能到达接收端,也无法保证接收端按顺序接收到报文。UDP不进行重传、确认和拥塞控制等机制,对传输过程中的错误或丢失不进行纠正。

3尽最大努力交付,
即传输效率高,因为不需要维持复杂的连接状态表(这里面有许多参数),也因此不保证可靠交付

4.没有拥塞控制
很多的实时应用(如IP电话、实时视频会议等)要求源主机以恒发的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太大的时延。UDP正好适合这种要求。

5面向报文
发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。接收方对网络层交上来的UDP用户数据报,在去除首部后就原封不动地交付上层的应用进程。这意味着UDP不会对数据进行分割和重组,保持了数据的边界和完整性,但也不提供数据的可靠性和顺序性。

6UDP支持一对一、一对多、多对一和多对多的交互通信。
一对多指一个UDP发送端可以向多个UDP接收端发送数据。多对一,这意味着多个UDP发送端可以向一个UDP接收端发送数据。接收端可以接收来自多个发送端的数据,并进行相应的处理。

7UDP的首部开销小
UDP首部只有8个字节,比 TCP的20个字节的首部要短。

适合UDP协议的应用场景

实时性要求较高、对可靠性和顺序性要求相对较低的应用场景。它具有低延迟、高效性和简单性的特点,但不提供可靠传输和连接管理的功能。

TCP协议

TCP协议的概述

TCP协议的理解

TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议。

TCP协议的特点

1面向连接
在数据传输之前,发送端和接收端需要先建立一个TCP连接。连接的建立和终止都需要经过握手和挥手的过程。

2.可靠性
TCP提供可靠的数据传输,保证数据的完整性和顺序性。它使用序号和确认号的机制来确保数据的准确传输。接收端会确认收到的数据,并要求发送端重传丢失的数据,以及对乱序的数据进行排序和重组。

3.流量控制
TCP通过流量控制机制,确保发送端不会以过快的速度发送数据导致接收端无法处理。接收端使用滑动窗口来告知发送端可接收的数据量,发送端根据接收端的窗口大小进行发送控制。

4拥塞控制
TCP具有拥塞控制机制,用于防止网络拥塞和保持网络的稳定性。通过监测网络的负载情况和反馈信息,TCP动态调整发送端的发送速率,以避免网络拥塞的发生。

5面向字节流
TCP将应用层传输的数据看作是一个连续的字节流,而不是离散的消息。它会将数据分割成TCP报文段进行传输,并在接收端进行重新组装。

6全双工通信
TCP连接是全双工的,允许发送端和接收端同时发送和接收数据,实现双向通信。

TCP适用场景

它适用于对数据传输的准确性和顺序性要求较高的应用场景,如文件传输、电子邮件、网页浏览等。
但是在一些实时性要求高、数据量小且可靠性要求较低的应用中,UDP协议可能更为适合。

TCP的连接

TCP连接建立过程的说明(TCP三次握手)

TCP连接建立图示

TCP建立连接的过程需要在客户和服务器之间交换三个 TCP 报文段,因此TCP连接建立也称为三次握手。

假定主机A运行的是TCP客户程序,而B运行TCP服务器程序。图中在主机下面的方框分别是TCP进程所处的状态。在本例中,A主动打开连接,而B被动打开连接。

最初两端的TCP进程都处于CLOSED(关闭)状态。

一开始,B的 TCP服务器进程先创建传输控制块 TCB,准备接受客户进程的连接请求。然后服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。如有,即作出响应。

A的TCP客户进程也是首先创建传输控制模块TCB。然后向B发出连接请求报文段,再然后,TCP客户进程进入SYN-SENT(同步已发送)状态。
发出的连接请求报文段,其首部中的同步位SYN= 1,同时选择一个初始序号 seq =x。TCP 规定,SYN报文段(即SYN =1的报文段)不能携带数据,但要消耗掉一个序号。

B收到连接请求报文段后,如同意建立连接,则向A发送确认报文段。然后TCP服务器进程进入SYN-RCVD(同步收到)状态。
在确认报文段中应把SYN位和 ACK位都置1,确认号是ack =x +1,同时也为自己选择一个初始序号seq=y请注意,这个报文段也不能携带数据,但同样要消耗掉一个序号。

A收到B的确认后,还要向B给出确认报文段。然后TCP连接已经建立,A进入 ESTABLISHED(已建立连接)状态。
确认报文段的ACK置1,确认号ack = y + 1,而自己的序号seq=x +1。TCP的标准规定,ACK报文段可以携带数据。但如果不携带数据则不消耗序号,在这种情况下,下一个数据报文段的序号仍是seq= x+1。注意A发送给B的报文段只需要确认B的响应,不需要再请求建立连接,因此SYN标志位应该是0。

当B收到A的确认后,也进入ESTABLISHED状态。

三次握手过程简化说明

1、第一次握手:服务器处于收听状态,客户端给服务器发送一个请求报文,也就是 SYN 报文。之后客户端处于同步已发送状态。

2、第二次握手:服务器收到 SYN 报文之后,同意连接,就向客户端发送确认连接报文段。也就是 SYN+ACK 报文,然后服务器处于同步已接收状态。

3、第三次握手:客户端收到 SYN+ACK 报文之后,会向服务器回应一个确认报文,也就是 ACK 报文。此时客户端就处于已建立连接状态

4、服务器收到 ACK 报文之后,也处于已建立连接,三次握手建立完成。

三次握手的原因

作用是为了确认双方的接收与发送能力是否正常。
第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。
第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。
因此,需要三次握手才能确认双方的接收与发送能力是否正常。

创建传输控制块 TCB的理解

传输控制块TCB (Transmission Control Block)存储了每一个连接中的一些重要信息

确认ACK (ACKnowledgment)的理解

确认ACK是TCP报文段首部的一个字段。
仅当ACK=1时确认号字段才有效。当ACK = 0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。

同步SYN (SYNchronization)的理解

同步SYN是TCP报文段首部的一个字段。
在连接建立时用来同步序号。当SYN = 1而ACK=0时,表明这是一个连接请求报文段。
对方若同意建立连接,则应在响应的报文段中使SYN = 1和 ACK=1。因此,SYN置为1就表示这是一个连接请求或连接接受报文。

序号seq的理解

序号seq 是TCP报文段首部的一个字段
在一个 TCP连接中传送的TCP报文段中(也就是字节流中),TCP报文段中每一个字节都按顺序编号。而序号seq 字段值则指的是本报文段所发的数据的第一个字节的序号。
例如,一报文段的序号字段值是301,而携带的数据共有10字节。这就表明:本报文段的数据的第一个字节的序号是 301,最后一个字节的序号是400。显然,下一个报文段(如果还有的话)的数据序号应当从401开始,即下一个报文阜的序号字段值应为401。这个字段的名称也叫做“报文段序号”。

确认号ack的理解

确认号ack是TCP报文段首部的一个字段。
它是期望收到对方下一个报文段的第一个数据字节的序号。例如,B正确收到了A发送过来的一个报文段,其序号字段值是501,而数据长度是200字节(序号501~700),这表明B正确收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701。

TCP连接的释放

TCP连接的释放的过程说明





TCP连接的释放的过程简化说明

首先双方处于已建立连接状态
第一次挥手:客户端要解除连接,就向服务器发送一个出连接释放报文( FIN 报文),并停止在发送数据,此时客户端处于终止等待1状态。

第二次挥手:服务端收到连接释放报文( FIN 报文)之后,会发送 确认报文(ACK 报文),然后进入关闭等待状态,客户端接收到确认报文后,处于终止等待2状态。此时服务器若发送数据,客户端仍要接收。

第三次挥手:如果服务端也想断开连接了,就给客户端发送连接释放报文( FIN 报文)。此时服务端处于 最后确认状态。

第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,此时客户端处于 TIME_WAIT 状态,也就是时间等待状态。确保服务端收到自己的 ACK 报文之后才会进入关闭状态。

服务端收到 ACK 报文之后,就处于关闭连接了,处于 关闭状态。

TIME_WAIT这个状态的理解

为什么客户端发送 ACK 之后不直接关闭,而是要等一阵子才关闭。这其中的原因就是,要确保服务器是否已经收到了我们的 ACK 报文,如果没有收到的话,服务器会重新发 FIN 报文给客户端,客户端再次收到 FIN 报文之后,就知道之前的 ACK 报文丢失了,然后再次发送 ACK 报文

应用层

域名系统DNS

域名系统的理解

用户与互联网上某台主机通信时,必须要知道对方的IP地址。然而用户很难记住二进制主机地址。应用层为了便于用户记忆连接在互联网上的主机不仅有IP地址,而且还有便于用户记忆的主机名字。
域名系统DNS能够把互联网上的主机名字转换为IP地址。

HTTP协议

超文本文档的理解

我们平时在浏览器中浏览的网页通常就是超文本文档。
这些超文本文档由HTML语言编写,他们由浏览器解析和渲染,呈现给用户。
超文本文档中的内容可以包括文字、图像、链接、表格、音频、视频等多种元素。

万维网的理解

万维网(World Wide Web),简称WWW,它由许多互相链接的超文本文档组成。
用户通过浏览器软件可以浏览和访问这些超文本文档,通过点击文档中的链接,可以跳转到其他文档或资源,从而实现了文档之间的关联和交互。

HTTP协议的理解

HTTP协议定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。
请注意,HTTP 不仅传送完成超文本跳转所必需的信息,而且也传送任何可从互联网上得到的信息,如文本、超文本、声音和图像等。

万维网工作流程

每个万维网网点都有一个服务器进程,它不断地监听TCP的端口80,以便发现是否有浏览器向它发出连接建立请求。
一旦监听到连接建立请求并建立了TCP连接之后,浏览器就向万维网服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应。最后,TCP 连接就被释放了。
注意在这过程中,在浏览器和服务器之间的请求和响应的交互,必须按照超本传送协议HTTP。

用户浏览页面的方法

一种方法是在浏览器的地址窗口中键入所要找的页面的URL。
另一种方法是在某一个页面中用鼠标点击一个可选部分,这时浏览器会自动在互联网上找到所要链接的页面。

HTTP协议的特点

HTTP使用了TCP协议
保证了数据的可靠传输。

HTTP协议是无状态的
意味着每个HTTP请求都是独立的,服务器不会保留客户端的任何状态信息。当客户端发送请求时,服务器只会根据请求中的信息进行处理,并返回响应给客户端。服务器并不知道曾经是否访问过的这个客户。

浏览器请求一个万维网文档所需时间

需要用到2个RTT时间,一个 RTT用于连接 TCP连接,另一个RTT用于请求和接收万维网文档。
用户在点击鼠标链接某个万维网文档时,HTTP协议首先要和服务器建立TCP连接。这需要使用三报文握手。当建立TCP连接的三报文握手的前两部分完成后(即经了一个 RTT 时间后),万维网客户就把 HTTP请求报文,作为建立TCP连接的三报文握手中的第三个报文的数据,发送给万维网服务器。服务器收到HTTP请求报文后,就把所请求的文档作为响应报文返回给客户。

HTTP1.0的优缺点

HTTP1.0的主要缺点,就是每请求一个文档就要有两倍RTT的开销。
其次HTTP1.0是非持续连接,每次HTTP请求都需要建立一个新的TCP连接,请求完成后立即关闭连接,会使万维网服务器的负担很重。

如果某个页面有很多链接对象,用户点击一个链接,就需要建立TCP连接,请求一个文档就需要花费2RTT的开销。

HTTP1.1的优缺点

优点:HTTP1.1为了解决了http1.0的问题,他使用了持续连接。
持久连接允许在单个TCP连接上发送多个HTTP请求和响应,可以减少建立和关闭TCP连接的开销。

缺点: HTTP1.1用单个TCP连接解决多个HTTP请求,但是当其中一个请求出现延迟或阻塞时,会阻塞后续请求的处理。

这意味着在同一连接上可以发送多个HTTP请求,并且服务器可以在接收到请求后立即发送响应,而无需重新建立连接。
通过使用持久连接,可以减少建立和关闭TCP连接的开销,并减少网络延迟

HTTP2.0的优缺点

优点:HTTP2.0为了解决HTTP1.1的问题,他在采用了多路复用,即在单个TCP连接上同时进行多个请求和响应来实现多路复用。
这消除了HTTP/1.1中存在的队头阻塞问题,提高了请求的并发性和响应速度。
能做到这一点的前提就是,http2.0采用了二进制分帧,即会将所有要传输的信息分割为更小的消息和帧,在进行发送。
HTTP/2使用了HPACK算法对请求和响应的头部进行压缩,减少了传输的数据量。

而这个负责拆分、组装请求和二进制帧的一层就叫做二进制分帧层.

二进制分帧的作用

这种做法的好处是,他在传输一个大的数据块时,可能需要很长时间,较小的帧可以更快地发送和接收,减少了传输延迟。较小的帧可以更快地发送和接收,减少了传输延迟

二进制分帧可以做到多路复用的原因

举例,服务器收到了A请求和B请求。
在HTTP/1.1中,服务器需要先处理完A请求才能回应B请求。
在HTTP/2.0中,服务器可以将A请求和B请求分成多个帧,并交替发送,这样可以提高并发性和响应速度。

HTTPS协议

TLS协议

他是运输层安全协议,主要使用密码学技术来加密通信内容,是一种加密协议。
举例
当使用TCP作为传输协议时,TLS通常以加密的方式运行在TCP之上。TLS在TCP连接建立后启动,它使用握手协议来协商密钥、验证身份和进行加密。一旦TLS握手成功,TCP传输的数据将通过TLS进行加密和解密,从而保证数据的安全性。

HTTPS的理解

是HTTP的安全版本。它在应用层HTTP的基础上,使用了传输层安全协议TLS,对通信进行加密,并且还使用身份验证机制。提供了更安全的数据传输。

客户端通过HTTPS与服务器建立连接时,首先会进行TLS握手过程,包括协商加密算法、验证服务器身份和生成加密密钥等步骤。一旦握手成功,通信双方之间的数据将通过TLS协议进行加密,保护数据的机密性和完整性

HTTPS的过程

 1.客户端发送自己支持的加密规则给服务器,代表告诉服务器要进行连接了;

2.服务器从中选出一套加密算法和 hash 算法以证书的形式发送给浏览器,其中证书中还包含服务器信息,加密公钥,证书的办法机构;

3.客户端收到网站的证书,先验证证书的合法性;
如果验证通过证书,客户端生成一串随机数,并使用证书中的公钥对该随机数进行加密。
客户端使用约定好的哈希算法计算握手消息的哈希值,并且用公钥将其加密。最终将加密的握手消息、加密的随机数和计算的哈希值一起发送给服务器。

4.服务器接收到客户端传送来的信息 ,使用自己的私钥解密加密的随机数、握手消息。得到原始的随机数和原始的握手消息。
服务器使用约定好的哈希算法,对原始的握手消息进行计算哈希值,验证 hash 值是否和客户端发来的一致;

5.如果计算法 hash 值一致,握手成功。

公钥和私钥的理解

公钥加密算法可以使用公钥算法对数据进加密。
只有拥有相应私钥的实体(在这里是服务器),才能使用私钥解密算法,解密由公钥加密的数据。

哈希算法的理解

相同的输入,同一个哈希算法,产生相同的输出,也就是哈希值。

随机数的作用

这个随机数在握手过程中是用于密钥协商的,并不直接参与哈希算法的计算。