互联网计算系列整理主要内容来自软院 2020 级学长 EagleBear2002 的博客,为博主本人阅读后提炼整理的内容。
内容不算全面,仅推荐大家复习时参考。
# 第四层综述
分割上层应用程序数据。第四层只会在终端设备上有,在中间设备没有
建立端到端(end to end)的运营
完成可靠性检验与流量控制
两个协议:
传输控制协议(TCP,Transmission Control Protocol),是可靠传输
** 面向连接,** 使用确认机制,提供流量控制
重新发送丢失或错误的任何内容
** 用户数据报协议(UDP,User Datagram Protocol)** 将传出邮件分成多个部分,在目标站重新组合消息
无连接,不使用确认,不进行流量控制
直接丢弃错误的报文,而不进行其他操作
# 服务模型
TCP 和 UDP 都使用端口来跟踪(track)同时穿越网络的不同会话(即不同进程)
# 端口分配规范
0~65535 端口
** 低于 255 的端口号(0-255)** 保留给 TCP 和 UDP 公共应用程序使用(端口号 0-255 是 public 的,不可以随意分给其他的进程,如果分发则不符合规范)
0-1023 是熟知端口,有分发的规范,不应当被随意使用
1024-49151 的端口号进行登记使用,有的是应用程序已经的使用端口号,避免冲突
49152-65535 即为短暂端口号,用于和远端通信
基于端口号的不同,进行不同的包的分发
- 常见端口
端口号 | 服务名称 | 描述 |
---|---|---|
0 | Reserved | 保留端口,未指定服务 |
20 | FTP Data | FTP 数据传输端口 |
21 | FTP Control | FTP 控制端口 |
22 | SSH | 安全 Shell,远程登录协议 |
23 | Telnet | Telnet,远程登录协议 |
25 | SMTP | 简单邮件传输协议(邮件发送) |
53 | DNS | 域名系统(DNS) |
67 | DHCP Server | 动态主机配置协议(DHCP)服务器端口 |
68 | DHCP Client | DHCP 客户端端口 |
69 | TFTP | 简单文件传输协议(Trivial FTP) |
80 | HTTP | 超文本传输协议(Web 服务) |
110 | POP3 | 邮局协议版本 3(邮件接收) |
119 | NNTP | 网络新闻传输协议(网络新闻) |
123 | NTP | 网络时间协议(时间同步) |
143 | IMAP | Internet 邮件访问协议(邮件接收) |
161 | SNMP | 简单网络管理协议(设备管理) |
194 | IRC | Internet Relay Chat(聊天协议) |
443 | HTTPS | 安全的 HTTP(加密的 Web 服务) |
445 | Microsoft-DS | 微软目录服务(Windows 文件共享) |
514 | Syslog | 系统日志协议 |
520 | RIP | |
587 | SMTP (Secure) | 加密的 SMTP(邮件发送) |
631 | CUPS | 公共打印系统(打印服务) |
993 | IMAPS | 加密的 IMAP(邮件接收) |
995 | POP3S | 加密的 POP3(邮件接收) |
# Socket 套接字
**Socket(套接字)** 是网络通信的一个抽象概念,它是应用层和传输层之间的接口,用于实现网络数据通信。
套接字表示为 **(IP 地址,端口)**
每个连接都表示为( , ),点对点全双工通道
通讯被认为是以一个 socket 和另一个 socket 之间的连接(Socket API 是一套规范,根据上下文有不同的含义)
TCP 不支持多播和广播
# 传输控制协议 TCP
传输控制协议(TCP,Transmission Control Protocol)
可靠传输
流传输
流量控制:滑动窗口(窗口进行通信,一次数据传输是有上限发的,缓存问题,拥塞问题)
避免拥塞
连接控制
建立连接:三次握手
断开连接:四次握手
# TCP 数据段格式
首部一行共计 4 字节,段首在前,固定首部长度为 20 字节
# 源端口和目的端口
每个端口占用两字节(16bit, 0~2^16-1 端口)
# 序号 seq
序号字段的值指本报文段所发送的数据的第一个字节的序号
# 确认号 ack
确认号字段:占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号
# URG
紧急 URG = 1 时,表明紧急指针字段有效。
告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)
优先放紧急数据,URG = 0 的时候则为不紧急(Ctrl + Z)
# ACK
ACK = 1 时确认号字段有效;ACK = 0 时确认号字段无效
# PSH(PuSH)
接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付,此时将缓存所有部分都传输,而并不是只将这个报文段的信息进行传输。
TCP 在正常条件下并不是立马传输的,首先要缓存满了才发送,其次还有就是要保证网络可信的时候才发送
# RST
ReSeT = 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接
就是重新来过,如果请求方发送的请求,如果应答方不想连接则将 ReSet 置为 1
# SYN
同步 SYN = 1:表示这是一个连接请求或连接接受报文(初始的时候才出现)
# FIN(FINish)
用来释放一个连接。FIN = 1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。(发送方没有传输数据了)
断开连接有四次握手。
# TCP 协议
# 建立可靠连接(三次握手)
图要记住,包括客户端和服务端的状态,传递的参数
图上的 x,y 都是随机数
# 释放连接(四次挥手)
图要记住,包括客户端和服务端的状态,传递的参数
图上的 u, v, w 都是随机数
在完全释放连接前,TIME-WAIT 等待 2 MSL(Maximum Segment Lifetime),记住!
# 为什么必须等待 2 MSL
为了确保 A 发送的最后一个 ACK 可以到达 B
防止出现任何无效的连接请求段:等待 2 MSL 之后,我们可以确保连接上的所有段均已消失
# 用户数据报协议 UDP
用户数据报协议(UDP,User Datagram Protocol)
没有建立连接(避免延时)
简单:发送方,接收方无连接状态
小段标题
没有拥塞控制:UDP 可以按照期望的速度传输
UDP 用于:
RIP:定期发送路由信息(periodically)
DNS:避免延迟建立 TCP 连接(DNS 需要快速找到)
SNMP:拥塞时(congestion),SNMP 必须仍然可运行。在没有拥塞和可靠性控制机制的情况下,UDP 在这种情况下的性能要优于 TCP。(主播和多播,大量信息传输)
其他协议包括 TFTP,DHCP
常用于 ** 流媒体(Stream)多媒体(multimedia)** 应用
容忍损失:无非就是降低帧率
这类应用是速率敏感的应用,而不一定是质量敏感的应用。
# UDP 数据帧格式
UDP 只有 8 个字节的首部,所以 UDP 报文最少是 8 个字节
分别是 ** 源端口、目的端口、长度(包括 header 长度)、校验(data)、Data。** 前面的各占 16 位
校验也要对 data 一并校验,如果出现错误,直接丢弃(TCP 会重新发送)
UDP 直接发送应用层给的报文,不会再自己分片
# TCP 和 UDP 的区别
# TCP
不是立即交给上层校验,而是需要先和对方沟通
缓存满了才统一交付。
# UDP
直接转发报文,保留报文边界
IP 进行划分
应用程序会发送比较合适的 UDP 报文大小进行发送
# 共同点
- 校验是相同的。
# 应用:NAT 与 PAT
NAT(Network Address Translation)网络地址转换
NAT(Network Address Translation),是在 IP 数据包头中将一个地址交换为另一个地址的过程,是网络地址即将用完的解决方案之一
通过路由器上的 NAT Table 双向转换。
# NAT 的类型
静态 NAT:固定的内部地址(internal address)到注册地址(registered address)的映射(一开始就写死)
动态 NAT:映射以先到先得的方式动态进行(不是写死,配一个地址池,通过更新)
PAT(端口地址转换,Port address translation):端口地址转换用于允许许多内部用户共享一个 “内部全局” 地址(基于 Socket 映射,而不是 IP 地址,多个内网主机映射到一个公网地址)
# NAT 地址类型
Inside Local address(内部本地地址):内网 IP 地址
Inside Global address(内部全局地址): 注册 IP 地址,对外部展示的内部地址
Outside Global address(外部全局地址):外部机器的地址
内部主机发送报文给网关,网关根据 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
包含端口号的映射,动态分配
如 10.1.1.3:1723
映射到 198.168.2.2:1492
.
# PAT 与其他 NAT 类型的对比
特性 | 静态 NAT | 动态 NAT | PAT(端口地址转换) |
---|---|---|---|
地址分配方式 | 固定的 1:1 映射 | 动态从公网地址池分配 | 共享公网地址,动态分配端口 |
公网 IP 使用效率 | 低 | 较高 | 最高 |
端口映射 | 无 | 无 | 利用端口号区分流量 |
适用场景 | 需要固定公网 IP 的设备(如服务器)。 | 内部设备访问公网,公网 IP 数量充足时。 | 大量设备访问公网,公网 IP 地址稀缺时。 |