tcp与udp都属于网络通信传输层的传输协议
TCP
举个例子:帮助理解tcp的原理流程,比如说打电话
场景:A(发送端),B(接收端),A跟B在微信上聊天,突然A想打电话给B,想语音跟B说。
三次握手过程:
-
一次握手:
A发送信息给B:我想打电话跟你说(SYN(SEQ=x)报文),那么A就进入了等待B回应状态(SYN_SEND 状态) -
二次握手:
B收到了A发来请求打电话的信息(SYN 报文),然后B给A回信息:好,你打过来吧(SYN (SEQ=y)ACK(ACK=x+1)报文),那么B进入了等待A打电话过来来的状态(SYN_RECV 状态) -
三次握手:
A得到B的同意打电话回应(SYN 报文)后,A拨通了电话(ACK(ACK=y+1)报文),A就进入了跟B聊天的状态(Established状态)
四次挥手:
-
一次挥手:
A跟B聊的差不多了,于是说我要挂了(释放数据报文首部,FIN=1,序列号为seq=u),然后A进入了等待回应挂断状态(FIN-WAIT-1,终止等待1) -
二次挥手:
B收到了A说要挂断的信息,于是B说:好(ACK=1,ack=u+1,序列号seq=v),这时B就看A是否真的挂断了等待过程中(CLOSE-WAIT(关闭等待)状态),但是B还一直在bb(即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受),这段时间的状态就是CLOSE-WAIT状态持续的时间 -
三次挥手:
A收到B的确认信息:好(ACK=1,ack=u+1,序列号seq=v)之后,A就进入了在听B还在bb的状态(FIN-WAIT-2(终止等待2)状态),在等B一直bb(数据传递)完后,B就进入了A挂掉的状态(LAST_ACK(最后确认)状态) -
四次挥手:
A在听B完毕后,A不说话(发出确认要关闭)等待B先挂断(尊重问题哈哈哈),这时A就进入了等待关闭状态(TIME_WAIT(时间等待)状态,等待时间:2MSL),此时B明白了,就挂断了电话(服务端close,服务端结束TCP连接的时间要比客户端早一些)