(二)网络编程之各种协议

TCP和UDP

1.网络通信协议

网络通信协议:为什么要有网络通信协议呢?就好比在现实中要有法律法规一样,这样才能让社会更加和谐.那么通信协议这是怎样一个规则呢?它对协议中数据传输的格式,速率,步骤等做了统一的规定.那么,大家就必须要遵守该协议,以达到数据交换的目的;

TP/IP:是Internet最基本的.也是最广泛的协议.采用了4层的分层模型,一层呼叫下一层的方式完成需求.哎,是不是感觉这个4和之前讲的ping中数据包数量为4对上了?@*@;

2.协议

刚刚说了,在网络中进行数据的交换必须遵守某种协议才可以完成.那么这个"某种"协议都有哪些种类呢?在java.net包中可以查看TCP/UDP两种协议的对应代码实现.

2.1.TCP : TransmissionControl Protocol

传输控制协议.

有什么显著特点呢?

面向连接的通信协议:什么是面向连接,字面就可以看出,以连接为主的通信协议;具体就是在数据传输之前,客户端和服务端要已经建立起连接,并双方都已经确认建立起了连接.这样,就可以保证客户端和服务端之间无差错的进行数据传输.(这里说客户端和服务端似乎不太贴切,但大致是这个意思);

那么,既然是面向连接的通信协议,并确认已连接后才进行数据传输,如何去保证呢?

这里就涉及到了TCP协议中熟知的三次握手了:

第一次握手:客户端向服务端放出连接请求,并且等待服务器的确认;
第二次握手:服务端向客户端回送一个响应,通知客户端接收到额请求;
第三次握手:客户端再次向服务端发送确认消息,确认连接.

完成三次握手后,才可以进行数据传输;
那么一般什么情况使用TCP协议呢? 比如:文件的下载,网页的浏览等.

是不是觉着很麻烦?所以可以看出TCP协议效率肯定是不高的;所以,必然会出现一种效率高的协议;就是UDP了.

2.2.UDP:User Datagram Protocol

用户数据报协议,TCP是面向连接的通信协议,所以UDP就是面向无连接的协议了,恩,没有开玩笑,是这样的.不管传输的目的地对象是否已开启或连接,直接将相关数据封装到数据包中,发送.当然,每个数据包的大小是有限制的,在64k以内.

对比TCP来看,UDP的特点是什么?

1.因为没有进行三次握手,也就不知道对方是否连接,这种情况还进行数据传输,必然是不可靠的协议了,对吧.所以呢,数据容易丢失.

2.但同时,传输速度也很快.

3.同时,也不安全.

一般什么情况下使用UDP协议呢?比如:QQ呀,进行的视频会议呀等待.

3.http : HyperText Transfer Protocol

等等,那么我们平时访问的这种https://www.jianshu.com/,前面的http是什么?这里是https是因为新增的;

所以需要介绍一下http协议:

是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 其实最初就是为了提供发布和接受html的方法.它不涉及数据包传输,默认端口是80

常见的状态码有以下:相信大家也都见过.

1xx消息——请求已被服务器接收,继续处理
2xx成功——请求已成功被服务器接收、理解、并接受
3xx重定向——需要后续操作才能完成这一请求
4xx请求错误——请求含有词法错误或者无法被执行
5xx服务器错误——服务器在处理某个正确请求时发生错误

4.区别?

ちょっと待って ...............

都是什么啊?完全懵了@*@...................

哈哈....我也是............

刚刚有提到4层模型(也有按7层分,可怕,搞不懂),那么我就从网上找张图,对比着看,简单的区分http/tcp/udp/ip一下:

四层模型.PNG

从上图可知:

HTTP是:第四层应用层,也就是我们平时接触的;

TCP/UDP:传输层,负责数据包的传输,注意啦,要知道面向连接/面向无连接的区别!比如:传输的数据方式,数据包大小限制,安全性等的区别;

IP(Internet Protocol):网络层;

至于ARP/RARP,有的放在第二层有的放在第一层,我也还不了解;

所以,HTTP是基于TCP的一个超级文本传输协议

5.Http连接

5.1特点

既然说到HTTP了,那么有什么特点呢?

1.无连接.就是每次只处理一个请求;

2.无状态:就是指对处理的事务没有记忆;

3.灵活呀;Content-Type指定一下数据类型就可以了,比如html,text呀,JSON呀等;

因为http的无状态无连接特点,因此就出现了一个问题,如果我一端更新了某个内容,另一端如何能及时的知道呢?而不是等了好几天,甚至好几个月才知道.于是出现了Ajax轮询和long poll方法.那么就来了解一下.

5.2Ajax轮询

原理:其实就是浏览器每隔一段时间(几秒钟把一般)发送一次请求给客户端,询问服务是否有新的信息;

模拟一下,Alice是浏览器,Bob是客户端;(注:Alice的每一句都是一个请求,Bob的每一句都是一个响应;)
Alice:Bob,你那边有没有新的消息?
Bob:还没有~~~
Alice:Bob,你那边有没有新的消息?
Bob:还没有~~~
Alice:Bob,你那边有没有新的消息?
Bob:有了,是******
Alice:Bob,你那边有没有新的消息?
Bob:还没有~~~
............................
............................

但是这个有什么问题呢?因为浏览器需要不停的想你询问?假如,淘宝这种有几个亿用户的网站,会怎么样?会不会容易使服务器崩溃呀,即使服务器有再快的处理速度,也不足够呀.

因此这种方式,消耗很大的服务器内存和资源;

代码实现是什么样呢?其实也就是多了个回调函数.

5.3long poll

原理:也是浏览器(或客户端)向服务端发送请求询问是否有内容需要更新,只是long poll采用的是阻塞式的.

什么是阻塞什么是非阻塞?这里简单说一下.

阻塞:就是程序去执行一段代码,比如执行到了某一步(非常消耗时间),它就一直在这等着,非得等到这一步执行完了才能继续向下执行;

非阻塞:同样的程序去执行一段代码,也是遇到可某一步(也是非常的消耗时间),这个时候它继续执行做其它事情,等你执行完了告诉我一声就好了;

好,来看一下long poll是什么?

同样的,模拟一个情景.模拟一下,Alice是客户端,Bob是客户端;(注:Alice的每一句都是一个请求,Bob的每一句都是一个响应;)

Alice:Bob,你那边有没有新的消息?(2018.09.10 9:30)
Alice:Bob,你那边有没有新的消息?(2018.09.10 9:32)
Alice:Bob,你那边有没有新的消息?(2018.09.10 9:34)
Alice:Bob,你那边有没有新的消息?(2018.09.10 9:36)
Alice:Bob,你那边有没有新的消息?(2018.09.10 9:37)
Bob:.....long time goes...............................suddenly,Alice,我这边有新内容啦!

所以,long poll就是客户端给服务器发送一个请求,如果客户端没有回复,就一直请求.服务端呢?如果没有新的消息就一直不响应客户端.直到有了新的消息才会响应;然后再次建立连接;

但是这个存在什么问题呢?你想一下,客户端一直向服务器发送请求,如果想京东淘宝那种有几个亿用户的网站,会怎样呢?一分钟会有几十亿的请求还是几百亿的去请求?这就是高并发啦!什么?到了高并发?什么事高并发?简单地说,就是同一时间有特别特别多的用户访问你的网站并执行某个操作(这里说的不是很准确感觉);

6.长连接需求

那么如果有这种需要建立长连接的需求,该怎么做?

这个时候,websocket应运而生~~~

鼓掌欢迎一下[图片上传失败...(image-d9888c-1540300658087)]

什么是websocket?

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

产生背景?
现在,很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。

而比较新的技术去做轮询的效果是Comet。这种技术虽然可以双向通信,但依然需要反复发出请求。而且在Comet中,普遍采用的长链接,也会消耗服务器资源。

在这种情况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。

Websocket使用ws或wss的统一资源标志符,类似于HTTPS,其中wss表示在TLS之上的Websocket。如:

算了,上面都是在Wiki上面复制的,可以去维基百科上搜一下websocket看一下就好了!

应用呢?

比如很火的数字货币BitCoin,里面的挖矿之后广播通知所有的人就是用的websocket;但,比特币,也是区块链技术的1.0版本,个人认为思想是最经典的!在这里并不是去中心化的,因为大家都需要去他所指定的几个端口注册一下节点,才能与其他人进行通信(比特币白皮书可以看到);

~

待更新~

如有错误,欢迎指正!

参考了很多的博客,wiki,但是我都忘了参考了那些博客,这里也没法贴出地址来了,以后注意这方面把!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容

  • 知 识 点 / 超 人 文章结构:1.网络七层2.TCP/IP3.UDP4.socket5.webSocket6....
    树下敲代码的超人阅读 5,777评论 3 54
  • 1、TCP为什么需要3次握手,4次断开? “三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端...
    杰伦哎呦哎呦阅读 3,479评论 0 6
  • 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编...
    程序员欧阳阅读 2,014评论 1 37
  • 传输层提供的服务 传输层的功能 从通信和信息处理的角度看 ,传输层向它上面的应用层提供通信服务,它属于面向通信部分...
    CodeKing2017阅读 3,633评论 1 9
  • 计算机网络概述 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。 按照计算机网络的定义,通过一定...
    蛋炒饭_By阅读 1,227评论 0 10