计算机网络——TCP协议

一、运输层协议

TCP/IP运输层的两个主要协议都是互联网的正式标准:

  • 用户数据报协议UDP:无连接的,使用最大努力交付,面向报文,没有拥塞控制,支持一对一、一对多、多对多交互通信。
  • 传输控制协议TCP:面向连接的,提供可靠交付的,全双工通信,面向字节流。

UDP:速度快,比TCP稍安全。缺点是不可靠,不稳定。
使用UDP的应用层协议:DNS,RIP(路由信息协议),DHCP(动态主机配置协议),NFS(网络文件系统)等。

TCP:可靠稳定,传输数据之前必须建立连接,数据传输结束后要释放连接。缺点是效率低,占用系统资源高。
使用TCP的应用层协议:SMTP(简单邮件传送协议),HTTP(超文本传送协议),FTP(文件传送协议)等。

二、TCP报文段

TCP虽然是面向字节流的 ,但TCP传送的数据单元是报文段。报文段分为首部和数据两部分。

TCP报文段首部格式如下图,前20字节是固定的,后有4n字节可变选项。

图中重要字段解释:

  • 序号(seq):TCP传送的字节流中的每一个字节都按顺序编号。
  • 确认号(ack):期望收到对方下一个报文段的第一个数据字节的序号。
  • 数据偏移:指出报文段数据起始处距离报文段起始处的偏移量。实际上指出报文段首部的长度。
  • 六个控制位:紧急URG(紧急数据需尽快发送),确认ACK(连接建立后确认号需置为1),推送PSH(接收方尽快交付),复位RST(连接出现严重错误,需释放重连),同步SYN(同步序号,表明连接请求或连接接受报文),终止FIN(释放连接,表明数据发放完毕,要求释放)。
  • 窗口:发送报文段的一方的接收窗口目前可接受数据量大小(单位:字节)。

三、流量控制与拥塞控制

TCP的滑动窗口已字节为单位,通过滑动窗口实现流量控制。

拥塞控制和流量控制的区别:拥塞控制是防止过多的数据注入网络,使网络中的路由器或链路不致过载。拥塞控制是一个全局的过程。而流量控制是指点对点通行量的控制,是端到端的问题(接收端控制发送端),流量控制是控制发送方的发送速率,让接收方来得及接收。

TCP拥塞控制的算法:慢开始,拥塞避免,快重传,快恢复。

四、TCP连接的建立与释放

TCP是面向连接的协议。运输连接三个阶段:连接建立,数据运输,连接释放。

连接建立

TCP连接的建立采用客户服务器方式。建立连接的过程叫做握手,握手需要在客户和服务器之间交换三个TCP报文段。

  • 第一次:客户端向服务器端发送连接请求报文,同步位SYN=1,初始序号seq=x。TCP规定SYN=1的报文段不能携带数据,但要消耗一个序号。A->SYN-SET。
  • 第二次:服务器端同意建立连接,确认报文段中SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y。B->SYN-RCVD。
  • 第三次:客户端确认,确认报文段中ACK=1,确认号ack=y+1,自己的序号seq=x+1。A->ESTABLISHED。

上述连接建立过程称为三报文握手。图解如下:

问:为什么第三次客户端需要发送确认呢?

答:为了防止已失效的连接请求报文段传送到服务器端,产生错误。简单来讲,客户端发送的连接请求报文段因网络原因滞留,客户端认为其已失效,但其之后又到达服务器端,服务器响应发送确认报文段,但客户端并不会理睬,导致服务器端资源浪费。

释放连接

通信结束时,双方都可以释放连接。

  • 第一次:A向B发出连接释放报文段,FIN=1,序号seq=u。A->FIN-WAIT-1。
  • 第二次:B收到连接释放报文段后发出确认,ACK=1,ack=u+1,其序号seq=v。B->CLOSE-WAIT。
    (此时从A到B的方向的连接释放完毕,TCP连接出于半关闭状态,B还可向A发送数据)
  • 第三次:B向A发出释放报文段,FIN=1,序号seq=w,注意其ACK=1,ack=u+1。B->LAST-ACK。
  • 第四次:A收到连接释放报文段后发出确认,ACK=1,ack=w+1。A->TIME-WAIT。

注意,此时TCP连接还没有立即释放,必须经过时间等待计时器设置的时间 2*MSL 后,A进入CLOSE状态。当A撤销相应的传输控制块TCB后,TCP连接释放完毕。

MSL:最长报文段寿命。

连接释放“四次挥手”,其过程图解如下:

问:为什么三次握手后需要等待 2*MSL 时间?

答:原因一:保证A发送的确认报文段能够到正确达B,若出现问题,B超时重传连接释放报文段(第三步),若A立即进入CLOSE状态,无法收到重传的报文段,B无法正常进入CLOSE状态。原因二:防止“已失效的连接请求报文段”出现在本连接中,经过 2*MSL 后可以使本连接持续的时间内所产生的报文段从网络中消失(到达目的地),从而不影响下一次连接。

五、建立连接与释放连接简单记法

连接建立:

A:喂,你听得到吗?
B:我听得到。你听得到我吗?
A:我听得到。
(建立连接,开始聊天)

释放连接:

A:我说完了。
B:好的。
(A停止说,B继续说)
B:我也说完了。
A:好的。

问:为什么建立连接只需要三次握手,释放连接却需要四次挥手呢?

答:建立连接时,服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,收到FIN连接释放报文段仅仅表示对方不再发送数据了,只发送ACK确认报文段,可能一段时间后才发送FIN连接释放报文段。即ACK与FIN报文段分开发送。

六、利用TCP网络攻击

DoS攻击、DDoS攻击和DRDoS攻击。DoS是Denial of Service的简写,拒绝服务,而DDoS就是Distributed Denial of Service的简写,分布式拒绝服务,而DRDoS就是Distributed Reflection Denial of Service的简写,这是分布反射式拒绝服务。

详细介绍见:计算机网络-利用TCP进行网络攻击

posted @ 2018-09-22 00:44  AlvinZH  阅读(844)  评论(0)    收藏  举报