Yanick's Blog

Be Better & Have Fun

前言

关于Netty我们都知道(现在还不知道的Netty的怕是凤毛麟角)

Netty is an asynchronous event-driven network application framework
for rapid development of maintainable high performance protocol servers & clients.

Netty是一个异步事件驱动的应用框架,能够让我们更快的做一些网络开发。

阅读此系列博文,我对你的要求是 使用过原生的Java Nio进行过网络编程。
此篇博客算是我阅读Netty的笔记,会有自己探索的过程,望斧正。

阅读全文 »

TCP是基于IP 报文上层的一个协议,和上文所言的UDP不同,TCP是为了在恶劣的网络条件下,依然可以提供可靠的网络连接所提供的一种协议。

TCP 协议概述

TCP

  • TCP提供的是流(可以想象成一个管道)
  • TCP拥有发送和接受缓存
  • TCP按报文段分发
  • TCP是可靠的会进行数据包检查

总而言之和UDP不同,TCP是提供面向连接的协议,比如需要在A-B之间通讯,我们需要使用TCP在A和B之间建立连接

阅读全文 »

UDP是基于IP 报文上层的一个协议,在TCP/IP协议簇中也提及到,其实UDP只是比IP多提供了进程到进程之间的通讯,除此之外并没有提供额外什么功能。

UDP 协议格式

udp

值得注意的点:

  • UDP头部多了源端口号和目标端口号
  • UDP依然受限于IP的报文大小最大65535,还需要减掉20个UDP的报文头,也就是65507
阅读全文 »

IP 协议格式

ip

IP 报文是 无连接 的,IP报文可能出现丢失,重复等等,这个在IP协议中是无任何保证的,IP协议就是能够将数据发送到目标地址即可。
值得注意的点:

  • IP的头部中有一个总长度字段,这个是以字节为单位的,这个单位只有16位,所以最大为 2^16 = 65535 长度,不过依然会被MTU限制切分
  • 标识字段:这个字段为每一个报文生成一个累加的值,对于数据分片的时候,如果标识字段相同即可认为是同一个数据片
  • TTL:代表最大的调数,每经过一个Route就减一,等于0的时候就自然被丢弃
阅读全文 »

Java BIO

传统的网络模式是BIO的模式
BIO

我们发现BIO编程模型中最为致命的部分就是 我们需要为 Stream 使用一个 Thread
所以在JDK1.6中引入了NIO,优化这一部分。

阅读全文 »

预备知识

OSI
网络是分层的,TCP/IP 关注的是 第三层采用 IP 协议 和 第四层 采用的是 TCP 和 UDP 协议。
对于第一层和第二层,我们需要在意的是 MTU (最大传输单元),
这个值有一个最小值,因为载波监听的需求,并没强制性的最大值,Lan默认的是1500。(如何优化MTU可以见 参考2) 如何查询MTU可以通过 ifconfig 命令查询。

阅读全文 »

每次公司有新同事,总是会问应该学点什么,每次都回答一遍才挺费力的,索性找个时间把之前看过的东西都好好的整理一下,也权当是回归。

阅读全文 »

背景

在自己的职业规划中我认为未来是属于物理网的,我觉得技术的核心在与 采集 传输 计算 储存,采集和我的原本的专业方向不是很匹配,我把自己定性为研究传输和储存,我决定从网络传输上开始学习。

阅读全文 »
0%