网络通讯三要素:

网络七层协议划分:

网络五层协议的划分:

要记网络层的5层协议,可以把它想像为一枚洋葱。学过计算机网络的,看到这个网络协议的套接字,大概就会明白了!它是一层一层的进行包裹的,然后交由物理层进行发送的。在网络七层的基础上,将应用层、表达层、会话层合并为应用层了。

TCP的三次握手:

简洁版:

三个步骤的解释:

第一次:客户端向服务器端发送请求

SYN = 1 (SYN 是一个同步序列号)

ACK = 0 (TCP协议规定的一个标识,还没连接为0,报文连接以后 ACK = 1)

seq = x (客户端和服务器端身份的验证是通过序列号是别的,也就是seq)

第二次:服务端响应客户端

ack = x+1   (回复报文确认的序列号)
seq = y    (服务器端会把这个序列号带给客户端)

SYN = 1

ACK = 1    (f)

第三次:客户端响应服务器端

ACK = 1

seq = x+1  (用ack作为下一次同步的连接,这是客户端的做法)

ack = y+1    (客户端对服务器端身份的确认,这样就建立了连接)

面试题:为什么要建立3次连接?

假设是2次;

  假如在第1次客户端向服务器端发送请求因为阻塞,客户端会再次给服务器端发送请求,这次服务器端和客户端建立了连接。这样双方就可以发送数据了,发送完以后就可以断开连接了。但是这是阻塞的请求到了服务器端,这时会建立第二次连接。但是客户端的数据发送完了,造成了资源的浪费。

  所以第三次是为了再次确认,避免资源的浪费。

网上视频聊天SDK:

网易,腾讯,青牛的比较稳定,可以看看!

TCP的4次断开:

第一步:客户端向服务器端发送建立连接请求:

FIN = 1  (没有数据发送了,将要断开)

seq = 1  (序列号)

第二不:服务器端响应客户端

ACK = 1  (客户端不能向服务器端推送数据,但是服务器端是可以的)

seq = 1  

ack = u+1

为什么是四次呢?

因为它是一个全双方的通信,彼此都可以发送你信息;

Socket连接

一个SOCket连接的Demo(基于本的 127.0.0.1, 端口号:6969):

打开一个A终端窗口输入:

nc -l 6969

监听6869端口,相当于打开服务器

打开B终端进程窗口,输入

nc 127.0.0.1 6969

这样就建立通信了,在A终端窗口输入 123 ,回车会发现B终端进程窗口,出现123如:

B终端口:

Socket连接流程:

  Socket 是基于TCP、UDP的抽像层的。

  在这个流层中,可以把Socket理解为插排。它就相当于一个媒介,Socket是位于用户层和传输层之间用与操作TCP和UDP的。

  Socket是IP的端口(狭义理解),可以理解为IP的一个端口,在Linux理解为套接字。

  Socket是成对出现的,这要保证我们的客户端和服务器端都要有套接字Socket。

流程关键字:

  bind(): 绑定IP地址中的端口,判断这个端口是否被占用了,若没占用他会监听这个端口号。

  listen(): 如上述的Demo中 6969 端口,监听这个端口是阻塞线程的,一直等待客户端的连接。

  accept(): 如果有客户端的连接,它就会接受,连接完之后进行数据通信,连接是基于TCP的,基于TCP的3次握手,结下来就可以进行数据的传输。

  read(), write(): 进行数据的传输;

  close(): 发送完后,就结束连接。

  Socket与TCP的最大区别就是Socket可以控制什么时候打开,什么时候连接;

  http是短连接,原因是一问一答,走了之后就没有了,TCP是短连接;

  Socket是长连接,是因为可以手动的控制它,数据发送完了,不需要了Socket就可以对它进行关闭;

 

即时通讯(I)的更多相关文章

  1. 利用WCF双工模式实现即时通讯

    概述 WCF陆陆续续也用过多次,但每次都是浅尝辄止,以将够解决问题为王道,这几天稍闲,特寻了些资料看,昨晚尝试使用WCF的双工模式实现了一个简单的即时通讯程序,通过服务端转发实现客户端之间的通讯.这只 ...

  2. android环境下的即时通讯

    首先了解一下即时通信的概念.通过消息通道 传输消息对象,一个账号发往另外一账号,只要账号在线,可以即时获取到消息,这就是最简单的即使通讯.消息通道可由TCP/IP UDP实现.通俗讲就是把一个人要发送 ...

  3. 【原创】轻量级即时通讯技术MobileIMSDK:Android客户端开发指南

    申明:MobileIMSDK 目前为个人维护的原创开源工程,现陆续整理了一些资料,希望对需要的人有用.如需与作者交流,见文章底签名处,互相学习. MobileIMSDK开源工程的代码托管地址请进入 G ...

  4. 【原创】轻量级移动设备即时通讯技术MobileIMSDK的常见问题解答

    申明:MobileIMSDK 目前为个人原创开源工程且已发布,现整理了一些有关MobileIMSDK的常见的问题,希望对需要的人有用,谢谢.如需与作者交流,见文章底部个人签名处,互相学习. Mobil ...

  5. 【原创】轻量级移动端即时通讯技术 MobileIMSDK 发布了

    申明:MobileIMSDK目前为个人原创开源工程,投入了大量的时间和精力,希望对需要的人有所帮助.如需与作者交流,见文章底部个人签名处,互相学习.Q群:215891622,欢迎共同志趣者学习和交流. ...

  6. ActiveMQ 即时通讯服务 浅析

      一. 概述与介绍 ActiveMQ 是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provi ...

  7. APP邂逅即时通讯云,让你的手机APP聊起来

     #推荐活动# #线下沙龙# 明天下午在IC咖啡 —— <APP邂逅即时通讯云,让你的手机APP聊起来>, http://url.cn/Y8sYo5 

  8. 岁末年初3Q大战惊现高潮,360震撼推出Android "3Q" IM即时通讯

    岁末年初3Q大战惊现高潮,360震撼推出Android "3Q" IM即时通讯 看过了QQ和360斗争的开端高潮,当然现在还不能说这场斗争已经结束,在我看来这次的事件未尝不是一个适 ...

  9. Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE

    1. 前言 Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Serve ...

  10. Android后台保活实践总结:即时通讯应用无法根治的“顽疾”

    前言 Android进程和Service的保活,是困扰Android开发人员的一大顽疾.因涉及到省电和内存管理策略,各厂商基于自家的理解,在自已ROOM发布于都对标准Android发行版作为或多或少的 ...

随机推荐

  1. Chrome中安装Firebug插件

    Chrome中的Firebug插件:Firebug Lite 1.Firebug Lite下载:http://chromecj.com/web-development/2015-05/471/down ...

  2. elasticsearch安装IK分词插件

    一 打开网页:https://github.com/medcl/elasticsearch-analysis-ik/releases 这个是ik相关的包,找到你想下载的版本,下载对应的zip包 二 然 ...

  3. 使用反向代理的http的请求流程

    此文章主要为刚接触反向代理的小伙伴梳理请求流程,以便更好的理解反向代理是何时工作的 流程 由于浏览器是有缓存的,所以本地的hosts文件的信息也会在浏览器端缓存 当客户端发起一个新的请求(例如:输入的 ...

  4. loadrunner压测工具

    https://www.cnblogs.com/xxyBlogs/p/4579509.html https://www.cnblogs.com/jaazz/p/8668214.html

  5. 前端 HTML form表单标签 select标签 option 下拉框

    <select></select> select里面通常跟option配合使用 <!DOCTYPE html> <html lang="en&quo ...

  6. 进程理论 阻塞非阻塞 同步异步 I/O操作

    1.什么是进程 进程指的是一个正在运行的程序,进程是用来描述程序执行过程的虚拟概念 进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统其它所有的概念都是围绕进程来的 2.操作系统 操作系统 ...

  7. Spring boot 整合hive-jdbc导致无法启动的问题

    使用Spring boot整合Hive,在启动Spring boot项目时,报出异常: 经过排查,是maven的包冲突引起的,具体做法,排除:jetty-all.hive-shims依赖包.对应的po ...

  8. centos7安装Lua

    网官有介绍安装:http://www.lua.org/start.html 由于之前我遇到过致命错误并纪录在:https://blog.csdn.net/bingbingtea/article/det ...

  9. 创建vue项目的时候遇到:PhantomJS not found on PATH

    1.提示找不到PhantomJS需要进行下载,如果网速允许的话可以直接 npm install -g phantomjs 如果网速不给力的话,那就先进行淘宝镜像安装 npm install -g cn ...

  10. 致敬金庸:武侠版编程语言...Java像张无忌还是令狐冲?

    我就喜欢这样,等新闻消失,热点过去,人们快要遗忘的时候, 用自己的方式,想起他.让他被人想起. 短评:夫千里之远,不足以举其大:千仞之高,不足以举其深.<倚天屠龙记> 短评:这世间和张三丰 ...