西维蜀黍

【Network】Wireshark 抓包学习TCP通讯

三次握手 (Three-way Handshake) 过程

  ...


【Network】KCP

  ...


【Network】QUIC

  ...


【Network】TCP(Transmission Control Protocol)

TCP(Transmission Control Protocol)

TCP(Transmission Control Protocol)提供一种面向连接的、可靠的字节流服务。TCP连接是全双工的,即数据在两个方向上能够同时传递。

TCP和UDP处在同一层(传输层),但是TCP和UDP最不同的地方是,TCP提供了一种可靠(reliable)的数据传输服务,TCP是面向连接的。

也就是说,利用TCP通信的两台主机首先要经历一个“拨打电话”的过程,等到通信准备结束才开始传输数据,最后结束通话。所以TCP要比UDP可靠的多,UDP是把数据直接发出去,而不管对方是不是在收信,就算是UDP无法送达,也不会产生ICMP差错报文。

  ...


【Network】TCP 三次握手(TCP Three-way Handshake)

TCP 三次握手(TCP Three-way Handshake)

TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。

第一次握手 - 建立连接

客户端发送连接请求报文段,将Control Flag中的SYN位置为1,Sequence Number(发送序号)为x;然后,客户端进入 SYN_SENT 状态,等待服务器的确认。

SYN报文段是指,Control Flag中的SYN位为1的TCP报文段。

第二次握手 - 服务器收到SYN报文段

服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置 Acknowledgment Number(确认序号)为x+1(即Sequence Number+1);同时,自己还要发送SYN请求信息(即将 SYN 位为1),Sequence Number(发送序号)为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入 SYN_RECV 状态。

类似地,ACK报文段是指Control Flag中的ACK位为1的TCP报文段。而SYN+ACK报文段是指Control Flag中的SYN位和ACK位均为1的TCP报文段。

第三次握手 - 客户端收到服务器的SYN+ACK报文段

客户端收到服务器发送的SYN+ACK报文段后,将Acknowledgment Number(确认序号)设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端进入 ESTABLISHED 状态。当服务器端接收到这个ACK报文段后,服务器端进入 ESTABLISHED 状态,完成TCP三次握手。

而如果,客户端向服务器发送ACK报文段没有达到服务器端(或者延迟了),服务器会重新发送一个第二次握手阶段中的SYN+ACK报文段。

  ...


【Design Pattern】Structural — Decorator

定义

装饰器模式以对客户端透明的方式,给一个对象附加上更多的责任(以实现对对象功能的扩展)。

换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰器模式可以在不需要创造更多子类的情况下,将对象的功能加以扩展。这就是装饰器模式的模式动机。

  ...


【Spring】Spring 中的 IoC

什么是Spring?

Spring 是个Java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。

使用Spring框架的好处是什么?

  • 轻量:Spring 是轻量的,基本的版本大约2MB。

  • 控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。

  • 面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。

  • 容器:Spring 包含并管理应用中对象的生命周期和配置。

  • MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。

  • 事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。

  • 异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。

  ...


【Programming】面向切面编程(AOP)

Aspect Oriented Programming (AOP)

背景

AOP(Aspect Oriented Programming),即面向切面编程,可以说是**OOP(Object Oriented Programming,面向对象编程)**的补充和完善。

  ...


【Design Pattern】Structural - Proxy/Wrapper

代理模式(Proxy Pattern)

In computer programming, the proxy pattern is a software design pattern.

Proxy is a structural design pattern that lets you provide a substitute or placeholder for another object. A proxy controls access to the original object, allowing you to perform something either before or after the request gets through to the original object.

A proxy, in its most general form, is a class functioning as an interface to something else. The proxy could interface to anything: a network connection, a large object in memory, a file, or some other resource that is expensive or impossible to duplicate.

In short, a proxy is a wrapper or agent object that is being called by the client to access the real serving object behind the scenes. Use of the proxy can simply be forwarding to the real object, or can provide additional logic.

In the proxy, extra functionality can be provided, for example caching when operations on the real object are resource intensive, or checking preconditions before operations on the real object are invoked. For the client, usage of a proxy object is similar to using the real object, because both implement the same interface.

  ...


【Java】泛型(Generics)

什么是泛型(generics)

泛型(generics)是指参数化类型的能力。可以定义带泛型类型的类或方法,随后编译器会用具体的类型来代替它。

  ...