5. 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的
序列号是 seq=u+1,此时,客户端就进入了 TIME-WAIT(时间等待)状态。注意此时
TCP 连接还没有释放,必须经过 2∗∗MSL(最长报文段寿命)的时间后,当客户端撤
销相应的 TCB 后,才进入 CLOSED 状态。
6. 服务器只要收到了客户端发出的确认,立即进入 CLOSED 状态。同样,撤销 TCB 后,
就结束了这次的 TCP 连接。可以看到,服务器结束 TCP 连接的时间要比客户端早一
些。
TCP/IP 中的数据包
每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如
发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为
数据。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据。
网络中传输的数据包由两部分组成:一部分是协议所要用到的首部,另一部分是上一层传过
来的数据。首部的结构由协议的具体规范详细定义。在数据包的首部,明确标明了协议应该
如何读取数据。反过来说,看到首部,也就能够了解该协议必要的信息以及所要处理的数据。
� ① 应用程序处理
首先应用程序会进行编码处理,这些编码相当于 OSI 的表示层功能;
编码转化后,邮件不一定马上被发送出去,这种何时建立通信连接何时发送数据的管理功能,
相当于 OSI 的会话层功能。
� ② TCP 模块的处理
TCP 根据应用的指示,负责建立连接、发送数据以及断开连接。TCP 提供将应用层发来的
数据顺利发送至对端的可靠传输。为了实现这一功能,需要在应用层数据的前端附加一个
TCP 首部。
� ③ IP 模块的处理
IP 将 TCP 传过来的 TCP 首部和 TCP 数据合起来当做自己的数据,并在 TCP 首部的前端
加上自己的 IP 首部。IP 包生成后,参考路由控制表决定接受此 IP 包的路由或主机。
� ④ 网络接口(以太网驱动)的处理
从 IP 传过来的 IP 包对于以太网来说就是数据。给这些数据附加上以太网首部并进行发送
处理,生成的以太网数据包将通过物理层传输给接收端。
� ⑤ 网络接口(以太网驱动)的处理
主机收到以太网包后,首先从以太网包首部找到 MAC 地址判断是否为发送给自己的包,若
不是则丢弃数据。
如果是发送给自己的包,则从以太网包首部中的类型确定数据类型,再传给相应的模块,如
IP、ARP 等。这里的例子则是 IP 。
� ⑥ IP 模块的处理
IP 模块接收到 数据后也做类似的处理。从包首部中判断此 IP 地址是否与自己的 IP 地址
匹配,如果匹配则根据首部的协议类型将数据发送给对应的模块,如 TCP、UDP。这里的例
子则是 TCP。
另外吗,对于有路由器的情况,接收端地址往往不是自己的地址,此时,需要借助路由控制
表,在调查应该送往的主机或路由器之后再进行转发数据。
� ⑦ TCP 模块的处理
在 TCP 模块中,首先会计算一下校验和,判断数据是否被破坏。然后检查是否在按照序号