计算机网络——传输层:TCP与UDP

传输层与网络层一齐构建成了网络协议层次的核心。网络层解决的是计算机与计算机之间的通信问题,而传输层解决的是进程与进程之间的通信问题。传输层架构在网络层提供的服务之上,把数据传递服务从两台计算机之间拓展到两台计算机上的进程之间。因此,在传输层通信除了IP之外还需要有端口号来确认是与目标计算机上那个进程通信。与网络层类似的,传输层也提供了两种服务类型。一是面向连接的TCP传输,另外一种是无连接的UDP服务。所以要了解传输层的细节,就是要了解清楚TCP与UDP的细节。

UDP:用户数据报协议(User Datagram Protocol)为应用程序提供一种无需建立连接就可以发送封装的IP数据报的方法。UDP传输模型可以类比为邮递方式,发送方在发送之前无需建立连接,只需要知道接收方的地址(IP和Port),然后把数据报发送出去后,由网络自行路由,最终能否到达目的地,什么时候到达,发送方是不会得到反馈的。UDP除了提供发送数据包功能之外,几乎没有做任何事情,使用UDP传输的时候应用程序应该自己组织策略应对丢包、乱序和数据出错的情况。

TCP:传输控制协议(Transmission Control Protocol)是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。TCP传输模型可以类比为打电话,通信双方在通信之前必须先建立连接(IP和Port),然后在这个连接上收发数据,通信结束后要释放连接。TCP采用的是全双工连接,表示可以在两个方向上同时传输数据。为了提供可靠的端到端字节流传输,TCP在内部实现了丢包重传、乱序重排、校验数据的功能。此外TCP还实现了一个重要功能——拥塞控制,会通过一些数据来得知当前网络情况,在网络情况不好时降低发送速度,在网络情况优良时提高发送速度,从而让整个网络达到一个高效状态。正因为TCP实现了上述这么多的功能,所以TCP是Internet的主力军,大部分网络应用采用TCP传输数据。

想要真正了解TCP协议,就必须了解TCP应对网络不可靠情况做的策略。而要真正用好UDP,也要在一定程度上自己组织策略应对网络不可靠的情况。所以要了解传输层,用好TCP/UDP的核心就是了解要面对的情况及一些相应的处理方案。 Continue reading

Unite2018

去年的Unite大会在上海,同时有3个会场在进行分享,分别是国内技术专场、国外技术专场、同行分享专场。而今年的Unite大会在北京进行,今年技术专场同时有4个会场在进行,而且没有再按照分类划分。同样是两天的分享会,第一天主要是国外的技术人员分享,第二天主要是国内的技术人员和国内的开发团队分享。今年公司加上我有3个人参加,基本跟手游相关的都有涉及到,而我主要挑渲染与手游相关的分享参加,回来后大家也各自整理了相关的资料做了公司内部的分享。在此整理一下Unite2018我接触到的技术分享。

《从AAA游戏到实时渲染的动画电影》

以前的影视动画制作主要使用PathTracing技术来做渲染,画面比较真实,但耗时非常长,平均三十个小时渲染一帧。现在随着实时渲染技术的提升,越来越多的动画制作团队采用实时渲染技术来做影视动画。现阶段技术难点主要在于:材质、光源、灯光及抗锯齿。分享者是Unity全球技术艺术总监江毅冰,她分享了她自己在制作动画《WindUp》时采用的一些方案,讲解了如何处理上述4个难点,用实时渲染做出高质量的CG动画。

《Unity中的机器学习》

Unity2018自带了一套机器学习框架——MLAgent,它实际上是对GoogleTensorFlow的一个封装。运用MLAgent可以直接在Unity平台下开发机器学习相关的内容,包括训练,测试等等。MLAgent主要分为代理(Agent)、大脑(Brain)、学院(Academy)三部分。训练的方式有两种:Reinforcement Learning通过奖励学习,在不停的迭代中趋向“最优”;Imitation Learning通过模仿学习,与人实时交互,最终趋向于“拟人”。 Continue reading

计算机网络——总览

计算机网络这个标题实在是太广泛了,当中涉及太多的方面与相关知识,这篇博客作为总览尝试从几个不同的角度出发大致对计算机网络有一个基础的认识,后面再通过另外的博客来深入了解其中某些具体的技术。

说起计算机网络,普通人的第一印象可能就是因特网(Internet),但其实世界上存在着许许多多的网络,他们使用不同的技术、不同的规范标准以及不同的硬件和软件。所有能够相互互联通讯的网络都叫互联网(internet),而全球范围的互联网用大写Internet表示,称为因特网。

如果要深入学习计算机网络,首先要对计算机网络这么庞大的主题进行划分,如果从网络尺度上考虑,按照物理尺寸大致可以将计算机网络划分为以下多个系统:

个域网PAN:Personal Area Network,允许设备围绕一个人进行通信。例如蓝牙(bluetooth),采用主-从操作模式。还有使用射频识别技术RFID(Radio Frequency IDentification)构建的近场通信NFC(Near Field Communication)。

局域网LAN:Local Area Network,一般在一座建筑内,比如家庭或办公室。有线局域网使用IEEE802.3(俗称以太网)标准构建,使用一台交换机与局域网内的计算机通过点到点链路连接。交换机有多个端口,每个端口连接一台计算机,交换机的工作是中继与之连接的计算机的数据包,根据每个数据包中的地址来确定这个数据包要发往哪台计算机。无线局域网使用IEEE802.11(俗称WiFi)标准构建,使用一个无线接入点(AP, AccessPoint)中继无线设备之间的数据包,还负责中继无线设备与Internet之间的数据包。 Continue reading

《高性能MySQL》

        之前我对于MySQL的认识只是停留在会用的层面,虽然上一个游戏用的数据库就是MySQL,但也只是满足了使用需求,没怎么深入了解。这段时间读了《高性能MySQL》这本书,深入了解了MySQL并且学习到了如何更好的运用数据库。这本书的阅读基础是建立在读者对数据库有一定的使用经验上的。全书一直围绕着如何用好MySQL的这一主题来展开各个模块的内容,其中包括MySQL的底层机制、如何结合需求建表、各种数据类型的特性、索引的使用、查询语句优化、如何测试数据库、如何备份还原数据库以及各种工具的使用等等。下面会列一些比较重要的知识点作为记录,供大家参考。

Continue reading

心乐之路——2015至2017年创业经历

        故事要从2014年开始讲。当时我在剑网三做表现逻辑,认识了负责做动作的王俊仁,平常工作交流比较多,偶尔也下楼喝东西闲聊。有一次聊到他之前做过的一个动画短片,短片中女主角双手持双剑从树上一跃而下对BOSS进行快速连击,动作短促迅捷而富有节奏感。接着男主角出场追击BOSS,单手持宽刃刀,动作刚猛,大开大合,战斗风格与女主角截然不同但各有各的美感。虽然整个视频只有短短的26秒,但展示了两种截然不同的战斗打击表现,更重要的是带出了多角色相互配合连击的玩法。我们两个都觉得这个玩法很有意思,要是能实现成游戏大家一齐玩一定很有意思。于是从那时候起我们就利用业余时间来做这个游戏。

        当时我们在西山居基本都是朝九晚九,各自回到家后继续写代码和制作美术资源,经常到晚上一两点还在QQ上交流。然后周末就一齐带着笔记本到咖啡店里碰头,讨论游戏制作遇到的各种问题还有联调游戏的各种细节,从早上咖啡店开门待到晚上咖啡店关门。那段时间虽然很累,条件也很有限,但一步一步搭建自己喜欢的游戏,那种快乐是无价的。

         Continue reading