互联网计算系列整理主要内容来自软院 2020 级学长 EagleBear2002 的博客,为博主本人阅读后提炼整理的内容。
内容不算全面,仅推荐大家复习时参考。

# 第四层综述

  1. 分割上层应用程序数据。第四层只会在终端设备上有,在中间设备没有

  2. 建立端到端(end to end)的运营

  3. 完成可靠性检验与流量控制

两个协议:

  1. 传输控制协议(TCP,Transmission Control Protocol),是可靠传输

    • ** 面向连接,** 使用确认机制,提供流量控制

    • 重新发送丢失或错误的任何内容

  2. ** 用户数据报协议(UDP,User Datagram Protocol)** 将传出邮件分成多个部分,在目标站重新组合消息

    • 无连接,不使用确认,不进行流量控制

    • 直接丢弃错误的报文,而不进行其他操作

# 服务模型

TCP 和 UDP 都使用端口来跟踪(track)同时穿越网络的不同会话(即不同进程)

# 端口分配规范

4ae4e030e249781079e524d5ae98dbcd.png

0~65535 端口

  1. ** 低于 255 的端口号(0-255)** 保留给 TCP 和 UDP 公共应用程序使用(端口号 0-255 是 public 的,不可以随意分给其他的进程,如果分发则不符合规范)

  2. 0-1023 是熟知端口,有分发的规范,不应当被随意使用

  3. 1024-49151 的端口号进行登记使用,有的是应用程序已经的使用端口号,避免冲突

  4. 49152-65535 即为短暂端口号,用于和远端通信

  5. 基于端口号的不同,进行不同的包的分发

  • 常见端口
端口号服务名称描述
0Reserved保留端口,未指定服务
20FTP DataFTP 数据传输端口
21FTP ControlFTP 控制端口
22SSH安全 Shell,远程登录协议
23TelnetTelnet,远程登录协议
25SMTP简单邮件传输协议(邮件发送)
53DNS域名系统(DNS)
67DHCP Server动态主机配置协议(DHCP)服务器端口
68DHCP ClientDHCP 客户端端口
69TFTP简单文件传输协议(Trivial FTP)
80HTTP超文本传输协议(Web 服务)
110POP3邮局协议版本 3(邮件接收)
119NNTP网络新闻传输协议(网络新闻)
123NTP网络时间协议(时间同步)
143IMAPInternet 邮件访问协议(邮件接收)
161SNMP简单网络管理协议(设备管理)
194IRCInternet Relay Chat(聊天协议)
443HTTPS安全的 HTTP(加密的 Web 服务)
445Microsoft-DS微软目录服务(Windows 文件共享)
514Syslog系统日志协议
520RIP
587SMTP (Secure)加密的 SMTP(邮件发送)
631CUPS公共打印系统(打印服务)
993IMAPS加密的 IMAP(邮件接收)
995POP3S加密的 POP3(邮件接收)

# Socket 套接字

**Socket(套接字)** 是网络通信的一个抽象概念,它是应用层和传输层之间的接口,用于实现网络数据通信。

  1. 套接字表示为 **(IP 地址,端口)**

  2. 每个连接都表示为(socketsourcesocket_{source}socketdestinationsocket_{destination} ),点对点全双工通道

  3. 通讯被认为是以一个 socket 和另一个 socket 之间的连接(Socket API 是一套规范,根据上下文有不同的含义)

  4. TCP 不支持多播和广播

# 传输控制协议 TCP

传输控制协议(TCP,Transmission Control Protocol)

  1. 可靠传输

  2. 流传输

    1. 流量控制:滑动窗口(窗口进行通信,一次数据传输是有上限发的,缓存问题,拥塞问题)

    2. 避免拥塞

  3. 连接控制

    1. 建立连接:三次握手

    2. 断开连接:四次握手

# TCP 数据段格式

image.png

首部一行共计 4 字节,段首在前,固定首部长度为 20 字节

# 源端口和目的端口

每个端口占用两字节(16bit, 0~2^16-1 端口)

# 序号 seq

序号字段的值指本报文段所发送的数据的第一个字节的序号

# 确认号 ack

确认号字段:占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号

# URG

紧急 URG = 1 时,表明紧急指针字段有效。

  1. 告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)

  2. 优先放紧急数据,URG = 0 的时候则为不紧急(Ctrl + Z)

# ACK

ACK = 1 时确认号字段有效;ACK = 0 时确认号字段无效

# PSH(PuSH)

  1. 接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付,此时将缓存所有部分都传输,而并不是只将这个报文段的信息进行传输。

  2. TCP 在正常条件下并不是立马传输的,首先要缓存满了才发送,其次还有就是要保证网络可信的时候才发送

# RST

  1. ReSeT = 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接

  2. 就是重新来过,如果请求方发送的请求,如果应答方不想连接则将 ReSet 置为 1

# SYN

同步 SYN = 1:表示这是一个连接请求或连接接受报文(初始的时候才出现)

# FIN(FINish)

用来释放一个连接。FIN = 1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。(发送方没有传输数据了)

断开连接有四次握手。

# TCP 协议

# 建立可靠连接(三次握手)

image.png

图要记住,包括客户端和服务端的状态,传递的参数

图上的 x,y 都是随机数

# 释放连接(四次挥手)

image.png

图要记住,包括客户端和服务端的状态,传递的参数

图上的 u, v, w 都是随机数

在完全释放连接前,TIME-WAIT 等待 2 MSL(Maximum Segment Lifetime),记住!

# 为什么必须等待 2 MSL

  1. 为了确保 A 发送的最后一个 ACK 可以到达 B

  2. 防止出现任何无效的连接请求段:等待 2 MSL 之后,我们可以确保连接上的所有段均已消失

# 用户数据报协议 UDP

用户数据报协议(UDP,User Datagram Protocol)

  1. 没有建立连接(避免延时)

  2. 简单:发送方,接收方无连接状态

  3. 小段标题

  4. 没有拥塞控制:UDP 可以按照期望的速度传输

  5. UDP 用于:

    1. RIP:定期发送路由信息(periodically)

    2. DNS:避免延迟建立 TCP 连接(DNS 需要快速找到)

    3. SNMP:拥塞时(congestion),SNMP 必须仍然可运行。在没有拥塞和可靠性控制机制的情况下,UDP 在这种情况下的性能要优于 TCP。(主播和多播,大量信息传输)

    4. 其他协议包括 TFTP,DHCP

  6. 常用于 ** 流媒体(Stream)多媒体(multimedia)** 应用

    1. 容忍损失:无非就是降低帧率

    2. 这类应用是速率敏感的应用,而不一定是质量敏感的应用。

# UDP 数据帧格式

image.png

  1. UDP 只有 8 个字节的首部,所以 UDP 报文最少是 8 个字节

  2. 分别是 ** 源端口、目的端口、长度(包括 header 长度)、校验(data)、Data。** 前面的各占 16 位

  3. 校验也要对 data 一并校验,如果出现错误,直接丢弃(TCP 会重新发送)

  4. UDP 直接发送应用层给的报文,不会再自己分片

# TCP 和 UDP 的区别

# TCP

  1. 不是立即交给上层校验,而是需要先和对方沟通

  2. 缓存满了才统一交付。

# UDP

  1. 直接转发报文,保留报文边界

  2. IP 进行划分

  3. 应用程序会发送比较合适的 UDP 报文大小进行发送

# 共同点

  1. 校验是相同的。

# 应用:NAT 与 PAT

NAT(Network Address Translation)网络地址转换

NAT(Network Address Translation),是在 IP 数据包头中将一个地址交换为另一个地址的过程,是网络地址即将用完的解决方案之一

通过路由器上的 NAT Table 双向转换。

# NAT 的类型

  1. 静态 NAT:固定的内部地址(internal address)到注册地址(registered address)的映射(一开始就写死)

  2. 动态 NAT:映射以先到先得的方式动态进行(不是写死,配一个地址池,通过更新)

  3. PAT(端口地址转换,Port address translation):端口地址转换用于允许许多内部用户共享一个 “内部全局” 地址(基于 Socket 映射,而不是 IP 地址,多个内网主机映射到一个公网地址)

# NAT 地址类型

  1. Inside Local address(内部本地地址):内网 IP 地址

  2. Inside Global address(内部全局地址): 注册 IP 地址,对外部展示的内部地址

  3. Outside Global address(外部全局地址):外部机器的地址

image.png

内部主机发送报文给网关,网关根据 NAT Table 进行翻译,转换成内部全局地址,然后进行转发

静态 NAT:直接写好谁变成谁

动态 NAT:

比如分配一个公网地址池为: 203.0.113.1 - 203.0.113.5 。内部设备(如 192.168.1.10)尝试与公网设备通信时,NAT 会检查其内部本地地址,从地址池中动态分配一个可用的公网地址(比如 203.0.113.2 ),并建立一个临时映射。当通信会话结束或超时,NAT 会释放分配的公网 IP 地址(203.0.113.2),返回到地址池中供其他设备使用。

# PAT

**PAT(端口地址转换,Port address translation),** 也称为 NAT Overload

包含端口号的映射,动态分配

image.png

10.1.1.3:1723 映射到 198.168.2.2:1492 .

# PAT 与其他 NAT 类型的对比

特性静态 NAT动态 NATPAT(端口地址转换)
地址分配方式固定的 1:1 映射动态从公网地址池分配共享公网地址,动态分配端口
公网 IP 使用效率较高最高
端口映射利用端口号区分流量
适用场景需要固定公网 IP 的设备(如服务器)。内部设备访问公网,公网 IP 数量充足时。大量设备访问公网,公网 IP 地址稀缺时。
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

北沐清 微信支付

微信支付

北沐清 支付宝

支付宝