计算机网络系统学习精华总结(三):传输层——2(TCP三次握手、四次挥手)

       (1) TCP协议的拥塞控制:流量控制考虑点对点的通信量的控制,而拥塞控制考虑的是整个网络,是全局性的控制。TCP的拥塞控制是慢启动算法和拥塞避免算法相互配合产生的结果。

        慢启动算法:1)从小到大逐渐增加发送数据量;2)每收到一个报文确认,发送量翻倍;比如1,2,4,8,16,32......M(慢启动阈值)。
        拥塞避免算法:1)来维护一个拥塞窗口的变量;2)只要网络不拥塞,就试探着将拥塞窗口调大。是在达到慢启动阈值之后开始工作的,比如1,2,4,8,16,32......M(慢启动阈值),M+1,M+2,M+3......       前面是慢启动算法,达到慢启动阈值后,拥塞避免算法开始工作。

       (2) TCP连接的三次握手(连接建立过程)

       需要用到的标志位:SYN——同步位,为1时表示请求连接报文(发送方请求连接,接收方确认连接);ACK——确认位,为1时确认号生效;FIN——终止位,FIN为1时,表示释放连接。

计算机网络系统学习精华总结(三):传输层——2(TCP三次握手、四次挥手)

        首先,发送方发送请求报文(SYN=1,序号seq=x),接收方监听到该报文并回应(SYN=1,序号seq=y和确认号ack=x+1) ,发送方确认连接(ACK=1,序号seq=x+1,确认号ack=y+1)。为什么需要三次握手,两次行不行?三次握手是为了避免已经失效的连接请求报文又重新传送到接收方,引起错误。

      (3)TCP断开连接(4次挥手)

        数据传输完成后,释放连接需要经过四次挥手过程:

计算机网络系统学习精华总结(三):传输层——2(TCP三次握手、四次挥手)

       挥手过程:发送方发送释放连接请求(FIN=1,seq=u),接收方接收后确认(ACK=1,seq=v,ack=u+1), 此时可能服务端还有消息未发送完成,因此此时处于关闭等待期间,待消息发送完成后,发送确认释放消息(FIN=1,ACK=1,seq=w,ack=u+1),发送方接收该消息后,开启等待计时器(主动释放这方不立即进入关闭状态,计时期间不释放端口)。

       等待计时器设置时间一般为2MSL(2倍的最长报文段时间)的原因:1)最后一个报文还没有确认(第四次挥手报文),确保第四次挥手的ACK可以达到接收方;2)2MSL时间内没有收到,则接收方会重发,重新进行第三次挥手(接收方认为第三次挥手的信息没有被发送方接收到);3)确保当前的报文都过期了。

       (4)套接字与套接字编程

        网络通信中,使用端口(port)来标记不同的网络进程,用16bits表示(0-65535),用IP地址来标记一台主机,那么IP+端口号便可以标识一台主机中的某一个网络进程。{IP:端口}即为一个套接字(Socket),表示TCP连接的一端,通过套接字编程可以进行数据发送和接收。TCP连接由两个套接字组成:

        服务端:创建套接字(socket)——绑定套接字(bind)——监听套接字(listen)———接收处理消息;

        客户端:创建套接字(socket)——连接套接字(connect)——发送消息;

        单机通信采用域套接字方法;多机器,跨网络采用网络套接字编程(走协议栈)

         最后介绍下保活定时器:为了保活TCP连接而设计的,保活定时器可以防止TCP连接的两端出现长时间的空闲,当一方出现状态变化或者故障时,另一方没有察觉的情况。服务器端一般会设置一个保活计时器,每次收到对方的数据则重置这个定时器,如果定时器超时,服务端则发送探测报文段,探测客户端是否在线,如果没有收到响应的话则认为客户端已经断开连接了,因此服务端也会终止这个链接。(下期发布socket套接字编程的实现代码,了解socket套接字编程,结合本章内容更能加深印象)