TCP 协议简介

TCP 是互联网核心协议之一,本文介绍它的基础知识。

一、TCP 协议的作用

互联网由一整套协议构成。TCP 只是其中的一层,有着自己的分工。

(图片说明:TCP 是以太网协议和 IP 协议的上层协议,也是应用层协议的下层协议。)

最底层的以太网协议(Ethernet)规定了电子信号如何组成数据包(packet),解决了子网内部的点对点通信。

(图片说明:以太网协议解决了局域网的点对点通信。)

但是,以太网协议不能解决多个局域网如何互通,这由 IP 协议解决。

(图片说明:IP 协议可以连接多个局域网。)

IP 协议定义了一套自己的地址规则,称为 IP 地址。它实现了路由功能,允许某个局域网的 A 主机,向另一个局域网的 B 主机发送消息。

(图片说明:路由器就是基于 IP 协议。局域网之间要靠路由器连接。)

路由的原理很简单。市场上所有的路由器,背后都有很多网口,要接入多根网线。路由器内部有一张路由表,规定了 A 段 IP 地址走出口一,B 段地址走出口二,……通过这套”指路牌”,实现了数据包的转发。

(图片说明:本机的路由表注明了不同 IP 目的地的数据包,要发送到哪一个网口(interface)。)

IP 协议只是一个地址协议,并不保证数据包的完整。如果路由器丢包(比如缓存满了,新进来的数据包就会丢失),就需要发现丢了哪一个包,以及如何重新发送这个包。这就要依靠 TCP 协议。

简单说,TCP 协议的作用是,保证数据通信的完整性和可靠性,防止丢包。

二、TCP 数据包的大小

以太网数据包(packet)的大小是固定的,最初是1518字节,后来增加到1522字节(15KB )。其中, 1500 字节是负载(payload),22字节是头信息(head)。

[…]

地铁时报6.07

发信人: nzhth (n站同号), 信区: Joke标 题: 地铁时报6.07发信站: 水木社区 (Wed Jun 7 09:14:22 2017), 站内

好运气,也是一种实力!?

给大家讲段悲惨往事,我高中时化学奇差,考试成绩都是单数,10分以下。有一次试卷发下来,我居然15 分,狂喜啊!然后化学老师就在讲台上说:“最后一道大题出错了,15分,都给你们了。”

某人走进一家酒馆,看到酒馆里有个人身上挂着一个牌子:世界上记忆力最好的人!于是这个人就跑过去问:“你30年前的今天早上吃了什么?”“鸡蛋!”这个人无法判断他说的是真是假,耸耸肩走了。几年后,这个人又来到这家酒馆,又看到这个人,于是走过去问:“怎么做的?”“炒着吃。”

她最喜欢吃酸菜鱼,他为了追她,走遍全国拜师学艺,习得众多酸菜鱼做法。回到家后,他凭着一手绝活开了家酸菜鱼店,生意好得不得了,数钱数到手软,再也没心思琢磨儿女之情了。

我开车经过农村的时候不小心碾到了一只鸭子,我赶快下车,看到一个小男孩在旁边玩,我忐忑地问:“小朋友,这鸭子是你家的吗?”小男孩仔细地看了会儿,说:“不是,我家的鸭子没有那么扁!”

我老丈人家总共三个女儿。老婆的大姐结婚时,男方给了1万彩礼,老丈人陪嫁了2万;二姐结婚时,男方给了2万,老丈人陪嫁了4万;轮到我俩结婚,我一咬牙给了10万,然后就没有然后了。

我和我女朋友都是医学院的。刚开始时,她学扎针就在我手上练习,后来学习刮痧也在我背上练习,学习拔罐、针灸依旧如此。昨天我看见她在淘宝上买了一套手术刀……

昨晚我和同事加班到很晚,下班后,我开车送一个美女同事回家。在一个老旧的小区门口,我把车停住:“就送你到这吧,我不进去了。”美女同事凑过来,倚在我耳边说:“你开车送我进去吧,还能上去坐坐。”我果断地拒绝了。望着她远去的背影,我心想:要是当初好好练科目二,现在也不用害怕车倒不出来了!

我接上小学的外甥放学,有个小女孩追上来问:“叔叔,你是XX的爸爸吗?”我微笑着说:“我是他舅舅。”外甥低下头使劲拽着我离开,我想这小子肯定惹祸了。结果小女孩一脸轻蔑地对外甥说:“你可真能吹,两篇日记都写照顾植物人舅舅。”

笑出马甲线

@光消失的地方 早晨我坐地铁去学校,在地铁上捧着书临时补作业。一个年轻的妈妈指着我教育孩子:“你看这个哥哥求知欲多强。”我很想转过头对她说:“拉倒吧,这哪是求知欲,这是求生欲。”

@夏日的帆

Go语言的修饰器编程

之前写过一篇《Python修饰器的函数式编程》,这种模式很容易的可以把一些函数装配到另外一些函数上,可以让你的代码更为的简单,也可以让一些“小功能型”的代码复用性更高,让代码中的函数可以像乐高玩具那样自由地拼装。所以,一直以来,我对修饰器decoration这种编程模式情有独钟,这里写一篇Go语言相关的文章。

看过Python修饰器那篇文章的同学,一定知道这是一种函数式编程的玩法——用一个高阶函数来包装一下。多唠叨一句,关于函数式编程,可以参看我之前写过一篇文章《函数式编程》,这篇文章主要是,想通过从过程式编程的思维方式过渡到函数式编程的思维方式,从而带动更多的人玩函数式编程,所以,如果你想了解一下函数式编程,那么可以移步先阅读一下。所以,Go语言的修饰器编程模式,其实也就是函数式编程的模式。

不过,要提醒注意的是,Go 语言的“糖”不多,而且又是强类型的静态无虚拟机的语言,所以,无法做到像 Java 和 Python 那样的优雅的修饰器的代码。当然,也许是我才才疏学浅,如果你知道有更多的写法,请你一定告诉我。先谢过了。

简单示例

我们先来看一个示例:

package main import “fmt” func decorator(f func(s string)) func(s string) { return func(s string) { fmt.Println(“Started”) f(s) fmt.Println(“Done”) } } func Hello(s string) { fmt.Println(s) } func main() { decorator(Hello)(“Hello, World!”) }

我们可以看到,我们动用了一个高阶函数 decorator(),在调用的时候,先把 Hello() 函数传进去,然后其返回一个匿名函数,这个匿名函数中除了运行了自己的代码,也调用了被传入的 Hello() 函数。

这个玩法和 Python 的异曲同工,只不过,有些遗憾的是,Go 并不支持像 Python 那样的 […]

XOR 加密简介

本文介绍一种简单高效、非常安全的加密方法:XOR 加密。

一、 XOR 运算

逻辑运算之中,除了 AND 和 OR,还有一种 XOR 运算,中文称为”异或运算”。

它的定义是:两个值相同时,返回false,否则返回true。也就是说,XOR可以用来判断两个值是否不同。

true XOR true // false false XOR false // false true XOR false // true true XOR false // true

JavaScript 语言的二进制运算,有一个专门的 XOR 运算符,写作^。

1 ^ 1 // 0 0 ^ 0 // 0 1 ^ 0 // 1 0 ^ […]

Server-Sent Events 教程

服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE)。本文介绍它的用法。

一、SSE 的本质

严格地说,HTTP 协议无法做到服务器主动推送信息。但是,有一种变通方法,就是服务器向客户端声明,接下来要发送的是流信息(streaming)。

也就是说,发送的不是一次性的数据包,而是一个数据流,会连续不断地发送过来。这时,客户端不会关闭连接,会一直等着服务器发过来的新的数据流,视频播放就是这样的例子。本质上,这种通信就是以流信息的方式,完成一次用时很长的下载。

SSE 就是利用这种机制,使用流信息向浏览器推送信息。它基于 HTTP 协议,目前除了 IE/Edge,其他浏览器都支持。

二、SSE 的特点

SSE 与 WebSocket 作用相似,都是建立浏览器与服务器之间的通信渠道,然后服务器向浏览器推送信息。

总体来说,WebSocket 更强大和灵活。因为它是全双工通道,可以双向通信;SSE 是单向通道,只能服务器向浏览器发送,因为流信息本质上就是下载。如果浏览器向服务器发送信息,就变成了另一次 HTTP 请求。

但是,SSE 也有自己的优点。

SSE 使用 HTTP 协议,现有的服务器软件都支持。WebSocket 是一个独立协议。 SSE 属于轻量级,使用简单;WebSocket 协议相对复杂。 SSE 默认支持断线重连,WebSocket 需要自己实现。 SSE 一般只用来传送文本,二进制数据需要编码后传送,WebSocket 默认支持传送二进制数据。 SSE 支持自定义发送的消息类型。

因此,两者各有特点,适合不同的场合。

三、客户端 API 3.1 EventSource 对象

SSE 的客户端 API 部署在EventSource对象上。下面的代码可以检测浏览器是否支持 […]

WebSocket 教程

WebSocket 是一种网络通信协议,很多高级功能都需要它。

本文介绍 WebSocket 协议的使用方法。

一、为什么需要 WebSocket?

初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处?

答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起。

举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。

这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用“轮询”:每隔一段时候,就发出一个询问,了解服务器有没有新的信息。最典型的场景就是聊天室。

轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。因此,工程师们一直在思考,有没有更好的方法。WebSocket 就是这样发明的。

二、简介

WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。

它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

其他特点包括:

(1)建立在 TCP 协议之上,服务器端的实现比较容易。

(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。

(3)数据格式比较轻量,性能开销小,通信高效。

(4)可以发送文本,也可以发送二进制数据。

(5)没有同源限制,客户端可以与任意服务器通信。

(6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

ws://example.com:80/some/path

三、客户端的简单示例

WebSocket 的用法相当简单。

下面是一个网页脚本的例子(点击这里看运行结果),基本上一眼就能明白。

var ws = new […]

素食主义者

发信人: GGGGDDDDK (我叫囫囵,枣是我吞的), 信区: Joke标 题: 素食主义者发信站: 水木社区 (Wed May 10 09:22:09 2017), 站内

素素和菜菜都是素食主义者。有一天,素素和另两个人在荒岛上快饿死了,于是这三个人只好商量由两个人吃另一个人。素素因为是素食主义者,就成为了被吃的那个。菜菜得到这一情况后,意识到了做素食主义者的害处,开始经常吃肉,成为了一个大胖子。后来,菜菜和另两个人乘坐热气球,途中热气球的气不多了,需要扔下去一个人,菜菜因为最重,被扔下去了。

※ 来源:·水木社区 newsmth.net·[FROM: 122.139.1.109]

以鹅为单位,各种动物的战斗力排名。 (转载)

发信人: nighthawk (83。75% 「跑马溜溜的山上」), 信区: Joke标 题: 以鹅为单位,各种动物的战斗力排名。发信站: 水木社区 (Fri May 5 23:24:29 2017), 站内

【 以下文字转载自 NewExpress 讨论区 】发信人: riveryy (riveryy), 信区: NewExpress标 题: 以鹅为单位,各种动物的战斗力排名。发信站: 水木社区 (Fri May 5 23:08:15 2017), 站内

设成年公鹅战斗力为1鹅。如果2只鹅能和一只田园犬旗鼓相当或同归于尽,那么田园犬是2鹅。

以下就是楼主不负责任的随意排名:

蚂蚁:0.0001鹅蚊子:0.003鹅毛毛虫:0.003鹅蜗牛:0.005鹅中型蜘蛛:0.008鹅蚂蟥:0.01鹅蜜蜂:0.015鹅蜈蚣:0.02鹅麻雀:0.03鹅蝎子:0.05鹅老鼠:0.05鹅龙虾:0.1鹅牛蛙:0.12鹅大鲤鱼:0.15鹅较大的螃蟹:0.18鹅3岁以下儿童:0.2鹅小型无毒蛇:0.2鹅非洲牛蛙:0.22鹅鸭子:0.25鹅普通公鸡:0.3鹅皮皮虾:0.35鹅食人鱼:0.4鹅猴子:0.4鹅猫:0.45鹅斗鸡:0.7鹅10岁左右儿童:0.8鹅猫头鹰:1.0鹅羊:1.5鹅田园犬:2鹅家猪:3鹅成年男性:4鹅老鹰:6鹅藏獒:10鹅猎豹:10鹅马蜂群:15鹅鬣狗:20鹅狼:25鹅黄牛:30鹅鳄鱼:40鹅金钱豹:60鹅黑熊:80鹅熊猫:90鹅雌狮:70鹅雄狮:120鹅雄东北虎:150鹅棕熊:150鹅非洲野牛:180鹅河马:200鹅大白鲨:250鹅犀牛:300鹅亚洲雄象:400鹅非洲雄象:500鹅虎鲸:600鹅霸王龙:800鹅狮群(10只):1200鹅雷龙:1500鹅蓝鲸:4000鹅虎鲸群(10只):10000鹅

警察(持手枪):30鹅普通陆军士兵:200鹅坦克:5000鹅阿帕奇:12000鹅F16:50000鹅F22:30万鹅弹道导弹:500万鹅航母:1200万鹅核潜艇:1500万鹅航母战斗群:6000万鹅

.※ 修改:·riveryy 于 May 5 23:23:45 2017 修改本文·[FROM: 116.224.240.*]※ 来源:·水木社区 http://m.newsmth.net·[FROM: 116.224.240.*]

How to make flashcards online?

In this article I’ll tell you in detail how to use Flashcard.online editor to create your own flashcards.

Have a look at this video to see how the app works:

STEP 1. Prepare images

If you’re going to make flashcards without images, just go to the next step. If you’re planning to do cards with pictures, […]

亲爱的,我们再也回不去了,对不对?

发信人: wangsir (joker), 信区: Joke标 题: 亲爱的,我们再也回不去了,对不对?发信站: 水木社区 (Tue Apr 25 17:16:05 2017), 站内

下班时接女朋友回家,我们两人一路无语,整整三十分钟竟然找不出一个话题,走到门口时,她哭了,“亲爱的,我们再也回不去了,对不对?”听完,我心都凉了,一巴掌扇了过去:“你TM又把钥匙锁屋里了?”

刚拿到驾照,一次雨后出门,车速很快把积水浪到一小伙子身上,想道歉就倒车回去,结果又溅了他一身,这下不好意思下车道歉了,踩油门速速离开,结果又溅了他一身,还记得他那句传遍整条街的怒吼,我c你大爷

讲一过去真实的事,以前和几个哥们去偷鸡吃,学电视上做 叫花鸡,直接把鸡埋地下敷上土,在上面点火半个小时,扒开后,只见鸡浑身冒着热气跑了……

再来,

小时候比较淘,挨打无数。有次老妈让我去买一斤糯米粉包汤圆,我贪吃买了半斤,其他的钱买唐僧肉和芝麻糊了。走到半路袋子又被我划破了,糯米粉都撒了,走投无路之际看到人家堆放的石灰粉,装了一些回家交差,现在我还记得我爸体贴我妈的那句话:你先歇着,我来打会…

表弟刚刚打电话来批了我一顿,原因是我帮姑姑弄了个QQ号,加了表弟好友,表弟追了姑姑一个多星期,发现这个关心他的女人是他妈

那天,走在街上和闺蜜谈论前面两位男的谁攻谁受,“蓝外套的一定是受。”那个“受”字说的太响,蓝外套直接转过头说道:“你才是受,你全家都是受!”他旁边那位对他说:“媳妇,别激动,人家说的是胖瘦的瘦!”

今天街边买烧烤的来的晚了,我给他打电话,大哥在那边说:劳资卖了这么多年烧烤从来都是自由自在,自从特么认识了你,居然让我有了上班的感觉。

逛街见一男一女吵架女:为什么要这样对我!为什么!(撕心裂肺状)男:你别这样好不好?至于吗?女(蹲在地上痛哭):你不爱我了!男:祖宗!我给你买小布丁行不行!买两根!大姨妈肚子疼别赖我!女(擦擦鼻涕眼泪):我绝对不赖你!男:你都赖了多少次了…于是两人欢乐的牵手走了,留下我纠结的站着。—

Category

Archives