TCP/IP重点知识概览

也许本文很难对TCP/IP知识有一个大而全的解读,但是可以让你对TCP/IP有一个大致的认识。

TCP和UDP处在同一层—运输层,但是TCP和UDP最不同的地方是,TCP提供了一种可靠的数据传输服务,TCP是面向连接的,也就是说,利用TCP通信的两台主机首先要经历一个“拨打电话”的过程,等到通信准备结束才开始传输数据,最后结束通话。所以TCP要比UDP可靠的多,UDP是把数据直接发出去,而不管对方是不是在收信,就算是UDP无法送达,也不会产生ICMP差错报文。

TCP保持可靠性的工作原理

  • 应用数据被分割成TCP认为合适的数据块,这和UDP完全不同,应用数据产生的数据报长度保持不变。由TCP传递给IP的信息单位成为报文段或段。
  • TCP发出了报文之后,设置一个定时器开始等待回应。如果不能及时收到这个报文段,TCP会重发这一个报文段。
  • TCP会保持它首部和数据的检验和,这是一个端到端的检验和,如果收到数据检验和有变化,它会丢弃这个报文段,并且不发送确认。
  • TCP接收到了连接另一端的数据之后,会发送一个确认。
  • 不能保证IP传送的数据包是按照顺序到达的(失序),所以TCP的报文段也有可能失序。因此TCP在将数据递交给应用层时会对报文先进行排序。
  • TCP还能提供流量控制,TCP连接的每一方都会有一个固定大小的缓冲区。如果一方的溢出,那么
    关键字是什么?其实就是超时重发
    最可靠的方式不是就是得到对方的确认,如果得不到对方的确认,那么就重新发送消息,直到得到对方确认。

TCP和UDP相同,报文开头都有发送端和接收端的端口号,但是TCP包含了确认所需要的所有信息。
我们重新整理一下过程

  1. 双方建立连接
  2. 发送方给接收方TCP数据报,然后等待对方的确认TCP数据报,如果没有就重发,如果有,就发送下一个数据报。
  3. 接收方等待发送方的数据报,如果检验无误,就发送ACK(确认帧)数据报,并且等待下一个TCP数据报。一直到接收到FIN(发送完成数据报)
  4. 终止连接

    TCP三次握手建立连接

    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

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

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据.

其实也可以看得到,第二次(服务器向客户端)是为了确认第一次,第三次是为了确认第二次。

为什么不是两次?
如果是两次:

C发送请求,S应答并分配资源
若S的应答没有到达C端,C认为连接未建立,而S认为建立了
S会在一段时间内保留分配的资源
如果大量C这样请求,S会崩溃

版权声明:本文为博主原创文章,转载请标明出处。

posted @ 2015-09-26 12:38  Fridge  阅读(201)  评论(0编辑  收藏  举报