• Tcp ”面向连接”
即在正式通信前必须和对方先建立起连接.一个tcp必须要经过三次对话才能建立起来;
在经历四次对话结束;(即三握四挥)
握手
- 第一次 A向B发出连接请求数据包;
- 第二次 B向A发送统一连接和要求同步(AB一个在发送一个在接受);
- 第三次 A向B确认B的要求同步,之后A才向B发送文件。
让我们来举一个小例子:
假设A是小老弟,B为大老哥。(假设他们现在想打电话)
part 1: 小老弟对大老哥说:“嗨!大老哥,我能向你打电话吗?”
part 2: 大老哥听到后,对小老弟说:“好啊,你什么时候打,我要得同步接收吧!”
part 3: 小老弟急忙说:“对呀,我们要同步,我现在就打!”
挥手
此处讨论被动:
-
第一次 A发送一个FIN用来关闭A到B的数据传送,B进入FIN_WAIT_1状态。这表示A没有数据要发送给B了
-
第二次 B收到FIN后,发送一个ACK给A,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),A进入CLOSE_WAIT状态。B对A说我“同意”你的关闭请求;
-
第三次 B发送一个FIN,用来关闭B到A的数据传送,B进入LAST_ACK状态。
-
第四次 A收到B发送的FIN报文段,向B发送ACK报文段,然后A进入TIME_WAIT状态;B收到A的ACK报文段以后,就关闭连接;此时,A等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,A也可以关闭连接了。
-
ACK:确认序号有效。
-
FIN:释放一个连接。
part 1: 小老弟对大老哥说:“我想挂电话了,大老哥。”
part 2: 大老哥听到后,对小老弟说:“好,我同意你挂。”
part 3: 大老哥说:“我也想挂电话。”
part 4: 小老弟说:“好吧,那你先挂电话”
(于是大老哥“挂了“,然后小老弟也“挂了”)
传输可靠性: 可靠
速度慢
应用: 传输大量数据,对可靠性要求高。
• Udp “面向非连接”
即:不用事先与对方建立连接,直接发送数据包。
即小老弟将快递送到快递柜里,大老哥自己去取,没有同步要求。
传输可靠性: 不可靠。
速度快
应用: 传送少量数据,对可靠性要求不高。
• Http “用于www浏览的协议”
即:超文本传送协议,是从Web服务器传输超文本到本地浏览器的传送协议建立在TCP协议的基础之上,是一种短连接,要不断向服务器发起连接请求。
特点: 是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
注:
- 在http1.0中客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后就自动释放连接;
- 在http1.1中,则可以在一次连接中处理多个请求,并可重叠进行不需要等一个请期结束后再发下一个请求。
参考资料:百度百科