fix ch05 typo & update exercise solution

This commit is contained in:
LiUzHiAn
2021-09-17 15:14:12 +08:00
parent 738fa5100e
commit 1983a6eaed

View File

@@ -114,9 +114,9 @@ gcc op_server.c -o opserver
#### 5.2.1 TCP 套接字中的 I/O 缓冲
TCP 套接字的数据收发无边界。服务器即使调用 1 次 write 函数传输 40 字节的数据,客户端也有可能通过 4 次 read 函数调用每次读取 10 字节。但此处也有一些问,服务器一次性传输了 40 字节,而客户端竟然可以缓慢的分批接受。客户端接受 10 字节后,剩下的 30 字节在何处等候呢?
TCP 套接字的数据收发无边界。服务器即使调用 1 次 write 函数传输 40 字节的数据,客户端也有可能通过 4 次 read 函数调用每次读取 10 字节。但此处也有一些问,服务器一次性传输了 40 字节,而客户端竟然可以缓慢的分批接受。客户端接受 10 字节后,剩下的 30 字节在何处等候呢?
实际上write 函数调用后并非立即传输数据, read 函数调用后也并非马上接收数据。如图所示write 函数滴啊用瞬间数据将移至输出缓冲read 函数调用瞬间,从输入缓冲读取数据。
实际上write 函数调用后并非立即传输数据, read 函数调用后也并非马上接收数据。如图所示write 函数用瞬间数据将移至输出缓冲read 函数调用瞬间,从输入缓冲读取数据。
![](https://i.loli.net/2019/01/16/5c3ea41cd93c6.png)
@@ -229,7 +229,9 @@ TCP 套接字的结束过程也非常优雅。如果对方还有数据需要传
1. **请说明 TCP 套接字连接设置的三次握手过程。尤其是 3 次数据交换过程每次收发的数据内容。**
答:三次握手主要分为①与对方套接字建立连接②与对方套接字进行数据交换③断开与对方套接字的连接。每次收发的数据内容主要有①由主机1给主机2发送初始的SEQ首次连接请求是关键字是SYN表示收发数据前同步传输的消息。②主机2收到报文以后给主机 1 传递信息用一个新的SEQ表示自己的序号然后ACK代表已经接受到主机1的消息希望接受下一个消息③主机1收到主机2的确认以后还需要给主机2给出确认此时再发送一次SEQ和ACK。
答:TCP套接字的生命周期主要分为3个部分: ①与对方套接字建立连接 ②与对方套接字进行数据交换 ③断开与对方套接字的连接。
其中,在第一步建立连接的阶段,又可细分为3个步骤(即`三次握手`)①由主机1给主机2发送初始的SEQ首次连接请求是关键字是SYN表示收发数据前同步传输的消息,此时报文的ACK一般为空。②主机2收到报文以后给主机 1 传递信息用一个新的SEQ表示自己的序号然后ACK代表已经接受到主机1的消息希望接受下一个消息③主机1收到主机2的确认以后还需要给主机2给出确认此时再发送一次SEQ和ACK。
2. **TCP 是可靠的数据传输协议,但在通过网络通信的过程中可能丢失数据。请通过 ACK 和 SEQ 说明 TCP 通过和何种机制保证丢失数据的可靠传输。**