与TCP的第一次握手
通信的学习是从写服务器开始的,之后加上客户端,然后实现两个之间的消息发送,这其实是基于TCP/IP的协议的通信,跟之前看到的UDP协议不同,是一种面向连接,需要通信双方建立连接并确认后才能实现数据的传输。这样的话,TCP的数据传输比UDP更安全可靠。
面向连接的传输是以两个主机间的握手开始的,一个主机发送到另一个主机间的握手有三个作用:
1.确保目的主机可用;
2.确保目的主机正在侦听目标端口号;
3.通知给目的主机发出者的序号,使双方在传输数据时可以进行跟踪。
TCP/IP是在通信双方建立连接后,把要传输的数据转换为字节流,但是字节流不能分辨出消息部分和非消息部分,所以接收方在接收到字节流后,需要按照TCP/IP协议把字节流再翻译成为消息。
在客户端和服务器之间的数据传输前,需要“三次握手”来实现。
1.建立连接时,客户机A向服务器B发送SYN包(SYN=j),并进入到SYN_SEND(请求连接)状态,等待服务器B确认;
2.服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态;
3.客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),客户端A和服务器B进入ESTABLISHED(连接成功)状态,三次握手完成。
三次握手即三步:请求—确认—再确认的过程,握手完成后客户端和服务器开始传输数据。
结束通信时,需要进行“四次断开”。
1.客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。
2.服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。
3.服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。
4.客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。
断开的四个步骤其实就是通信双方互相给对方发送“断开”的请求,然后互相确认的过程,但是由于是全双工,所以在断开时需要四步,若只有一方断开,则通信并不能完全结束,另一方仍能发送消息。
根据TCP/IP的三次握手,四次断开的过程分析,可以更好的理解了面向连接协议的特点,需要通信双方的互相确认,并且能根据序号对数据进行跟踪,所以很好地保护了数据的安全传输。