Netty学习二:计算机网络基础

2 Netty学习二:计算机网络基础
前言
本系列是我的个人 Netty 学习笔记,基于 Netty 4.1 版本。由于个人理解的局限性,文中难免会出现错误,欢迎批评指正。

Netty是一个基于Java的网络编程框架,它构建在TCP/IP通信协议之上。了解计算机网络通信基础知识对于深入理解Netty的应用程序开发是至关重要的,这包括TCP连接的建立和断开过程以及报文在TCP/IP协议中的传输过程。
2.1 计算机网络概述
计算机网络是指将多台计算机通过通信链路连接起来,使它们能够以一定的规则和协议进行信息交换和资源共享的系统。它实现了计算机之间的数据传输、通信和协作。计算机网络的发展是为了让用户能够共享数据和资源、实现远程通信、提高工作效率等。

计算机网络有许多不同的形式和规模,包括局域网(Local Area Network, LAN)、广域网(Wide Area Network, WAN)、城域网(Metropolitan Area Network, MAN)和互联网(Internet)等。这些网络可以基于有线或无线的传输介质,如以太网、光纤、无线局域网等。

计算机网络的核心概念是网络协议,它定义了数据的传输方式、处理错误、网络安全等方面的规范。常用的网络协议包括TCP/IP(Transmission Control Protocol/Internet Protocol)协议族,包括各种应用层协议如HTTP、FTP、SMTP等。

计算机网络提供了许多基础设施和服务,如网页浏览、电子邮件、文件传输、远程登录、实时通信等。它也是云计算、物联网和大数据等现代信息技术的基础。

2.2 计算机网络发展简史
计算机网络的发展经历了几个重要阶段,以下是计算机网络发展的简史:

  1. 早期网络(1960s-1970s):计算机网络的起源可以追溯到20世纪60年代末至70年代初的早期阶段。这个阶段标志着ARPANET的建立,ARPANET是美国国防部高级研究计划局(ARPA,现改名为DARPA)于1969年启动的研究项目,是第一个采用分组交换技术的包交换网络,被视为互联网的前身。

  2. TCP/IP的诞生(1970s-1980s):在20世纪70年代末至80年代初,TCP/IP协议被开发出来,并成为互联网的基础协议。TCP/IP协议提供了可靠的数据传输和网络连接的能力,成为互联网的核心协议。

  3. 商用互联网(1980s-1990s):在20世纪80年代和90年代初,互联网逐渐从一个主要由学术和政府机构使用的网络转变为商业化的网络。互联网服务提供商(ISP)兴起,使个人和企业能够接入互联网进行通信和共享资源。

  4. 浏览器的问世(1990s):在20世纪90年代,万维网(World Wide Web)的诞生和Web浏览器的广泛使用使互联网变得更加易用和普及。人们可以通过浏览器访问网页、发送电子邮件和参与在线交流。

  5. 移动互联网和社交网络(2000s-2010s):随着移动设备(如智能手机、平板电脑)的普及和发展,移动互联网成为互联网发展的重要方向。同时,社交网络(如Facebook、Twitter)的兴起改变了人们的社交方式和信息传播模式。

  6. 5G和物联网时代(2020s及以后):5G技术的普及和物联网的发展将进一步推动计算机网络的发展,实现更高速度、更低延迟的通信,促进智能设备之间的互联互通。

总之,计算机网络在不断发展进步,从最初的ARPANET到今天的互联网,经历了多个阶段的演变,改变了人们的生活方式、工作方式和信息传播方式,成为现代社会不可或缺的基础设施。
2.3 计算机网络体系结构
计算机网络体系结构指的是计算机网络中的各个层次或组件以及它们之间的相互关系和通信方式。常见的计算机网络体系结构包括 OSI(开放式系统互联)参考模型和 TCP/IP体系结构。

  1. OSI参考模型(OSI Reference Model):
    OSI参考模型是国际标准化组织(ISO)制定的一个概念性框架,将计算机网络通信分为七个层次,每个层次负责特定的功能,层与层之间通过定义明确的接口交互。这七个层次分别是:
  • 应用层(Application Layer)
  • 表示层(Presentation Layer)
  • 会话层(Session Layer)
  • 传输层(Transport Layer)
  • 网络层(Network Layer)
  • 数据链路层(Data Link Layer)
  • 物理层(Physical Layer)

每个层次都有特定的功能和责任,层与层之间通过协议进行通信和数据交换,实现端到端的通信。OSI模型提供了一个标准框架,方便不同厂商的设备可以互相通信, 尽管OSI体系结构概念清楚且理论完整,但其复杂性和实用性不高是被广泛承认的特点,实际网络设计和部署中,更多地使用简化模型和协议,如TCP/IP体系结构。

  1. TCP/IP体系结构:
    TCP/IP体系结构是实际上应用最广泛的计算机网络体系结构,它不同于OSI模型的七层结构,而是将网络通信分为四个层次:
  • 应用层(Application Layer)
  • 传输层(Transport Layer)
  • 网际层(Internet Layer)
  • 网络接口层(Network Interface Layer)

TCP/IP体系结构是互联网的基础,包括了网络通信所需的各种协议,如TCP、IP、HTTP、DNS等。它简化了网络通信的设计与实现,被广泛应用于各种网络环境中。

除了OSI参考模型和TCP/IP体系结构,还有其他一些网络体系结构模型,每种模型都有其特定的优点和适用场景。总之,网络体系结构模型为设计、部署和管理计算机网络提供了指导和框架,有助于确保网络的稳定性和性能。
2.4 TCP/IP体系结构
OSI模型是一个较为复杂和学术化的网络通信参考模型,它将网络通信分为七个不同的层级。而在实际应用中,我们使用的是TCP/IP模型,它是实际互联网通信所采用的基本架构。

TCP/IP体系结构由四个层次组成,每个层次负责特定的功能。以下是TCP/IP体系结构的四个层次:

  1. 网络接口层(Network Interface Layer):
    网络接口层负责处理数据在物理媒介(如以太网、Wi-Fi等)上的传输。它定义了网络硬件和驱动程序的规范,包括如何将数据帧从一个节点传输到另一个节点。

  2. 网际层(Internet Layer):
    网际层主要负责实现数据在不同网络之间的路由和转发。它使用IP协议来给每个数据包分配唯一的地址,使其能够在广域网或互联网上进行传输。此层还负责定义和管理路由表,以确定最佳的数据传输路径。

  3. 传输层(Transport Layer):
    传输层提供了端到端的数据传输服务。它使用TCP协议和UDP协议来实现可靠的、无连接的或面向连接的数据传输。TCP协议提供可靠性和顺序性的数据传输,而UDP协议则提供了无连接的传输,适用于实时应用或简单的数据交换。

  4. 应用层(Application Layer):
    应用层是最高层,它包含了各种应用程序和协议,如HTTP、FTP、SMTP等。应用层协议定义了不同应用程序之间的数据格式和通信规则,使得应用程序能够通过网络进行数据交换。

TCP/IP体系结构是互联网上广泛应用的一种网络协议体系结构,它提供了基本的网络通信服务和功能。通过将数据通信分解为不同的层次并提供特定的协议,TCP/IP体系结构实现了灵活性、可互操作性和可靠性,对于互联网的发展和运行起到了至关重要的作用。
2.5 TCP/IP协议
TCP/IP 协议是一个基于互联网TCP/IP体系结构的通信协议套件,由 TCP(Transmission Control Protocol,传输控制协议)和 IP(Internet Protocol,网际协议)两个核心协议组成,它定义了互联网上数据的传输和通信规则,在实际应用中,TCP/IP协议族实际上是指代包括多个协议在不同层级上共同组成的一个协议家族。这些协议相互配合,构成了互联网的基础通信架构,支持数据的传输、路由、应用服务等功能。以下是对 TCP/IP 协议的详细解释:
在这里插入图片描述

  1. IP 协议(Internet Protocol):

    • IP 协议是 TCP/IP 协议套件的网络层协议,负责在网络中传输数据包。
    • IP 协议用来定位并传送数据包到目标地址,实现了数据的路由和转发功能。
    • IP 地址是用来标识网络上设备的唯一地址,数据包根据目标 IP 地址进行传送。
  2. TCP 协议(Transmission Control Protocol):

    • TCP 协议是 TCP/IP 协议套件的传输层协议,提供可靠的、面向连接的数据传输服务。
    • TCP 协议通过数据确认、重传机制和拥塞控制等技术确保数据传输的可靠性。
    • TCP 还实现了流量控制和连接管理功能,保证数据的有序传输和可靠交付。
  3. UDP 协议(User Datagram Protocol):

    • UDP 协议同样是传输层协议,但是是面向无连接的协议。
    • UDP 提供了更加简单的数据传输服务,不保证数据的可靠性和有序性,适用于实时性要求较高的应用场景。
  4. 应用层协议:

    • TCP/IP 协议套件还包括许多应用层协议,如 HTTP、FTP、SMTP 等,用于不同的网络应用通信需求。
    • 这些应用层协议建立在 TCP 或 UDP 之上,提供各种功能,如网页浏览、文件传输、电子邮件等,但在某些情况下,应用可以绕过传输层的TCP和UDP,直接在网络层或链路层上实现特定功能。比如,一些负载均衡调度技术(比如Linux内核中的LVS)可以直接基于IP层进行负载平衡,而不需要使用传输层协议。这种方式可以更加灵活地控制数据流量的分发和管理。另外,一些网络工具或程序,如tcpdump,也可以直接访问链路层,与链路层进行通信,以便进行数据包的捕获和分析。通过直接与链路层通信,这些工具能够提供更深层次的网络信息和分析,有助于排查网络问题或进行网络监控。
  5. 其他常用协议:
    除了TCP、UDP和IP协议外,网络通信还涉及到其他重要的协议,其中包括 ICMP(Internet Control Message Protocol)和 ARP(Address Resolution Protocol)等。

  • ICMP(Internet Control Message Protocol):ICMP是一种用于在IP网络上发送错误消息和诊断信息的协议。它常用于在网络设备之间传递诸如网络不可达、主机不可达、超时等错误信息,以及进行网络诊断、探测等功能。例如,Ping命令就是利用ICMP协议来测试主机之间的连通性。

  • ARP(Address Resolution Protocol):ARP是一种用于解析网络层地址(如IP地址)与链路层地址(如MAC地址)之间映射关系的协议。在局域网中,当一个主机需要发送数据给另一个主机时,会首先通过ARP协议查询目标主机的MAC地址,以便直接将数据包发送到目标主机。

通过 TCP/IP 协议套件,计算机可以在互联网上进行可靠的数据传输和通信。它提供了一套通用的规范和标准,使得不同厂商、不同操作系统的计算机可以互相通信。TCP/IP 协议被广泛应用于互联网、局域网和各种网络环境中,是实现现代网络通信的基础。
2.6 TCP/IP网络传输流程
网路传输报文术语:

  1. 包:它是一个通用术语,用来表示在计算机网络中传输的数据单位。它可以用来表示在不同层次和协议中传递的数据,如数据链路层中的帧、网络层中的数据包、传输层中的段等。

  2. 帧:帧是数据链路层中的单位,用于在物理网络中传输数据。它是由链路层首部和数据组成的一段信息。帧的传输是通过物理介质(如以太网)进行的,它包含了控制信息和错误检测机制,用于保证数据在物理网络中的可靠传输。

  3. 数据包:数据包通常指的是网络层(如IP层)以上的分层中的数据单位。它是由网络层首部和上层协议的数据组成的,用于在网络中进行传输。数据包在网络中根据目标地址进行路由,并被不同的网络设备(如路由器)处理和转发。

  4. 段:段是在传输层中使用的单位,主要由传输层(如TCP协议)负责处理。段包含了传输层首部和应用层数据,它的主要作用是将应用层数据分割成更小的单元,以便于在网络中传输和重新组装。传输层会对段进行分段和重组,以确保数据的可靠传输和顺序正确。

  5. 消息:消息是应用层协议中的数据单位,它是应用程序根据特定协议规定的格式组成的。消息包含了应用层协议需要交换的信息和数据。不同的应用层协议有不同的消息格式和语义,用于实现特定的功能和服务,如HTTP协议中的HTTP请求和响应消息,SMTP协议中的电子邮件消息等。
    2.6.1 TCP/IP数据传输封装
    在这里插入图片描述

在网络通信中,每个分层都会为要发送的数据添加一个首部,该首部包含了该层必要的信息,如目标地址和协议相关信息。这样的首部在数据包的传输过程中扮演着重要的角色,为网络传输提供了必要的控制信息。在 TCP/IP 协议族中,IP、TCP 和 UDP 这些协议在传输数据时也会附加自己的首部,以实现数据的分发、路由和传输。

具体来说,网络中传输的数据包通常由两部分组成:首部和数据。首部包含了协议所需的控制信息,如源地址、目标地址、校验和等,而数据部分则是上一层传输过来的实际内容。每个协议的首部结构都由具体规范所定义,明确规定了数据在传输过程中应该如何处理和读取。

通过解析数据包的首部,接收端能够理解该数据包中包含的协议信息和要处理的数据内容。首部中的信息对于数据的正确传输和处理至关重要,帮助网络设备和应用程序准确解读和处理接收到的数据。

在网络通信中,数据经过应用层、传输层、网络层和链路层的处理,每一层都会为数据添加相应的首部信息,最终形成一个完整的数据包。这个过程被称为封装。
2.6.2 TCP/IP数据传输流程
在发送端,数据包从应用层开始,逐层向下通过传输层、网络层和链路层,每一层都会添加对应的首部信息,同时控制数据的传输和路由。最终在链路层生成以太网数据包,通过物理介质传输到目的主机。

在接收端,目的主机接收到以太网数据包后,会逐层按照协议的规范进行解析和拆包,依次去除各层的头部信息,直到将数据传递到应用层。最终应用程序会接收到处理后的数据,完成整个通信过程。

这种封装和解析的过程确保数据的正确传输和处理,使不同网络设备和应用程序能够理解和处理数据。通过这个规范的数据包处理流程,“发送请求时封包,接收数据时拆包”确实很好地描述了数据在网络通信中的传输过程。

下面用应用A发送,应用B接收来说明:
在这里插入图片描述

  1. 应用A将需要传输的数据进行编码,生成报文或消息,然后将其交给下面的TCP层。。

  2. 应用A的TCP模块负责建立连接、发送数据以及断开连接。它将应用层数据封装为TCP报文段,并附加一个TCP首部。

  3. 应用A的IP模块将TCP模块传来的TCP首部和数据合并成自己的数据,并在TCP首部前添加IP首部,生成IP数据报(datagram)。

  4. 应用A的数据链路层将从IP模块传来的IP数据包作为数据进行处理。它会为这些数据添加链路层首部,生成链路层帧(frame),然后通过物理层传输给接收端。

  5. 应用B的数据链路层收到链路层帧后,首先查找链路层帧首部中的目标MAC地址,用于判断是否为自己的包,若不是则丢弃数据。如果链路层帧是发送给应用B的,则根据以太网包首部中的类型确定数据类型,将数据传递给相应的模块,如IP模块、ARP模块等。在这个例子中,数据被传递给IP模块。

  6. 应用B的IP模块接收到数据后,进行类似的处理。它根据包首部中的目的IP地址判断是否与自己的IP地址匹配,如果匹配,则根据首部中的协议类型将数据发送给对应的模块,如TCP模块、UDP模块等。在这个例子中,数据被传递给TCP模块。

  7. 应用B的TCP模块在处理数据时,首先计算校验和,检查数据是否被破坏。然后按照序号检查数据是否按序接收。最后,根据端口号确定具体的应用程序。一旦完整接收到数据,根据端口号将数据传递给相应的应用程序。

  8. 应用B的应用程序直接接收到应用A发送的数据,通过解析数据,展示相应的内容。
    2.7 MAC地址、IP地址、端口号
    2.7.1 MAC地址
    MAC 地址(Media Access Control Address)是一个唯一的硬件地址,用于标识网络设备(如计算机、网络接口卡、路由器等)在局域网内的身份。它是由网络设备的制造商在生产时分配的,通常以十六进制表示,并由6个字节组成。MAC 地址具有全球唯一性,不同设备的 MAC 地址不会重复。

MAC 地址是一个设备的唯一标识,它用于在局域网范围内直接寻址和传输数据帧。

MAC 地址由 48 位二进制数组成,通常以六个十六进制数对(每个数对包含两个十六进制位)的形式表示,例如:00:1A:2B:3C:4D:5E。

MAC 地址的前 24 位(前三个十六进制数对)是由 IEEE 组织分配,被称为 OUI(Organizationally Unique Identifier),用于标识设备的制造商。剩余的 24 位由设备的制造商自行分配,用于唯一地标识每个设备。

MAC 地址是在数据链路层的帧中使用的,用于将数据包从一个网络设备传输到同一网络中的另一个网络设备。与 IP 地址不同,MAC 地址在全球范围内保持唯一性,并且通常不会被更改或修改。

每个网络接口卡都有一个独特的 MAC 地址,用于在局域网上进行数据帧的发送和接收。当数据在局域网中传输时,它们被封装在数据帧中,并使用目标 MAC 地址来确定数据的接收者。
2.7.2 IP地址
IP 地址(Internet Protocol Address)是一个用于在计算机网络中唯一标识和寻址设备的数字标识。它是由 Internet Protocol(IP)使用的地址,用于在网络上路由和传输数据。

IP 地址有两个主要版本:IPv4(Internet Protocol version 4)和IPv6(Internet Protocol version 6)。

  1. IPv4 地址:
    IPv4 是最常用的 IP 地址版本,由 32 位二进制数表示,通常以点分十进制形式(例如:192.168.0.1)呈现。IPv4 地址被广泛用于互联网中。它的地址空间有限,仅有约 42 亿个可用地址。

IPv4 地址通常被分为以下几类:

  • 公共 IP 地址:用于直接访问 Internet 的设备。公共 IP 地址可以被全球范围的路由器和服务器访问。
  • 私有 IP 地址:用于本地网络内部通信,不对外直接公开。私有 IP 地址可以在局域网或私有网络中使用,并通过网络地址转换(NAT)技术与互联网连接。
  • IPv4的私有IP地址范围包括:
    • IPv4的私有A类地址范围:10.0.0.0 至 10.255.255.255
    • IPv4的私有B类地址范围:172.16.0.0 至 172.31.255.255
    • IPv4的私有C类地址范围:192.168.0.0 至 192.168.255.255

需要注意的是,私有IP地址在局域网内是唯一的,但在全球范围内是不唯一的。当内部设备需要访问互联网时,私有IP地址会被网络地址转换(NAT)技术转换为公共IP地址,以实现与外部网络的通信。

  1. IPv6 地址:
    IPv6 是 IPv4 的后继版本,采用了 128 位的地址空间,提供了更大的地址池。IPv6 地址通常以冒分十六进制形式(例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334)呈现,可以提供大约 340 大家庭次方个地址。
  • IPv6地址中没有专门的私有地址范围,但有一个称为Unique Local Address (ULA)的地址块,可以用于内部通信目的。ULA的前缀是fc00::/7。

IPv6 地址的主要特点:

  • 大量的可用地址:IPv6 地址空间极其广阔,可满足未来互联网设备的需求。
  • 简化的未压缩格式:IPv6 地址可以通过去除前导零和合并连续的零简化,以提高可读性。
  • 改进的安全性与可靠性:IPv6 提供更高级别的加密和认证机制,提供更好的安全性和可靠性。

IP 地址的分配由互联网号码分配机构(IANA、RIR、ISP)管理。这些机构负责将唯一的 IP 地址分配给互联网服务提供商(ISP),然后由 ISP 将 IP 地址分配给最终的用户设备。

IP 地址在网络通信中起着至关重要的作用,使得设备可以相互连接、进行数据交换和寻址。
2.7.3 端口号
在传输层中,每个正在运行的应用程序都会被分配一个独特的端口号,这样传输层协议就可以准确地将数据传输到正确的应用程序。

端口号是一个16位二进制,范围从0到65535。有一些常用的端口号被标准化和分配给特定的应用程序,例如Web服务器使用的HTTP协议使用的是80端口,安全的Web服务器使用的HTTPS协议使用的是443端口,FTP使用的是20和21端口等等。

当数据包到达计算机时,传输层协议(如TCP或UDP)会查看目的端口号,并将数据传输到相应的应用程序中,这样不同的应用程序就可以通过端口号进行并发的通信,而不会相互干扰。

端口号是计算机网络中非常重要的概念,它使得不同的应用程序能够在同一台计算机上进行并发的通信,实现了数据的准确传输和目标应用程序的识别。

小结:

  • MAC地址(Media Access Control Address)是网络接口卡(网卡)的物理地址,是全球唯一、不可更改的标识符。每个网络接口都有一个唯一的MAC地址,由设备制造商设定。MAC地址位于数据链路层,在同一网络内用于唯一标识设备。相比之下,IP地址(Internet Protocol Address)是设备在网络中的逻辑地址,可动态分配和变化。IP地址位于网络层,进行不同网络之间的通信,通过路由器实现网络间通信,而MAC地址则在局域网内直接识别设备。IP地址由网络管理员管理和分配,而MAC地址在设备制造时就被确定。

  • 端口号用于标识同一台计算机中不同应用程序的通信地址,每个应用程序有独立的端口号。确保每个网络应用程序都有独立的端口号是至关重要的,避免端口冲突导致通信失败。操作系统通过源IP地址、目标IP地址、协议类型、源端口号和目标端口号这五个要素来唯一识别网络通信,确保数据包按照正确路径传输到目标应用程序。

2.8 传输层协议TCP、UDP
TCP 和 UDP 是日常软件开发中常用的传输层协议,它们在网络通信中起着非常重要的作用。

TCP 协议由于其可靠性和顺序传输的特性,在诸如交易系统、网页浏览、文件传输、电子邮件发送等需要保证数据可靠性和完整性的场景中被广泛应用。在这些情况下,可靠性往往是非常重要的,因此 TCP 作为首选的传输协议。例如,网页浏览时获取网页内容、进行文件的上传和下载、通过电子邮件发送和接收邮件等都会使用 TCP 协议。

UDP 协议则更适合于对实时性要求较高,而对可靠性要求相对不那么严格的场景。例如,在网络游戏中,UDP 协议常常被用于传输游戏数据,因为游戏需要快速的响应和实时性,而对于少量的丢包可以在应用层进行处理。此外,视频会议、音频流的传输等实时性要求较高的应用也常常采用 UDP 协议。
2.8.1 TCP

  1. TCP(传输控制协议)是面向连接的、可靠的流协议,主要用于数据的可靠传输。TCP 在传输数据之前要先建立连接,并在传输数据过程中对数据进行分段、排序、重传、窗口控制等操作,以保证数据的可靠性。它对数据传输的要求比较高,适合传输大量的数据和对传输可靠性要求较高的场景。

TCP的优点:

  • 可靠性高:TCP通过确认、重传、校验和等机制可以保证数据的可靠传输,确保接收方正确地接收数据。
  • 顺序控制:TCP通过按序号分段、排序进行传输,保证数据在传输过程中不会乱序。
  • 流控制:TCP可以根据接收端的处理能力进行流量控制,避免发送端发送过快导致接收端处理不过来。
  • 拥塞控制:TCP可以根据网络的拥塞程度进行拥塞控制,避免网络拥塞导致数据丢失、重传等问题。

TCP的缺点:

  • 开销大:TCP在传输数据之前需要进行连接建立、断开等操作,带来一定的开销。
  • 传输效率低:由于 TCP 需要进行重传、流量控制、拥塞控制等操作,导致传输效率比较低。
  • 不适合大量小数据的传输:TCP需要进行分段和排序等操作,不适合传输大量小数据的场景。

2.8.2 UDP
2. UDP(用户数据报协议)是无连接的、不可靠的数据报协议,主要用于数据的快速传输和实时性要求较高的场景。UDP 对数据的传输没有太多的要求,只是进行一些最基本的检查和处理,如长度、校验和等。它不保证数据传输的可靠性,也没有流控制和拥塞控制等机制。

UDP的优点:

  • 传输速度快:UDP没有连接建立、断开等操作,只进行简单的检查和处理,传输速度比 TCP 更快。
  • 实时性好:由于 UDP 的传输速度快,适合用于实时性要求较高的场景,如视频、音频等。
  • 简单、灵活:UDP协议比较简单,开销小,灵活性高,适合用于一些特殊的应用场景。

UDP的缺点:

  • 可靠性较差:由于 UDP 没有确认、重传、拥塞控制等机制,传输数据的可靠性较差。
  • 数据传输有限制:由于 UDP 没有流控制和拥塞控制机制,数据的传输量会受到一定的限制,容易导致丢包、拥塞等问题。

综上所述,TCP 和 UDP 有各自的优缺点,需要根据实际的应用场景进行选择和使用。对于需要保证数据传输可靠性的场景,应使用 TCP;对于需要快速传输和实时性要求较高的场景,应使用 UDP。需要注意的是,UDP 也可以协同上层应用来实现数据的可靠传输和流量控制等功能。
2.8.3 通讯五元组
通信五元组是指在网络通信中用于唯一标识一个网络连接的五个要素,主要用于描述网络数据包的来源和目的地。通信五元组包括以下五个要素:

  1. 源 IP 地址(Source IP Address):数据包的发送方的 IP 地址,用于标识数据包的来源。IP 地址是在网络中唯一标识一个主机的地址。

  2. 目标 IP 地址(Destination IP Address):数据包的接收方的 IP 地址,用于标识数据包的目的地。

  3. 协议(Protocol):数据包所使用的传输层协议,例如 TCP、UDP 或 ICMP 等。通过协议字段,接收方能够确定如何解释数据包的内容。

  4. 源端口号(Source Port):发送方应用程序使用的端口号,用于标识发送方的应用程序。源端口号与源 IP 地址共同标识了数据包的发送者。

  5. 目标端口号(Destination Port):接收方应用程序应该使用的端口号,用于标识数据包的目的地应用程序。目标端口号与目标 IP 地址共同标识了数据包的接收者。

通信五元组能够唯一标识一个网络连接,帮助网络设备正确路由数据包、实现数据包的正确传输和到达目的地。

上述内容提到了通过端口号、IP 地址和协议号进行通信识别的方法,这在网络通信中确实非常重要。
在这里插入图片描述

  1. 对于情况①和②,两台计算机进行通信,它们的目标端口号相同且为8080,可以通过源端口号加以区分。由于源端口号是由发送方的应用程序随机选择的,不同的应用程序通常会选择不同的源端口号,因此通过源端口号可以区分不同的通信会话。

  2. 对于情况③和①,目标端口号和源端口号完全相同,但各自的源 IP 地址不同。在这种情况下,可以根据源 IP 地址来区分通信连接。每台计算机的 IP 地址是唯一的,因此通过 IP 地址可以准确地区分不同的计算机。

此外,当 IP 地址和端口号完全一样时,可以通过协议号来区分,例如 TCP 和 UDP。根据所用的传输层协议不同,可以进一步区分不同的通信连接。
2.8.4 TCP三次握手
TCP连接确实是面向可靠的连接,并且是全双工连接,TCP连接的建立需要进行3次握手,TCP连接建立具体过程如下:

在这里插入图片描述

  1. 第一次握手:客户端向服务器端发送一个标志位SYN为1的数据包,其中随机生成一个初始序列号seq=x。客户端处于SYN_SENT状态。

  2. 第二次握手:服务器端收到客户端请求后,会发送一个带有SYN/ACK标志的数据包给客户端。在这个数据包中,服务器端的SYN标志被置为1,ACK标志是对客户端序列号的确认,ack=x+1,同时生成一个自己的序列号seq=y。服务器端进入SYN_RCVD状态。

  3. 第三次握手:客户端接收到服务器端的SYN/ACK数据包后,会对在其中进行确认。客户端将ACK标志置为1,同时检查服务器端的ACK是否为1,检查序列号是否正确,ack=y+1,并生成自己的序列号seq=x+1。这个数据包被发送给服务器端,服务器端会检查接收到的ACK是否为1,检查序列号是否正确,ack=x+1。客户端和服务器端进入ESTABLISHED状态,这意味着连接已经建立,数据可以进行传输。

2.8.5 TCP四次挥手
TCP四次挥手是在终止TCP连接时,客户端和服务器端共同发送4个包来确认连接的断开,这一过程由客户端或服务端中的任何一方执行close操作来触发。

由于TCP连接是全双工的,因此每个方向必须单独进行关闭。当一方完成数据发送任务后,会发送一个FIN标志的包来终止此方向上的连接。接收到FIN只意味着这一方向上不再有数据流动,即不会再接收到数据,但仍然可以在该TCP连接上发送数据,直到此方向也发送了FIN。

首先执行关闭操作的一方被称为主动关闭方,而另一方则称为被动关闭方。主动关闭方发送第一个FIN,触发挥手过程,而被动关闭方在接收到第一个FIN后,发送确认的ACK包,表示接受关闭请求。随后被动关闭方发送自己的FIN,而主动关闭方在收到此FIN后,发送确认的ACK包进行响应。

TCP连接断开具体过程如下:
在这里插入图片描述

第一次挥手:客户端发送一个含有FIN seq=x的包,用于终止客户端到服务器端的数据传输。此时,客户端进入FIN_WAIT_1状态。这表示客户端已经发送完毕所有数据,但如果服务器端还有数据未发送,则不会立即关闭连接,而是等待服务器端发送完所有数据。
第二次挥手:服务器端收到FIN后,先发送一个包含ACK=x+1的确认包,告诉客户端已收到其请求,但还未准备好关闭连接,请求客户端等待。此时客户端进入FIN_WAIT_2状态,等待服务器端的FIN报文。
第三次挥手:当服务器端发送完所有数据后,发送FIN seq=y报文给客户端,告知客户端服务器端已准备好关闭连接,进入LAST_ACK状态。
第四次挥手:客户端收到FIN=N后,表示可以断开连接了,但是可能存在网络延迟等问题,客户端不能立即关闭连接。客户端会先发送一个ACK=y+1的确认包,并进入TIME_WAIT状态。倘若服务器端没有收到ACK,则可以重新发送FIN。当服务器端收到ACK后,就知道可以断开连接了。客户端等待2MSL后仍未收到回复,则确认服务器端已正常关闭,主动断开连接。四次握手过程最终完成。

在TCP连接的四次挥手过程中,中断连接的一方可以是客户端,也可以是服务器端。这意味着在挥手过程中,任何一方都有可能首先发起关闭连接的请求,而另一方则会相应地进行处理,最终完成连接的断开。
2.8.6 TCP可靠重发
TCP使用多种机制来实现可靠重发:

  1. 序列号和确认机制:TCP在每个数据包中使用序列号和确认号来跟踪数据包的发送和接收。接收方收到数据包后会发送一个带有确认号的ACK包来确认接收到的数据。如果发送方在一定时间内未收到该ACK,就会认为数据包丢失,触发重发机制。

  2. 超时重传:发送方设置一个定时器,如果在规定的时间内未收到确认ACK,发送方会认为数据包丢失并进行重传。

  3. 快速重传:如果发送方收到的连续ACK有一个包含已经发送但还未确认的序列号,即出现了冗余的ACK,发送方可以推断该数据包丢失,并立即进行重传,而不需要等待超时计时器启动。

  4. 滑动窗口:TCP使用滑动窗口机制来控制发送和接收数据的速率。接收方通过告知发送方它所能接收的数据量来调整窗口大小。如果发送方未收到窗口内的所有数据的确认,它会进行重传。

  5. 拥塞控制:TCP使用拥塞控制算法来避免网络拥塞。当网络出现拥塞时,TCP会降低发送速率并进行拥塞避免。这可以减少丢包和重传的可能性。

通过这些机制的组合,TCP能够提供可靠的数据传输,保证数据的完整性和顺序性。
2.9 总结
本文的重点在强调网络开发中必须掌握的TCP建立连接、断开连接以及数据传输过程的基础知识。对于全面掌握计算机网络通信知识,需要查阅更多专业资料来深入了解。在网络开发中,理解TCP协议的连接建立、断开和数据传输过程非常重要,这些内容对于开发高效、可靠的网络应用程序至关重要。

  • 29
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值