考点七:一个例子结束传输层的学习
前面学习了传输层的知识,下面我们通过一个例子来贯穿一下。假设主机A是客户机, IP地址是192.168.1.102,该机上运行着微信和http两个进程,对应的端口号分别是2001和1000;主机B是服务器,IP地址是192.168.1.101,该机上运行着微信和http两个进程,对应的端口号分别是2001和80;主机A要请求主机B上的网页,如图5-33所示。首先主机A发起TCP连接,通过源端口号和目的端口号可以知道要进行http之间的通信(这个是通过配置或者DNS来确定的)。图5-33中①②③是TCP连接的“三次握手”,其中①的源IP是客户机A,对应的源端口号是1000,目的端口号是80,数据的序号是100,对应的SYN=1,ACK=0;②的源IP是服务器B,接收连接请求,源端口号是80,目的端口号是1000,seq=100,ack=101,对应的SYN=1,ACK=1;③的源IP是客户机A,对应的源端口号是1000,目的端口号是80,seq=101,ack=101,对应的SYN=0,ACK=1;到此客户机和服务器之间的连接建立起来了。我们可以看到,客户机A和客户机B的数据序号是一样的,注意,TCP是一个全双工的连接,这两个方向的序号没有关系。
图5-33 传输层的功能
之后开始发送数据,④的源IP是客户机A,对应的源端口号是1000,目的端口号是80,数据的序号是101,数据长度是100,ack=101,ACK=1;⑤的源IP是服务器B,对应的源端口号是80,目的端口号是1000,数据的序号是101,数据长度是50,ack=201,ACK=1;⑥的源IP是客户机A,对应的源端口号是1000,目的端口号是80,数据的序号是201,数据长度是100,ack=151,ACK=1;但是这个数据丢失了。图5-33中⑦的源IP是客户机A,对应的源端口号是1000,目的端口号是80,数据的序号是301,数据长度是100,ack=151,ACK=1;⑧的源IP是服务器B,对应的源端口号是80,目的端口号是1000,数据的序号是151,数据长度是50,ack=401,ACK=1;⑨此时数据⑥的计时器到了,但是没有收到接收方的确认信息,于是重新发送数据⑥重传的数据,源IP是客户机A,对应的源端口号是1000,目的端口号是80,数据的序号是201,数据长度是100,ack=201,ACK=1。
此外,当网络中出现数据错误时,TCP可以进行数据校验,当发现数据有错误时,会丢弃该数据,回传一个错误信息。
如果网络出现拥塞,将使用拥塞控制机制进行拥塞控制。具体来说,就是用慢开始算法、拥塞避免算法、快恢复算法和快重传算法。
当数据传输结束后,TCP协议采用“四次挥手”结束TCP连接,断开连接,数据传输结束。