TCP三次握手(client客户端先发起请求):
1、客户端发起请求连接服务器
2、服务器返回:接受到请求,并要求连接客户端
3、客户端回复:可以连接
举个日常例子,打电话时我们对话如下:
对应为客户端与服务器之间的通信:
于是有了如下对话:
备备:1+1等于几?
香香:2;2+2等于几?
备备:4
首先两个人约定协议
1.感觉网络情况不对的时候,任何一方都可以发起询问
2.任何情况下,若发起询问后5秒还没收到回复,则认为网络不通
3.网络不通的情况下等1min路由器之后再发起询问对于备备而言,发起 “1+1等于几”的询问后:Ⅰ若5s内没有收到回复,则认为网络不通;Ⅱ 若收到回复,则备备确认①备备能听到香香的消息 ②香香能听到备备的消息,然后回复香香的问题的答案
对于香香而言,当感觉网络情况不对的时候
-
若没有收到备备的询问,则香香发起询问
-
若收到“1+1等于几”,则香香确认:香香可以听到备备的消息,然后回复备备的问题的答案“2”和香香的问题“2+2等于几”
-
若5s内没有收到备备的回复“4”,则香香确认:备备听不见她的消息
-
若5s内收到了备备的回复“4”,则香香确认:备备可以听见她的消息
这样,如果上面的对话得以完成,就证明双方都可以确认自己可以听到对方的声音,对方也可以听到自己的声音!
TCP四次挥手(client端或者server端发起端口连接请求):
1、客户端发起断开连接的请求: 意思是: 我想和你断开连接,我没有数据要继续发送了,但是如果你有数据需要发送,我可以继续接收
2、服务器回复 : 我接收到你的请求了
3、服务器发送 : 我已经准备好断开连接了
4、客户端回复 : 收到你的信息,断开连接
为什么要四次挥手?
确保数据能够完整传输。
当被动方收到主动方的FIN报文通知时,它仅仅表示主动方没有数据再发送给被动方了。但未必被动方所有的数据都完整的发送给了主动方,所以被动方不会马上关闭SOCKET,它可能还需要发送一些数据给主动方后,再发送FIN报文给主动方,告诉主动方同意关闭连接,所以这里的ACK报文和FIN报文多数情况下都是分开发送的。