计算机网络

一、应用层

当你在浏览器中输入网址并按下回车,应用层执行一系列操作,使得浏览器能够与目标服务器建立通信,并请求所需的网页内容。这些操作可分为以下几个详细步骤:

1. 用户操作触发请求

输入网址 :当你输入网址(例如 www.example.com),这是一个用户层面的操作,触发了浏览器的请求生成流程。

按下回车:按下回车后,浏览器将准备一份请求,开始寻找如何与这个网址背后的服务器建立通信。

2. 域名解析(DNS 解析)

为什么需要解析 :网址(如 www.example.com)对于人类来说好记,但计算机不理解这种格式。计算机通信依赖 IP 地址(如 93.184.216.34),需要将网址转换成 IP 地址。

DNS 查询过程:浏览器会先检查本地缓存中是否存有该网址对应的 IP 地址,如果没有找到,则向 DNS 服务器查询,DNS 服务器根据全局的域名数据库找到该网址的 IP 地址并返回给浏览器。

解析结果 :经过 DNS 解析,浏览器获得目标服务器的 IP 地址,比如 93.184.216.34。现在浏览器知道了自己要发送请求的目的地。

3. 生成 HTTP/HTTPS 请求

HTTP/HTTPS 协议选择

  • 浏览器通常会默认选择 HTTP 或 HTTPS 协议,取决于你输入的网址前缀(如 http://https://)。
  • HTTP(HyperText Transfer Protocol):这是一种开放的、未加密的传输协议,直接传输请求数据。
  • HTTPS(HTTP Secure):HTTPS 是 HTTP 的安全版本,通过 SSL/TLS 加密通道传输数据,保护用户隐私,防止数据被篡改或窃取。

构建请求的具体内容: HTTP/HTTPS 协议规定了请求的标准格式,通常包含以下部分:

  • 请求行
    • 请求方法(如 GETPOST 等):GET 用于请求数据(如访问网页),POST 用于提交数据(如表单数据)。
    • 请求路径:比如你访问的是 www.example.com/about,路径就是 /about
    • 协议版本:例如 HTTP/1.1 或 HTTP/2,标识协议的具体版本。
  • 请求头
    • 包含了浏览器、设备、语言、客户端能力等信息。例如,浏览器可能会告知服务器自己可以处理的内容类型(如 text/html 表示 HTML 网页)。
    • 常见的请求头字段包括 User-Agent(浏览器类型)、Accept(可接受的数据类型)、Host(目标域名)等。
  • 请求体 (在 GET 请求中一般为空):
    • 当发送的是 POST 请求时,请求体会包含具体的数据内容,例如表单中的文本数据,或者上传的文件等。

完整请求示例

复制代码
GET /about HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html

4. HTTPS 的加密过程

  • 握手阶段
    • 如果是 HTTPS 请求,应用层会先进行 SSL/TLS 握手过程。在握手过程中,浏览器和服务器互相验证身份,并协商加密方式。
    • 握手完成后,浏览器和服务器共享一个会话密钥,用来加密接下来的数据传输。
  • 加密数据传输
    • 所有请求内容将被加密成密文,即使被第三方拦截也无法轻易读取。只有目标服务器可以用自己的私钥解密信息,确保用户的数据隐私。

应用层处理过程

  • 解析网址:将人类易读的域名转换成计算机识别的 IP 地址,找到请求目标。
  • 生成请求:基于 HTTP/HTTPS 协议生成标准化的请求内容,包括请求行、请求头和请求体。
  • HTTPS 加密:如果使用 HTTPS,会先进行加密协商,确保数据传输的私密性。
  • 数据封装:将组装好的请求数据打包成消息,交给运输层进行传输。

二、传输层

在传输层,传输协议的选择尤为关键,它决定了数据的传输方式和可靠性。主要有两种协议可用:

  • TCP(Transmission Control Protocol):面向连接的传输协议,强调数据的可靠性。
  • UDP(User Datagram Protocol):面向无连接的传输协议,强调数据的传输速度。

在浏览网页的例子中,传输层通常选择 TCP 协议,因为网页数据需要保证可靠传输,不丢失或损坏。

1.三次握手:建立连接

为什么需要握手:TCP 是一个可靠的、面向连接的协议,传输前需确保两端都准备好接收数据。这就像快递员送快递之前要确认对方在家,能收快递。

三次握手过程

  1. 客户端发送 SYN 包:客户端(浏览器)发送一个 SYN(同步)包给服务器,请求建立连接,表示 "我想和你通信"。
  2. 服务器回复 SYN-ACK 包:服务器接收到 SYN 包后,回一个 SYN-ACK 包给客户端,表示 "我知道了,并确认可以通信"。
  3. 客户端回复 ACK 包:客户端再次回复一个 ACK(确认)包给服务器,确认服务器的应答信息,双方正式建立连接。

握手成功后的状态:通过三次握手,浏览器和服务器都知道对方在监听,随时可以接收数据,传输链路建立成功。

2.数据分段:拆分数据包

为什么需要分段:应用层传递过来的 HTTP 请求消息可能很大,直接传输不方便。传输层会将数据拆分成小的"段"(TCP 段),方便传输和重组。

每段数据的结构

  • 序列号(Sequence Number):每段数据包都有序列号,确保接收方可以按顺序重组。
  • 端口号:标识发送和接收的应用程序(例如浏览器和 Web 服务器),确保数据能准确传递给对应的应用。
  • 校验和:检测数据在传输过程中是否出错,保证数据的完整性。

3.可靠传输:数据传输与确认机制

数据包传输:客户端将分段后的数据包逐一发送给服务器,每发送一个包,客户端会等待服务器的确认。

确认应答(ACK):服务器接收到每个数据包后,都会发送一个 ACK 包回客户端,表示数据包接收成功。这样即使有数据丢失,客户端也会知道,便于重传。

滑动窗口机制:TCP 会在发送多个数据包时维护一个"滑动窗口",窗口内的数据包等待确认,窗口滑动后新的数据包才会发送出去。这提高了传输效率,同时保证可靠性。

重传机制:如果客户端发送的数据包在规定时间内没有收到 ACK 确认,TCP 会自动重传该包,确保数据完整性。

4.流量控制:调节发送速度

避免网络拥堵:为了防止发送方发送过快导致接收方处理不过来,TCP 会根据接收方的处理能力调整数据传输速度。

滑动窗口调整:TCP 动态调整滑动窗口的大小,控制每次发送的数据量,避免网络拥塞。

5.拥塞控制:控制数据发送速率

慢启动:TCP 在开始时,数据传输速率会较低,慢慢增加。这样可以避免网络突然出现大量数据引起的拥塞。

快速重传和恢复:如果发生拥塞或数据丢失,TCP 会立即降低发送速率,重传丢失的数据,确保网络稳定。

6.四次挥手:关闭连接

断开连接的过程:当数据传输结束后,客户端和服务器都会进行四次挥手,以断开连接。

  1. 客户端发送 FIN 包:客户端表示"我已发送完数据,准备断开连接"。
  2. 服务器发送 ACK 包:服务器确认收到 FIN 包,表示已知道客户端准备断开连接。
  3. 服务器发送 FIN 包:服务器向客户端表示"我这边的数据也传完了,准备断开连接"。
  4. 客户端发送 ACK 包:客户端确认收到服务器的 FIN 包,至此,双方连接完全关闭。

7.UDP 传输的简化过程

如果传输层选择了 UDP 协议(在浏览网页时一般不使用 UDP,但在其他场景如视频通话中常用),则过程会更加简单:

  1. 无连接传输:UDP 不会进行三次握手,不需要建立连接,直接发送数据包。这相当于快递员不需要确认对方在家,直接把包裹放门口。
  2. 不保证可靠性:UDP 数据包发送后,不要求接收方确认是否接收到,可能会丢包或错序。UDP 更适合对实时性要求高的场景,比如直播、语音通话等。
  3. 轻量快速:由于没有连接控制和确认机制,UDP 协议非常轻量、传输速度快,但不保证数据完整性和顺序。

传输层的处理过程

  • 连接管理:TCP 使用三次握手建立连接,确保双方准备好通信;使用四次挥手关闭连接,释放资源。
  • 数据可靠性保障:TCP 通过序列号、ACK 确认和重传机制确保数据完整、顺序到达。UDP 则提供轻量化、快速传输,但不保证可靠性。
  • 流量与拥塞控制:TCP 动态调节传输速度,避免网络拥塞;UDP 不做流量和拥塞控制。
  • 数据封装:将应用层数据封装成段(TCP)或数据报(UDP),准备交给网络层进行路由传输

三、网络层

1. IP 地址封装:为数据包贴上目标和源地址标签, 生成 IP 数据包

当数据从传输层传递给网络层时,网络层的第一步是为数据包打上 源 IP 地址目标 IP 地址 的标签。

IP 地址的作用

  • 目标 IP 地址 :是网络层用来确定数据包最终目的地的唯一标识。它通常是在 DNS(域名系统)解析过后生成的。比如,当你访问 www.example.com 时,浏览器会先通过 DNS 查询,将域名转换成目标 IP 地址(如 93.184.216.34)。
  • 源 IP 地址:则是发送方的 IP 地址,用来告诉接收方,数据包来自哪个设备,这样接收方在回应时可以正确返回数据。

IP 头部的组成 :网络层会将 IP 地址及其他控制信息打包在 IP 头部中,生成 IP 数据包

  • 源 IP 地址目标 IP 地址:分别标识数据包的来源和去向。
  • 协议字段:标明传输层协议类型(如 TCP 或 UDP),帮助接收方知道数据包的内容类型。
  • TTL(Time to Live,生存时间):数据包在网络中允许存在的跳数,每经过一个路由器会减 1,避免数据包在网络中无限循环。
  • 校验和:用于验证 IP 头部的数据完整性,确保传输过程未发生篡改。
  • IP 数据包的结构:[IP 头部 | 传输层数据段(TCP 段或 UDP 数据报)]

2. 路由选择和逐跳传输

数据包在网络中的传输是分"跳"进行的。每一跳的传输依赖路由器来查找路径,最终完成端到端的数据传输。

路由器的作用 :路由器是网络中的关键设备,负责分析每个数据包的目标 IP 地址,并查找路由表确定最优的传输路径。路由器会在路由表中记录已知网络的路径信息,包括 网络地址下一跳(下一台路由器的地址)和路径的优先级。

路由表的组成:路由表记录了通向各网络节点的最佳路径。根据目标 IP 地址,路由器可以在路由表中查找下一跳的路由器,决定如何转发数据包。

逐跳传输机制

  1. 到达路由器:数据包到达一个路由器,路由器会将数据包的 IP 头部中的目标地址与路由表进行匹配。
  2. 选择下一跳:根据匹配结果,路由器选择最佳路径,将数据包转发到下一个路由器,直到数据包抵达目标网络。
  3. 逐跳传递:数据包依次跳转,在每一个路由器上完成相同的查找和转发过程,最终抵达目标设备。

路由协议的应用:路由器使用不同的路由协议来动态更新路由表。常见的路由协议包括:

  • OSPF(开放最短路径优先):适用于内部网络,根据链路状态确定最短路径。
  • BGP(边界网关协议):适用于跨越多个网络的互联网路径选择。

3. TTL(生存时间):防止数据包无限循环

TTL 是 IP 头部的一个字段,控制数据包在网络中的生命周期,避免因路由错误导致数据包无限循环。

TTL 的设定:通常数据包的 TTL 值为 64 或 128,当数据包每经过一个路由器,TTL 就会减 1。

TTL 超时机制:当 TTL 减至 0,数据包会被自动丢弃,防止网络中出现拥堵。

ICMP 的超时反馈 :如果 TTL 值为 0,路由器会通过 ICMP 协议向源设备发送 超时消息,通知发送方数据包未能到达目的地。这是为了让发送方了解网络状况,做出相应调整。


4. 数据包碎片化与重组

在网络中,设备和链路对数据包的大小限制不同,因此网络层需要将超出大小的数据包进行碎片化,以确保数据包在所有网络中都能顺利传输。

碎片化的必要性 :网络中的不同链路有各自的 MTU(最大传输单元) 限制。如果数据包超过某条链路的 MTU 大小,网络层会将其拆分为多个小碎片。

碎片化过程

  • 每个小数据包片段都会加上标识,说明它在原始数据包中的位置。
  • 每片数据会被打包为独立的 IP 数据包并被转发。

重组过程:碎片化的数据包在目标设备的网络层完成重组,恢复成完整的数据包,这样应用层才能收到完整的原始数据。

5. 错误检测和反馈(ICMP 协议)

ICMP(Internet Control Message Protocol) 是一种网络层协议,用于报告网络状态和反馈错误信息,不传输实际的数据内容,而是负责"告警"和"诊断"。

ICMP 的作用

  • 网络不可达 :当路由器发现目标网络或目标主机不可达时,ICMP 会生成一个 不可达消息,通知发送方目标不可到达。
  • TTL 超时 :如果数据包在网络中超出 TTL 限制,ICMP 会生成 超时消息,反馈给源设备,帮助识别传输中的问题。
  • ping 和 traceroute :这两个常见命令都是 ICMP 的应用。ping 发送 ICMP 请求来测试两个设备之间的连通性,而 traceroute 可以利用 ICMP 逐跳显示到达目标设备所经过的路由路径。
  • ICMP 的角色:ICMP 并非实际的数据传输协议,而是作为"网络监测和诊断员"存在,帮助管理员监测网络状态和排查故障。

6. 数据包与路由器间的交互

每当数据包经过一个路由器,都会交给链路层。这是因为数据包在网络中的每一次"跳跃"(hop),即从一个路由器传递到下一个路由器,都需要经过链路层的本地传输。

具体来说,网络层负责整个路径上的跨网络传递规划,确定数据包的"最终目的地",而链路层负责每一跳的传输操作。也就是说,在网络中,每一个路由器节点上 数据包都会进入链路层,完成本地传递,然后再上交到网络层进行下一步的路由选择。整个过程大致如下:

  1. 数据包到达路由器:每当数据包到达一个新的路由器时,数据包首先被传递到链路层。

  2. 链路层交给网络层:链路层确认该路由器确实是这个数据包的下一跳目的地后,将数据包传递给网络层。

  3. 网络层处理目标地址:网络层读取数据包中的目标 IP 地址,并在路由表中查找最优路径(下一跳)。根据查找到的路径决定数据包的下一跳方向。

  4. 网络层传递回链路层:网络层决定了下一跳路由器的地址后,将数据包交回链路层,通过链路层协议将数据包传送到下一跳。

  5. 重复上述过程,直到数据包抵达最终目的地:在每一个路由器上,数据包都会在链路层和网络层之间交替传递,直到抵达目标设备。

所以 每一个路由器节点都会有链路层的参与,完成该节点的局部传输,再将数据包交给网络层处理下一跳。链路层的本地传输使得数据包可以逐步在每一跳上被确认和传递,直至到达最终的接收方。

网络层的处理过程

  • IP 地址封装:将传输层数据段封装成 IP 数据包,加入源和目标 IP 地址。
  • 路由选择与逐跳转发:通过路由器和路由表,根据目标 IP 地址选择逐跳路径,将数据包一步步发送到目标设备。
  • TTL 管理:控制数据包的生命周期,防止数据包在网络中无限循环。
  • 碎片化与重组:在网络中将大数据包拆分成小片段,到达目标后重组,确保数据包适应不同网络的 MTU 限制。
  • ICMP 错误反馈:通过 ICMP 协议报告网络问题,如网络不可达和 TTL 超时,便于检测和排查网络问题。

四、链路层

1. 数据帧的封装

什么是数据帧:链路层会把网络层传来的数据包封装成一个个"数据帧"。数据帧就像一个小包裹,其中包括目标地址、数据内容和一个"检查码"。

怎么做封装 :链路层会在数据前面加上一个"地址标签"(类似于快递标签)------这就是 源地址 (谁发的)和 目标地址(发给谁)。然后在数据后面加一个"检查码"来防止出错。

2. 物理地址(MAC地址)

MAC地址的作用:链路层用 MAC 地址来区分同一个局部网络中的设备,类似于每个快递站点有自己的编号。

如何使用:当链路层要发数据给某个设备时,会在数据帧上加上这个设备的 MAC 地址,确保数据在局部网络中不会送错人。

3. 错误检测

如何检测错误:链路层会在数据帧后面加一个"校验码"(CRC)。当数据传输到达目标设备后,目标设备会重新计算校验码,看看和发送时的一样不一样。

为什么需要:如果校验码不一样,说明数据可能出错了,这时链路层会丢弃这个数据帧,而不是传到更高层去。

4. 流量控制和访问管理

避免碰撞:在局部网络中,多个设备可能同时发送数据,链路层会协调它们,让它们不在同一时间发,避免"撞车"。

常用机制

  • CSMA/CD(碰撞检测):在以太网上,设备会先"听听"网络是否空闲,确认没人发数据才发送。如果发现有人同时发,会暂停,稍后再重试。
  • CSMA/CA(碰撞避免):在无线网络中,设备会排队等待,确保数据传输更加稳定。

链路层的处理过程

  • 数据帧:链路层把数据打包成"帧",加入"地址标签"和"检查码"。
  • MAC地址:链路层用 MAC 地址确保数据送到对的设备。
  • 错误检测:用校验码检测传输中的错误,确保数据完整。
  • 流量控制:让设备错开时间发送数据,避免"撞车"。

五、在浏览器地址栏输入地址并返回网页的完整过程

第一阶段:发送请求到服务器

1.用户输入网址并按下回车

你在浏览器地址栏中输入网址(如 www.example.com),这表示你希望访问 example.com 网站的主页。按下回车后,浏览器会发起请求来获取网站的内容。

浏览器做的第一步工作是解析 URL:

上图中的蓝色部分 URL 元素都省略了,当没有路径名时,就代表访问根目录下事先设置的默认文件 ,也就是 /index.html 或者 /default.html 这些文件。

2.DNS 解析(域名转换为 IP 地址)

浏览器首先需要将域名(www.example.com)转换成服务器的 IP 地址。这个过程叫 DNS 解析,一般会经过以下步骤:

  • 浏览器会先查看本地缓存中是否有该域名对应的 IP 地址。
  • 如果本地没有,浏览器会向 DNS 服务器发送请求,获取该域名的 IP 地址。
  • DNS 服务器返回对应的 IP 地址(如 93.184.216.34),这样浏览器就知道要连接的服务器位置了。

不是每次解析域名都要经过那么多的步骤,浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「本地 DNS 服务器」。

3.生成 HTTP 请求

解析出 IP 地址后,浏览器会生成一个 HTTP 请求,其中包含了需要访问的资源路径和一些附加信息。HTTP 请求主要包括以下内容:

  • 请求行 :如 GET / HTTP/1.1,表示请求访问主页。
  • 请求头:包括浏览器信息、支持的内容类型等。
  • 请求体:一般用于发送数据,但在 GET 请求中通常为空。

4.传输层封装(TCP 三次握手)

浏览器将 HTTP 请求交给传输层(TCP 协议)进行封装,生成一个 TCP 段。此时,传输层会进行 三次握手 来建立一个稳定的连接,确保数据能可靠传输。

  • 第一步:浏览器向服务器发送 SYN 包,表示请求建立连接。
  • 第二步:服务器接收到 SYN 包后,回复一个 SYN-ACK 包,确认连接请求。
  • 第三步:浏览器收到服务器的 SYN-ACK 包后,发送一个 ACK 包,确认连接建立。

三次握手完成后,TCP 连接建立,传输层正式传输 HTTP 请求数据。

  1. 一开始,客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端口,处于 LISTEN 状态。

  2. 然后客户端主动发起连接 SYN,之后处于 SYN-SENT 状态。

  3. 服务端收到发起的连接,返回 SYN,并且 ACK 客户端的 SYN,之后处于 SYN-RCVD 状态。

  4. 客户端收到服务端发送的 SYNACK 之后,发送对 SYN 确认的 ACK,之后处于 ESTABLISHED 状态,因为它一发一收成功了。

  5. 服务端收到 ACKACK 之后,处于 ESTABLISHED 状态,因为它也一发一收了。

5.网络层封装(IP 数据包)

传输层的 TCP 段会被传递到网络层,网络层将添加 IP 头部(包括源 IP 和目标 IP 地址),封装成一个 IP 数据包,用于数据在网络中传输。

IP 数据包通过路由器逐跳传输,最终传递到服务器所在的网络。

6.链路层传输

IP 数据包被传递到链路层,链路层会将其封装成 数据帧,并通过本地网络传输。数据帧包含 MAC 地址(用于局域网中的传输)和校验码。

数据帧在经过一系列的链路层和网络层逐跳传输后,最终到达服务器。


第二阶段:服务器处理请求并返回响应

1.服务器接收请求

服务器通过链路层接收数据帧,数据帧逐层解封装:

  • 链路层:去掉数据帧的帧头和帧尾,传递 IP 数据包给网络层。
  • 网络层:去掉 IP 头部,将 TCP 段传递给传输层。
  • 传输层:去掉 TCP 头部,将原始的 HTTP 响应数据传递给应用层(浏览器)。

2.服务器处理请求

服务器应用层的 Web 服务器 (如 Apache、Nginx)接收到 HTTP 请求后,分析请求内容。根据请求行中的路径(如 /)决定访问哪些资源:

  • 静态资源:如果请求的是一个静态页面(如 HTML 文件、图片等),服务器会直接从本地文件系统中读取这些资源。
  • 动态内容:如果请求的是动态内容(如 PHP、Python 生成的页面),服务器会运行对应的脚本来生成页面内容。

3.生成 HTTP 响应

服务器生成一个 HTTP 响应,包含以下内容:

  • 状态行 :如 HTTP/1.1 200 OK,表示请求成功。
  • 响应头 :例如 Content-Type(表示内容类型为 text/html)、Content-Length(表示响应数据的大小)等。
  • 响应体:实际的网页内容,如 HTML、CSS、JavaScript 和图片等。

3.传输层封装响应(TCP)

服务器将 HTTP 响应数据传递给传输层。传输层再次使用 TCP 协议封装数据,将其分段打包,以确保数据可以可靠传输。封装后生成的 TCP 段会添加序列号,以便客户端能正确拼接数据。

4.网络层和链路层封装并传输

传输层的 TCP 段传递到网络层,网络层加上 IP 头部,生成 IP 数据包(源 IP 是服务器的 IP,目标 IP 是客户端的 IP)。

IP 数据包传递到链路层,链路层将其封装成数据帧并在网络中逐跳传输,经过多次跳转后,最终到达客户端的网络。

第三阶段:浏览器接收并显示网页

1.浏览器接收 HTTP 响应

你的设备链路层、网络层和传输层依次解封装,最终将服务器的 HTTP 响应交给应用层的浏览器。

2.解析 HTML 内容

浏览器收到 HTTP 响应后,会开始解析 HTML 内容。HTML 是网页的结构代码,浏览器根据 HTML 标签决定如何显示页面内容。

浏览器在解析 HTML 时,如果遇到外部资源(如 CSS、JavaScript 或图片),会发起新的请求下载这些资源。

3.渲染页面

CSS:定义了页面的样式,浏览器会根据 CSS 规则调整内容的显示方式。

JavaScript:控制页面的动态行为。JavaScript 代码会在浏览器中执行,使页面具有交互性。

图片和其他资源:图片、视频等资源被下载后,浏览器会将它们嵌入到页面中。

4.显示页面

浏览器将解析和渲染后的内容显示在屏幕上,这就是我们看到的网页。

相关推荐
IT 青年2 小时前
计算机网络 (55)流失存储音频/视频
计算机网络
Like_wen3 小时前
【Go面试】基础八股文篇 (持续整合)
java·后端·计算机网络·面试·golang·go·八股文
longze_76 小时前
正向代理与反向代理的主要区别
计算机网络·cdn·反向代理·正向代理
酱学编程9 小时前
【计算机网络】NAT应用
网络·计算机网络·智能路由器
IT 青年1 天前
计算机网络 (54)系统安全:防火墙与入侵检测
计算机网络
心平气和️2 天前
第八章 动态主机配置协议的配置和应用
服务器·网络·计算机网络
车到山前必有路5292 天前
计算机网络(终章)——应用层
网络·计算机网络
longze_72 天前
计算机基础问答-面试总结
java·python·计算机网络·spring·面试·c#
Themberfue2 天前
UDP/TCP ②-三次握手 || 四次挥手 || 确认应答 || 超时重传
网络·网络协议·tcp/ip·计算机网络·udp
Cheese%%Fate2 天前
【计算机网络】传输层协议TCP与UDP
tcp/ip·计算机网络·udp