由于最近面试中经常被问到关于网络传输这一块儿,再加上网上关于socket的帖子乱飞,除了几篇精贴之外,其余全部command+C, So I decided to organize the Socket network transport protocol!希望可以帮助到大家~
Socket:又称”套接字”,应用程序通过”套接字”向网络发送请求或应答,它是一个针对TCP和UDP编程的接口,借助它建立TCP/UDP连接。socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉.
1、首先我们先介绍一下OSI和TCP\IP(看图说话)
简单解释:
1.物理层:主要定义物理设备标准,如网线的接口类型、各种传输介质的传输速率等。
2.数据链路层:主要将从物理层接收的数据进行MAC地址的封装与解封装。
3.网络层:选择合适的网间路由和交换结点,确保数据及时传送,将从下层接收到的数据进行IP地址的封装与解封装 IP协议
4.传输层:定义了一些传输数据的协议和端口,如TCP、UDP协议,主要将从下层接收的数据进行分段和传输,到达目的地址后再进行重组,以往把这一层数据叫做段 TCP/UDP协议
5.会话层:通过传输层建立数据传输通路。
6.表示层:主要是进行对接收的数据进行解释、压缩与解压缩等,即把计算机能够识别的东西转化成人能够识别的东西(如图片、声音等)。
7.应用层:主要是一些终端的应用,比如说FTP(各种文件下载)、浏览器、QQ等,可以将其理解为在电脑屏幕上可以看到的东西,也就是终端应用。 HTTP/XMPP协议
2、面试中经常问到的各种区别
想想头就大
1、先讲一下TCP和UDP的区别(废话不多说,直接贴图)
2、TCP、UDP、HTTP、SOCKET之间的区别
IP:网络层协议;
通过Ip协议可以使可以使两台计算机使用同一种语言,从而允许Internet上连接不同类型的计算机和不同操作系统的网络。Ip协议只保证计算机能够接收和发送分组数据。当计算机要和远程的计算机建立连接时,TCP协议会让他们建立连接:用于发送和接收数据的虚拟电路。
TCP和UDP:传输层协议;
上面已经讲过区别,不再多说,再啰嗦两句哈哈,UDP一般用于屏幕共享或者视频直播等对数据安全要求不是很高的需求中。
HTTP:应用层协议;
HTTP 底层是通过socket建立连接通信管道,实现数据传输
HTTP 是一个TCP的传输协议(方式),它是一个可靠,安全的协议。
SOCKET:TCP/IP网络的API。
TCP/IP代表传输控制协议/网际协议,指的是一系列协议。
TCP和UDP使用IP协议从一个网络传送数据包到另一个网络。把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。TCP和UDP是高速公路上的“卡车”,现在开始开车,老司机来带上你们,它们携带的货物就是像HTTP,文件传输协议FTP这样的协议等。
TCP和UDP是FTP、HTTP和SMTP之类使用的传输层协议。虽然TCP和UDP都是用来传输其他协议的,它们却有一个显著的不同:TCP提供有保证的数据传输,而UDP不提供。这意味着TCP有一个特殊的机制来确保数据安全的不出错的从一个端点传到另一个端点,而UDP不提供任何这样的保证。
HTTP(超文本传输协议)、XMPP(即时通讯协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。客户端使用Web浏览器发起HTTP请求给Web服务器,Web服务器发送被请求的信息给客户端。
记住,需要IP协议来连接网络;TCP是一种允许我们安全传输数据的机制,,使用TCP协议来传输数据的HTTP是Web服务器和客户端使用的特殊协议。
Socket 接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,用以开发TCP/IP网络上的应用程序。
TCP和UDP都属于传输层协议,他和HTTP、XMPP等的区别在于,TCP和UDP是描述该协议的 传输方式,比如是否要建立连接等,而HTTP则表示在该协议下进行数据传送时的 数据格式。
HTTP:超文本传输协议,它的底层就是通过socket建立连接通信管道,他属于socket层上协议,属于应用层的协议,格式类似于json,有content-type,body等。
XMPP协议:即时通讯协议,同HTTP一样属于应用层协议,格式为XML,环信就是基于XMPP进行的二次开发。
3、网络通信的要素
1、首先我们得有了联系才能发生关系吧!你懂得~
那我们就先通过Socket来加个好友吧
2、既然好友都加了,那我们再深入的了解一下吧,你家住哪儿啊~
那我们就互换一下家庭住址 IP
3、那我准备去你家了啊,把路线规划一下吧,可千万别走错了啊~
那我就用百度地图规划一下吧 端口号
<1>用于标示进程的逻辑地址,不同进程的表示
<2>有效端口:0-65535,其中0-1024由系统使用或者保留端口,开发中建议只用1024以上端口
4、我考虑一下该开我那辆车去呢~
4.1 皮卡 开这个车呢,可以给你带很多礼物,虽然稍微慢了点吧,但是慢点安全,因为我开的慢嘛,所以我去你家我得先给你打个电话,你不接我电话我就不去了,你接了电话同意我去了,我才过去
4.2 兰博基尼 开这个车呢,因为是跑车嘛,我就不能带太多东西了,带束花还是可以的,因为我这车速度太快,我就不给你打电话了,到你家分分钟的事儿,虽然速度比较快,就是有点危险
4、长连接和短连接
长连接和短连接其实就是一个连接的保存状态,区别就是连接保存的时间
讲解一下:Socket层上的协议(Http协议与XMPP协议都是定义数据传输格式)
<1>Socket是层上的协议,指的是数据传输的格式
<2>Http协议其实是它就是定义在网络上传输的数据格式,双方互相约束,也是数据传输的格式
XMPP协议,是一款即时通讯协议
<1>可扩展消息处理现场的协议,是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测,这个协议可能最终允许因特网用户向因特网其他任何人发送即时消息
以写一封信为标准:
TCP/UDP (传输方式 ) ->EMS/申通/圆通/各种通
HTTP/XMPP(数据传输格式) ->>新的内容格式 (中文或,英文),它们只是传输的内容格式不一样罢了