CS144

2026/06/17

lab0

webget

用代码实现前面文档里的

main(argc, argv)
  |
  v
get_URL(host, path)
  |
  +-- Address(host, "http")
  |     把主机名和服务名解析成 IP + port 80
  |
  +-- TCPSocket()
  |     创建一个 TCP socket
  |
  +-- socket.connect(address)
  |     让内核完成 TCP 三次握手
  |
  +-- socket.write(http_request)
  |     把 HTTP 请求写进 TCP 字节流
  |
  +-- while (!socket.eof())
          socket.read(response)
          cout << response

tcp Transmission Control Protocol(传输控制协议) 在 IP 的基础上提供可靠的、有序的、面向连接的数据传输

ip Internet Protocol(网际协议) 负责将数据包(datagram)从源地址发送到目标地址

应用数据 “Hello” ↓ TCP层:加上 TCP Header → 形成 TCP Segment ↓ IP层:再加上 IP Header → 形成 IP Datagram ↓ 链路层:最后加上 Ethernet Header → 形成 Ethernet Frame ↓ 网络传输

byte_stream

为上层应用提供了一个符合直觉的、干净的“可靠字节流”接口。它屏蔽了底层网络的所有复杂性,是整个 TCP 实现最终交付给应用程序的核心成果

byte_stream本质是一块缓冲区,允许应用读取/写入数据

需要实现以下功能 1.is_closed 是否已经写入/读取完毕

2.push 向byte_stream写入数据

3.close 关闭byte_stream(数据全部写入)

4.available_capacity byte_stream剩余可以写入的容量

5.bytes_pushed 累计写入的字节数

6.is_finished 是否已经结束(数据全部读取)

7.bytes_popped 累计删除的数据

8.peek 从byte_stream读取数据

9.pop 删除byte_stream中的数据

10.bytes_buffered 当前byte_stream中的数据数量

这里有需要注意,peek不要求一次全部读出来

lab1