- Lecture02 Part1:7层数据流与格式
- Lecture02 Part2:Sockets(概念+API+TCP/UDP流程)
- Lecture02 Part3:Socket Examples(hello/ACK/终止符0x1b案例)
- Tutorial02:复习点与练习说明
Part 1:Data flow & format in OSI 7-layer(七层数据流与数据格式)
1) 核心概念 ①:每层“包装”一次(Encapsulation/Decapsulation)
中文(通俗版)
网络传数据像“快递打包”:
- 你写的内容是payload(真正数据)
- 经过每一层都会加一层“包装/头部header”(有时还有尾部trailer)
- 到对方后再一层层拆包装(decapsulation),最后把原始数据交给应用
English (plain)
Networking is like shipping a package: each layerencapsulatesdata by adding its own header (and sometimes trailer). The receiverdecapsulateslayer by layer to recover the original payload.
好记口诀:
发送:层层加壳(封装)
接收:层层剥壳(解封)
2) 核心概念 ②:每层数据单位名字(PDU)会变
你文件里给了非常标准的表(很爱考):
| OSI层 | 中文理解 | PDU 名称(考试常考) | English |
|---|---|---|---|
| L7 应用层 / L6 表示层 / L5 会话层 | 应用数据 | Payload / Data | Data |
| L4 传输层 | 端到端传输 | Segment(TCP) / Datagram(UDP) | Segment/Datagram |
| L3 网络层 | 跨网络路由 | Packet | Packet |
| L2 数据链路层 | 同一链路传输 | Frame | Frame |
| L1 物理层 | 发送比特 | Bits | Bits |
考试点:经常会出“给你一个名词,让你说是哪个层”:Frame=2层,Packet=3层,TCP segment=4层,Bits=1层。
3) 核心概念 ③:OSI vs TCP/IP(7层 vs 4层)
文件里明确对照:OSI 7层(App/Pres/Session/Transport/Network/DataLink/Physical)
TCP/IP 4层(Application/Transport/Internetwork/Network Access)
中文(通俗版):
TCP/IP 把 OSI 的 5/6/7 合并成 Application,把 1/2 合并成 Network Access。
English:TCP/IP collapses OSI layers: (5-7)→Application, (1-2)→Network Access.
4) 易错点:ARP 属于哪层?
文件里特别写了:ARP 是二层协议,但用三层 IP 地址
一句话记忆:
ARP = “用IP问MAC”,所以逻辑上像三层,位置上在二层跑。
Part 1 考试怎么出(高频)
- 画图/描述:封装与解封的过程(每层加什么)
- PDU匹配题:frame/packet/segment/bits 分别在哪层
- OSI vs TCP/IP 对照填空题
- ARP 属于哪层?为什么会用到IP?(二层协议、用三层地址)
Part 1 企业怎么用
- 故障定位(troubleshooting):你看到“丢包/重传/CRC错误/ARP失败”就能迅速判断大概在哪层出问题。
- 性能优化:把“应用慢”拆成 L7应用、L4重传、L3路由绕路、L2冲突/错误、L1链路质量等原因。
Part 2:Sockets(Socket概念 + API + TCP/UDP流程)
1) Sockets 是什么?为什么要用?
中文(通俗版)
写网络通信系统如果你从 L1 写到 L7:编码/调制/纠错/IP/ARP/DNS/TCP/UDP…会累死。
Socket 就像“操作系统提供的网络工具箱”,你用 API 就能直接使用成熟协议栈。
English
Sockets are an OS-providedtoolbox/APIso you don’t implement everything from layer 1 to 7. You reuse tested protocol stacks (TCP/IP, UDP, etc.).
2) Socket 的关键分类(很爱考)
文件里讲得很清晰:
- Connection-based vs Connectionless:先建连接(TCP)还是每个包都带目的地(UDP)
- Stream vs Packet/Message:连续字节流(TCP)还是有边界的数据报(UDP)
- Reliable vs Unreliable:可靠传输(TCP) vs 可能丢/乱序(UDP)
一眼记忆:
TCP = 连接 + 流 + 可靠
UDP = 无连接 + 报文 + 不可靠
3) Socket 三要素:domain / type / protocol
中文:Socket 用 domain、type、protocol 来描述。常见:
- Domain:AF_INET(IP+port),AF_UNIX(本机路径)
- Type:SOCK_STREAM(TCP),SOCK_DGRAM(UDP)
- protocol:通常填0,让type决定
English: sockets are characterized by domain, type, protocol (e.g., AF_INET + SOCK_STREAM + TCP).
4) API 心智模型:打电话类比(老师给的类比,必背)
文件里直接用“买手机/拿号码/接电话”等类比,非常适合考试用:
| API | 中文理解 | 英文类比 |
|---|---|---|
| socket() | 买手机(创建socket,返回fd) | buy a phone |
| bind() | 绑定号码(绑定IP+port) | get a number |
| listen() | 开启排队等待(允许多少排队) | call waiting |
| accept() | 接电话(服务器接入连接) | answer |
| connect() | 拨号给服务器 | call |
| send/recv | 说/听(传数据) | speak/listen |
| shutdown() | 半关闭/结束通话某个方向 | partial close |
| close() | 彻底挂断释放资源 | hang up |
5) TCP 服务器/客户端流程(最最爱考)
TCP Server(顺序背):socket → bind → listen → accept → send/recv(循环)→ shutdown → close
TCP Client:socket → connect → send/recv(循环)→ shutdown → close
English
Server: socket→bind→listen→accept→send/recv→shutdown→close
Client: socket→connect→send/recv→shutdown→close
6) accept 三种服务器风格(高频对比题)
文件给了三种:
- Iterative server:一次只服务一个连接(简单但低性能)
- Forking server:accept后fork子进程处理(能用多核但共享状态难)
- Concurrent single server(select):select管理多个socket,减少切换,较复杂但不靠多进程
7) 端口与连接的关键概念(超容易考)
连接用 5-tuple 表示:from IP, from port, protocol, to IP, to port
端口范围:
- 0~1023 通常需要root权限绑定
- 1024~5000 well known(课件这么写)
- 5001~65535 临时端口(ephemeral)
8) 辅助API(名字解析/字节序/地址转换)
文件列了这些(常见填空/解释题):
- gethostname / gethostbyname(DNS name→IP)
- htons/htonl/ntohs/ntohl(主机序↔网络序,大端)
- inet_pton / inet_ntop(字符串IP↔二进制IP)
9) UDP(无连接)流程要点
UDP:socket →(bind可选)→ sendto/recvfrom(循环)→ shutdown → close
并且:UDP socket 也可以 connect(之后用 send/recv),还可能收到 ICMP 异步错误。
Part 2 考试怎么出(高频清单)
- 写出 TCP server/client 的 API 顺序(带解释)
- 区分 TCP vs UDP(connection/stream/reliable)
- accept 三种风格对比优缺点
- 解释 shutdown vs close(partial close vs release resources)
- 解释 5-tuple 为什么能区分连接
- 字节序函数、inet_pton/ntop 是做什么的
Part 2 企业怎么用
- 你做任何网络应用(后端服务、游戏服务器、IoT网关、消息系统)底层都依赖 socket。
- 性能工程:选择迭代/多进程/多路复用(select/epoll)是服务器架构核心决策。
- 可靠性:TCP适合交易/文件;UDP适合实时语音视频/游戏(但要在应用层补可靠或容错)。
Part 3:Socket Examples(案例:hello/ACK/终止符0x1b)
1) 案例需求(用一句话说清)
中文:服务器周期发“hello”,客户端收到回“ACK”(可带数据),双方打印通信信息;结束时服务器发一个控制字符0x1b(ESC)通知终止,双方关闭并退出。
English: server periodically sends “hello”; client replies with “ACK” (optional data); both print messages; server ends by sending 0x1b (ESC) then both close sockets and exit.
2) 运行顺序的坑(必考小坑)
必须先启动 server,因为 server 在等 accept;你先跑 client 会 connect 报错(没人接)。
3) 测试地址(loopback)
同一台机器测试:IP 用127.0.0.1(loopback)。
(Tutorial 也强调 loopback 用法)
4) 端口与实现要点
示例端口:8886;server 不用指定 IP(bind INADDR_ANY),client 要指定 server IP+port。
Part 3 考试怎么出
- 给你需求,让你写“逻辑流程图/伪代码”:server 先 listen/accept,再循环 send/recv,收到终止标志关闭。
- 问:为什么要先启动 server?(client connect 需要 server accept)
- 问:0x1b 是什么?为什么用它?(ASCII ESC 作为控制命令)
- 问:127.0.0.1 做什么用?(本机回环测试)
Part 3 企业怎么用
这就是“心跳/握手/终止控制”的最小模型:
- hello = 心跳/请求数据
- ACK = 确认/回传
- 终止控制 = 协议状态机结束信号
企业里常见在:设备管理、IoT采集、长连接服务、游戏房间协议等。
Tutorial02 PDF:你在实践里要掌握什么(复习清单)
重点复习点(按Tutorial列的)
- Socket 概念:OS提供的通信端点(endpoint)
- Socket 类型:datagram(UDP)、stream(TCP)、raw sockets(绕过传输层)
- Server API 列表:socket/bind/listen/accept/connect/send/recv/shutdown(电话类比)
- 示例程序行为:127.0.0.1 测试;client 每2秒发随机数,发16次后发“EXIT”;server 收到 EXIT 结束
- 编译运行:gcc 编译,先跑 server 再跑 client
这一讲的“最强速记卡片”(建议你直接背)
中文 8 句背完
- 发送封装:每层加头;接收解封:每层拆头。
- PDU:L2 frame,L3 packet,L4 TCP segment/UDP datagram,L1 bits。
- ARP 在二层跑,但用三层IP找二层MAC。
- Socket = OS提供的网络工具箱/API,不用从L1写到L7。
- TCP server:socket-bind-listen-accept-send/recv-shutdown-close。
- TCP client:socket-connect-send/recv-shutdown-close。
- 连接用5-tuple区分(src/dst IP+port+protocol)。
- 实验:先跑server;本机测试用127.0.0.1;0x1b或EXIT作为终止信号。
English 8-line cheat sheet
- Encapsulation adds headers; decapsulation removes them.
- PDUs: frame(L2), packet(L3), segment/datagram(L4), bits(L1).
- ARP runs at L2 but uses L3 IP to resolve MAC.
- Sockets are OS APIs/toolbox for TCP/IP networking.
- TCP server flow: socket→bind→listen→accept→send/recv→shutdown→close.
- TCP client flow: socket→connect→send/recv→shutdown→close.
- A connection is identified by a 5-tuple.
- Run server first; test with 127.0.0.1; use ESC/EXIT to terminate.