TCP/IP体系简介
TCP/IP体系结构是指能够在多个不同网络间实现的协议簇。
TCP/IP 协议包括两部分:传输控制协议和网际协议。
结构类型:
分层体系,由下至上分别是网络接口层、网际层、传输层和应用层(四层分法)
TCP/IP体系中的运输层协议
TCP/IP运输层的两个主要协议都是互联网的正式标准,即:
- 用户数据报协议UDP。
- 传输控制协议TCP。
按照OSI的术语,两个对等运输实体在通信时传送的数据单位叫做运输协议数据单元TPDU,但在TCP/IP体系中,则根据所用的协议是TCP还是UDP分别称之为TCP报文段或者UDP用户数据报。
TCP相比于UDP更加可靠。
传输控制协议TCP最主要的特点:
- 面向连接的。
- 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。
- TCP提供可靠交付的服务。即传送的数据无差错、不丢失、不重复且按序到达。
- TCP提供全双工通信。
- TCP是面向字节流的。
TCP中的流指的是流入到进程或者从进程流出的字节序列。
面向字节流的含义是:
虽然应用程序和TCP的交互是一次一个数据块(大小不等),但是TCP把应用程序交下来的数据仅仅看成一连串无结构的字节流。TCP并不知道所传送的字节流的含义。TCP不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的意义。
用户数据报协议UDP的主要特点:
- UDP是无连接的。
- UDP使用尽最大努力交付。
- UDP没有拥塞控制。
- UDP支持一对一,一对多,多对一,多对多的交互通信。
- UDP首部开销小。
TCP/IP的三次握手:
- 客户端向服务端发起建立连接请求,客户端会随机生成一个起始序列号x,客户端向服务端发送的字段中包含标志位SYN=1,序列号seq=x。第一次握手前客户端的状态为CLOSE,第一次握手后客户端的状态为SYN-SENT。此时服务端的状态为LISTEN。
- 服务端在收到客户端发来的报文后,会随机生成一个服务端的起始序列号y,然后给客户端回复一段报文,其中包括标志位SYN=1,ACK=1,序列号seq=y,确认号ack=x+1。第二次握手前服务端的状态为LISTEN,第二次握手后服务端的状态为SYN-RCVD,此时客户端的状态为SYN-SENT。(其中SYN=1表示要和客户端建立一个连接,ACK=1表示确认序号有效)
- 客户端收到服务端发来的报文后,会再向服务端发送报文,其中包含标志位ACK=1,序列号seq=x+1,确认号ack=y+1。第三次握手前客户端的状态为SYN-SENT,第三次握手后客户端和服务端的状态都为ESTABLISHED。此时连接建立完成。
第三次握手主要为了防止已失效的连接请求报文段突然又传输到了服务端,导致产生问题。
四次挥手:
- A的应用进程先向其TCP发出连接释放报文段(FIN=1,seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN-WAIT-1(终止等待1)状态,等待B的确认。
- B收到连接释放报文段后即发出确认报文段(ACK=1,ack=u+1,seq=v),B进入CLOSE-WAIT(关闭等待)状态,此时的TCP处于半关闭状态,A到B的连接释放。
- A收到B的确认后,进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。
- B发送完数据,就会发出连接释放报文段(FIN=1,ACK=1,seq=w,ack=u+1),B进入LAST-ACK(最后确认)状态,等待A的确认。
- A收到B的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),A进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL(最大报文段生存时间)后,A才进入CLOSED状态。B收到A发出的确认报文段后关闭连接,若没收到A发出的确认报文段,B就会重传连接释放报文段。
通俗点讲: 主机1告诉主机2,我没有数据要发送了,希望断开连接。主机2接到请求后说,同意断开。主机2告诉主机1可以关闭连接了。主机1接到可以关闭的指令后,关闭连接,四次挥手完成
第四次挥手等待一会(2MSL)的原因是:
1. 保证客户端发送的最后一个ACK报文段能够到达服务端。
2. 防止已失效的连接请求报文段出现在本连接中。