美文网首页
计算机网络:TCP

计算机网络:TCP

作者: devmao | 来源:发表于2021-01-20 14:57 被阅读0次

相关定义

TCP/IP: 不是只有TCP + IP这两种协议,而是协议栈,是因特网的主要协议(有IP TCP UDP HTTP FTP SMTP等)的统称;
socket:一种操作系统提供的进程间通信机制,由IP地址和port端口号组成,成对出现,形式如:IP1+port1 <==> IP2+port2;
TCP:面向连接的可靠的传输协议

三次握手

三次握手示意图

第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

四次挥手

四次挥手示意图

1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。

6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

长/短连接

短连接,一次数据传输完成,立即关闭连接(client、server均可发起close)。常见应用场景:web网站的http服务。
长连接,一次数据传输完成,连接不关闭,后续由client发起close关闭。常见应用场景:点对点通信。

相关问题

1.TCP建立连接为什么要三次握手?

信道是不可靠的,而TCP要建立可靠的连接发送可靠的数据,也就是数据传输是需要可靠的。在这个时候三次握手是一个理论上的最小值,并不是说是tcp协议要求的,而是为了满足在不可靠的信道上传输可靠的数据所要求的。
我们再来考虑,如果不是三次握手会出现什么情况呢:假设有A和B两端要进行通信。

  1. 第一次:首先A发送一个(SYN)到B,意思是A要和B建立连接进行通信;
    如果是只有一次握手的话,这样肯定是不行的,A压根都不知道B是不是收到了这个请求。
  2. 第二次:B收到A要建立连接的请求之后,发送一个确认(SYN+ACK)给A,意思是收到A的消息了,B这里也是通的,表示可以建立连接;
    如果只有两次通信的话,这时候B不确定A是否收到了确认消息,有可能这个确认消息由于某些原因丢了。
  3. 第三次:A如果收到了B的确认消息之后,再发出一个确认(ACK)消息,意思是告诉B,这边是通的,然后A和B就可以建立连接相互通信了;
    这个时候经过了三次握手,A和B双方确认了两边都是通的,可以相互通信了,已经可以建立一个可靠的连接,并且可以相互发送数据。
  4. 第四次:这个时候已经不需要B再发送一个确认消息了,两边已经通过前三次建立了一个可靠的连接,如果再发送第四次确认消息的话,就浪费资源了。
    如果第二个报文段B发出的(SYN+ACK)分别发送的话,也是可以理解为四次,但是被优化了,一起发送了。

三次握手过程特别像我们日常的接打陌生电话过程,A要和B进行通话,A主动拨打了B的电话(第一次握手),B收到来电,接通并询问“你好,哪位?”(第二次握手),A听到B的确认回复“我是某某某”(第三次握手)。至此之后才开始稳定的谈话(数据传输)

2. 如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

资料

tcp建立连接为什么需要三次握手

相关文章

  • TCP连接的建立学习记录一

    关于tcp连接建立这一部分我参考了《计算机网络 自顶向下方法》,《图解TCP IP》,《计算机网络》,《TCP ...

  • Golang面试之TCP/IP协议

    引用 关于TCP/IP的面试题 计算机网络——OSI、TCP/IP协议族详解 计算机网络【七】:可靠传输的实现 T...

  • 2018-10-12 Day34 - Linux02

    计算机网络分层架构模型Internet --- TCP/IP协议族TCP --- Transfer Control...

  • 50本互联网java技术书—倾心整理「收藏」

    一.计算机网络系列: 1.《TCP/IP卷一》 2.《计算机网络:自顶向下》 3.《图解HTTP和图解TCP/IP...

  • TCP三次握手原理

    一、TCP协议TCP(Transmission Control Protoco)协议属于计算机网络体系中的运输层。...

  • TCP/IP 卷Ⅰ协议-绪论

    TCP/IP 概述 简介:本系列文章,主要对TCP/IP协议族进行概述,其实对于整个计算机网络来说,TCP/IP只...

  • 计算机基础知识——计算机网络

    2018.11.06 计算机网络(TCP/IP) (1) 建立TCP服务器的各个系统调用 建立一个TCP服务器需要...

  • 计算机网络

    OSI 七层模型 OSI七层网络模型TCP/IP四层概念模型 图解计算机网络 TCP/UDP TCP(Transm...

  • 计算机网络

    TCP 的那些事儿(上) TCP 的那些事儿(下) 计算机网络之面试常考 Carson_Ho总结

  • 《TCP/IP 详解》

    简介 TCP/IP已经是计算机网络的事实上的标准。在TCP/IP的著作中,Stevens的三卷《TCP/IP 详解...

网友评论

      本文标题:计算机网络:TCP

      本文链接:https://www.haomeiwen.com/subject/kpaqzktx.html