1.TCP(Transmission Control Protocol):传输控制协议。
2.TCP有六种标志位:
- SYN:建立连接, 值为1时,表示希望建立连接,并设定序列号的初始值。
- ACK:确认应答,除了第一次握手时,其余时刻ACK必须为1。
- FIN:结束符, 值为1时表示今后不会再有数据发送,希望断开连接。
- RST:重置符,值为1时,表示TCP连接中途出现异常时必须强制断开连接。
- PSH 、UGR (用的较少)
3.三次握手:
(1)最开始客户端和服务器的状态都是closed的,然后服务器通过socket来绑定和监听ip和端口。这时server是被动等待连接的,也就是代码中的server_socket.accept()。
(2)第一次握手:client向server发送请求,等待确定。这时client的状态变成SYN_SENT
(3)第二次握手:server响应client,并要求client确认。此时服务器的状态变为SYN_RCVD
(4)第三次握手:client响应server,服务收到后检查ACK,通过检验后则成功创建连接, server和client进入ESTABLISHED状态。
4.为什么是三次握手???
答:三次握手主要是为了确保server和client能够进行正常的连接与数据传输。
第一次握手的时候client什么也不知道。server知道自己接收正常,知道client发送正常。
第二次握手的时候,client知道自己发送和接受数据正常,也知道server发送和接受正常。但server只知道自己接收正常以及client发送正常。
第三次握手的时候,server和client就都知道双方接收和发送正常,所以就成功建立了连接。