TCP协议及其持久连接与非持久连接

之前讲了长轮询什么的 提到了运输层的持久连接(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:这个请求是否为关闭连接的请求
  • 数据:应用层协议封装的数据
    TCP-Connection

这个图有点长啊 说明一下 这个有四个部分 第一部分:众所周知的三次握手 第二部分:客户端发送数据 第三部分:服务器返回数据 第四部分:客户端断开连接

咱来看一下持久连接和非持久连接的区别

假设客户端请求三个数据
持久连接会这么做: 一 二 三 二 三 二 三 四
非持久连接这么做: 一 二 三 四 一 二 三 四 一 二 三 四

这就是这两个的区别 对应到http上 是这样的

假设有一个页面 请求了两个图片

持久连接 : 浏览器连接服务器 浏览器发送get请求 服务器发送图片数据 浏览器发送第二个get请求 服务器发送图片数据 关闭连接
非持久连接:浏览器连接服务器 浏览器发送get请求 服务器发送图片数据 关闭连接 浏览器连接服务器 浏览器发送第二个get请求 服务器发送图片数据 关闭连接

嗯嗯 就是这样的 我用c做了一个长连接和短连接的demo 在这里 分别有客户端和服务端的

那两个图我整理了好久才整理出来的 自己画的 参考资料:《计算机网络:自顶向下方法(原书第四版)》. 机械工业出版社

这是我们计算机网络课的教材。。。可惜之前没有好好上课。。。。现在自己重新学习了。。。