共计 892 个字符,预计需要花费 3 分钟才能阅读完成。
TCP/IP 四层模型,如下图所示。TCP 是属于网络分层中的运输层 (有的书也翻译为传输层),因为 OSI 分为 7 层,感觉太麻烦了,所以分为四层就好了,简略。
TCP 连贯
建设起一个 TCP 连贯须要通过“三次握手”:
第一次连贯:客户端被动向服务端发送 syn(syn=x)数据包,本人进入 syn_send 状态,期待服务端的响应。
第二次握手:服务端承受到了来自客户端的 syn 数据包,服务端向客户端发送 ack(ack=x+1)和本人的 syn(syn=y)数据包,本人进入到 syn_recv 状态。
第三次握手:客户端承受到来自服务端的 ack 和 syn 数据包,客户端再向服务端发送 ack(ack=y+1)数据包,此包发送结束,客户端和服务器进入 ESTABLISHED 状态,实现三次握手。
TCP 三次握手如图:
握手过程中传送的包里不蕴含数据,三次握手结束后,客户端与服务器才正式开始传送数据。现实状态下,TCP 连贯一旦建设,在通信单方中的任何一方被动敞开连贯之前,TCP 连贯都将被始终放弃上来。断开连接时服务器和客户端均能够被动发动断开 TCP 连贯的申请,断开过程须要通过“四次握手”(过程就不细写了,放到下一篇文章再做具体阐明)
HTTP 连贯
HTTP 连贯最显著的特点是客户端发送的每次申请都须要服务器回送响应,在申请完结后,会被动开释连贯。从建设连贯到敞开连贯的过程称为“一次连贯”。
- 在 HTTP 1.0 中,客户端的每次申请都要求建设一次独自的连贯,在解决完本次申请后,就主动开释连贯。
- 在 HTTP 1.1 中则能够在一次连贯中解决多个申请,并且多个申请能够重叠进行,不须要期待一个申请完结后再发送下一个申请。
因为 HTTP 在每次申请完结后都会被动开释连贯,因而 HTTP 连贯是一种“短连贯”,要放弃客户端程序的在线状态,须要一直地向服务器发动连贯申请。通常的做法是即时不须要取得任何数据,客户端也放弃每隔一段固定的工夫向服务器发送一次“放弃连贯”的申请,服务器在收到该申请后对客户端进行回复,表明晓得客户端“在线”。若服务器长时间无奈收到客户端的申请,则认为客户端“下线”,若客户端长时间无奈收到服务器的回复,则认为网络曾经断开。