之前讲了长轮询什么的 提到了运输层的持久连接(persistent connection) 今天就来实现一下吧 总之经过多方的对比 持久连接就是长连接 与之对应的为非持久连接(non-persistent connection) 虽然运输层有TCP和UDP协议 但是不知道为什么却叫做TCP/IP忽略了UDP 反正 随便啦
首先讲一下 tcp协议 这个协议的结构是这样的
宽度为32位 32位和16位 其中首部长度4位,URG、ACK到FIN那一串为标志字段各1位,所以保留未用的有10位 其实URG PSH 和紧急指针也没有用到 然后这里涉及到的字段有:序号、确认号、ACK、SYN、FIN、数据。然后下面这个图又是关于一个完整的tcp请求的详细的过程的说明
- 序号:每次请求的包的序号
- 确认号:无论哪方,每次对方发送来数据,都必须要回复一个确认的请求,表明上一个请求收到了,确认号为预期下次发来的数据的序号。这个是保证tcp请求是可靠请求的关键,一旦发送方经过一段时间未收到上一个请求的确认 需要重新发送数据
- ACK:这个请求是否为一个确认的请求,即确认号字段是否有效
- SYN:这个请求是否为发起连接的请求
- FIN:这个请求是否为关闭连接的请求
- 数据:应用层协议封装的数据
这个图有点长啊 说明一下 这个有四个部分 第一部分:众所周知的三次握手 第二部分:客户端发送数据 第三部分:服务器返回数据 第四部分:客户端断开连接
咱来看一下持久连接和非持久连接的区别
假设客户端请求三个数据
持久连接会这么做: 一 二 三 二 三 二 三 四
非持久连接这么做: 一 二 三 四 一 二 三 四 一 二 三 四
这就是这两个的区别 对应到http上 是这样的
假设有一个页面 请求了两个图片
持久连接 : 浏览器连接服务器 浏览器发送get请求 服务器发送图片数据 浏览器发送第二个get请求 服务器发送图片数据 关闭连接
非持久连接:浏览器连接服务器 浏览器发送get请求 服务器发送图片数据 关闭连接 浏览器连接服务器 浏览器发送第二个get请求 服务器发送图片数据 关闭连接
嗯嗯 就是这样的 我用c做了一个长连接和短连接的demo 在这里 分别有客户端和服务端的
那两个图我整理了好久才整理出来的 自己画的 参考资料:《计算机网络:自顶向下方法(原书第四版)》. 机械工业出版社
这是我们计算机网络课的教材。。。可惜之前没有好好上课。。。。现在自己重新学习了。。。