网络技术
文章平均质量分 96
hanpfei
实时音视频开发。
展开
-
TCP异常终止
TCP异常终止 Reset报文TCP 的异常终止是相对于正常释放 TCP 连接的过程而言的,我们都知道,TCP 连接的建立是通过三次握手完成的,而 TCP 正常释放连接是通过四次挥手来完成,但是有些情况下,TCP 在交互过程中会出现一些意想不到的情况,导致 TCP 无法按照正常的四次挥手来释放连接,如果此时不通过其他的方式来释放 TCP 连接的话,这个 TCP 连接将会一直存在,占用系统的部分资原创 2017-08-17 10:39:12 · 1797 阅读 · 0 评论 -
UDT协议实现分析——UDT初始化和销毁
UDT协议是一个用于在高速Internet上传输大量数据的基于UDP的可靠传输协议。我们可以将UDT协议的实现看作一个比较复杂的状态机。更准确的说,是一个主状态机,外加多个子状态机。主状态机是指协议实现中全局唯一、全局共享的状态与数据结构,主要对应于CUDTUnited类。子状态机则是对于一次UDT连接或一个Listening的UDT Server的抽象,是UDT自己创建的Socket抽象,一个原创 2017-08-17 10:38:04 · 605 阅读 · 0 评论 -
OkHttp3中的HTTP/2首部压缩
当前网络环境中,同一个页面发出几十个HTTP请求已经是司空见惯的事情了。在HTTP/1.1中,请求之间完全相互独立,使得请求中冗余的首部字段不必要地浪费了大量的网络带宽,并增加了网络延时。以对某站点的一次页面访问为例,直观地看一下这种状况:Header 1Header 2如上图,同一个页面中对两个资源的请求,请求中的头部字段绝大部分是完全相同的。"User-Agent" 等头部字段通原创 2017-08-17 10:37:55 · 2092 阅读 · 1 评论 -
Caddy Web服务器QUIC部署
Caddy 简介Caddy是一个Go语言写的,易于使用的通用Web服务器。它具有如下的一些功能:配置简单:Caddy服务器的运行可以通过Caddyfile配置文件进行配置,Web服务配置起来非常简单。自动的HTTPS:它可以自动地为我们申请 Let's Encrypt 域名证书,管理所有的密码学设施,并进行配置。HTTP/2:默认支持HTTP/2(由Go标准库支持)虚拟主机托管原创 2017-08-17 10:37:52 · 5664 阅读 · 0 评论 -
HTTP/2 流量调试
当前主要可以通过浏览器和Wireshark等工具调试HTTP/2流量。使用浏览器调试HTTP/2流量HTTP/2 引入二进制分帧层(Binary Framing),将每个请求和响应分割为更小的帧,并对它们进行二进制编码。与此同时,HTTP/2 沿用之前 HTTP/1.1中的绝大部分语义,上层应用基本上感知不到 HTTP/2 的存在。通过浏览器提供的网络调试工具我们可以清晰地看到请求和响应的详细原创 2017-08-17 10:37:35 · 1866 阅读 · 0 评论 -
OkHttp3的连接池及连接建立过程分析
如我们前面在 OkHttp3 HTTP请求执行流程分析 中的分析,OkHttp3通过Interceptor链来执行HTTP请求,整体的执行过程大体如下:OkHttp Flow这些Interceptor中每一个的职责,这里不再赘述。在OkHttp3中,StreamAllocation是用来建立执行HTTP请求所需网络设施的组件,如其名字所显示的那样,分配Stream。但它具体做的事情根据是原创 2017-08-17 10:37:29 · 3471 阅读 · 1 评论 -
Cronet android 设计与实现分析——备选服务机制
前面我们分析到,在URLRequestHttpJob::StartTransactionInternal()中,会通过URLRequestContext的HttpTransactionFactory创建HttpTransaction,在URLRequestContextBuilder::Build()中创建HttpTransactionFactory的过程如下: storage->set_ht原创 2017-08-17 10:37:26 · 1380 阅读 · 0 评论 -
使用QUIC
QUIC是Google新开发的一个基于UDP的协议,它提供了像TCP一样的传输可靠性保证,可以实现数据传输的0-RTT延迟,灵活的设计使我们可以对它的拥塞控制及流量控制做更多的定制,它还提供了传输的安全性保障,以及像HTTP/2一样的应用数据二进制分帧传输。而QUIC协议最最吸引人的特性有两点,一是对队首阻塞问题的解决更为彻底。基于TCP的HTTP/2,尽管从逻辑上来说,不同的流之间相互独立,不原创 2017-08-17 10:37:23 · 3286 阅读 · 0 评论 -
OkHttp3中的代理与路由
HTTP请求的整体处理过程大体可以理解为,建立TCP连接。如果是HTTPS的话,完成SSL/TLS的协商。发送请求。获取响应。结束请求,关闭连接。然而,当为系统设置了代理的时候,整个数据流都会经过代理服务器。那么代理设置究竟是如何工作的呢?它是如何影响我们上面看到的HTTP请求的处理过程的呢?是在操作系统内核的TCP实现中的策略呢,还是HTTP stack中的机制?这里我们通过Ok原创 2017-08-17 10:37:20 · 3911 阅读 · 0 评论 -
Netty HTTP on Android
Netty是一个NIO的客户端服务器框架,它使我们可以快速而简单地开发网络应用程序,比如协议服务器和客户端。它大大简化了网络编程,比如TCP和UDP socket服务器。“快速而简单”并不意味着开发出来的应用可维护性或性能不好。Netty已经实现了大量的协议,比如FTP,SMTP,HTTP,以及各种基于二进制和文本的传统协议。可以说Netty已经找到了一种方法来实现简单的开发,高性能,稳定性,灵原创 2017-08-17 10:37:05 · 963 阅读 · 0 评论 -
chromium net库设计
总览网络栈主要地是一个单线程跨平台的库,主要负责资源获取。它的主要接口是URLRequest和URLRequestContext。URLRequest,正如它的名字所表明的那样,表示一个URL的请求。URLRequestContext包含实现URL请求所需的所有相关上下文,比如cookies,主机解析器,代理解析器,cache,等等。多个URLRequest对象可以共享相同的URLRequest原创 2017-08-17 10:37:02 · 809 阅读 · 0 评论 -
OkHttp3 HTTP请求执行流程分析
OkHttp3的基本用法使用OkHttp3发送Http请求并获得响应的过程大体为:创建OkHttpClient对象。OkHttpClient为网络请求执行的一个中心,它会管理连接池,缓存,SocketFactory,代理,各种超时时间,DNS,请求执行结果的分发等许多内容。创建Request对象。Request用于描述一个HTTP请求,比如请求的方法是"GET"还是"POST",请求的UR原创 2017-08-17 10:36:53 · 3619 阅读 · 0 评论 -
OSI 网络协议模型为什么是 7 层?
OSI 网络协议模型为什么是 7 层呢?相信不少朋友心中都有这样的疑问。Douglas E. Comer 先生的个人主页上的一篇文章 How the 7-layer reference model was invented 讲述了 OSI 7 层网络协议参考模型的由来。(Douglas E. Comer 先生在网络界的盛名不需多说,相信很多朋友都读过他的非常棒的讲述网络协议的三卷本著作《用 T原创 2018-01-31 18:38:21 · 984 阅读 · 0 评论 -
QUIC 之路
QUIC (Quick UDP Internet Connections,快速 UDP 网络连接) 是一个新的默认加密的互联网传输协议,它提供了大量改进用于加速 HTTP 流量并使它更安全,以实现最终在 Web 上替换 TCP 和 TLS 的目标。这篇博文中我们将概述 QUIC 的一些关键特性,及它们如何使 Web 受益,以及在支持这个基础的新协议上的一些挑战。事实上有两个协议,它们共享相同的...翻译 2019-03-25 16:20:38 · 992 阅读 · 0 评论 -
UDT协议实现分析——UDT Socket的创建
UDT API的用法在分析 连接的建立过程 之前,先来看一下UDT API的用法。在UDT网络中,通常要有一个UDT Server监听在某台机器的某个UDP端口上,等待客户端的连接;有一个或多个客户端连接UDT Server;UDT Server接收到来自客户端的连接请求后,创建另外一个单独的UDT Socket用于与该客户端进行通信。先来看一下UDT Server的简单的实现,UDT的开发者原创 2017-08-17 10:38:07 · 3342 阅读 · 1 评论 -
UDT协议实现分析——bind、listen与accept
UDT Server启动之后,基于UDT协议的UDP数据可靠传输才成为可能,因而接下来分析与UDT Server有关的几个主要API的实现,来了解下UDT Server是如何listening在特定UDP端口上的。主要有UDT::bind(),UDT::listen()和UDT::accept()等几个函数。bind过程通常UDT Server在创建UDT Socket之后,首先就要调用UDT原创 2017-08-17 10:38:10 · 845 阅读 · 0 评论 -
标准STUN判断NAT类型的过程及改进
这里基于stund的实现,来研究标准STUN协议,判断NatType的过程。stund用于判断NatType的接口的用法首先来看stund中用于判断NatType的接口的用法。这里主要来看stund中的STUN客户端client.cxx的实现。client.cxx是一个常规的C/C++ app,这个app的主要code如下:void usage() { cerr << "Usage:原创 2017-08-17 10:39:06 · 2025 阅读 · 0 评论 -
WiFi 热点共享设置
Windows 平台以管理员身份运行 cmd点击开始, 选择 附件,找到命令提示符,右键单击选择 以管理员身份运行。runcmd.png设置 WLAN 模式输入如下命令,并回车,将无线网卡设置为承载网络模式:netsh wlan set hostednetwork mode=allow ssid="HanpfeiAP" key=“1234567890”输出以下信息表示设置成功:原创 2017-08-17 10:39:09 · 631 阅读 · 0 评论 -
OkHttp实现分析之Websocket
HTML5 拥有许多引人注目的新特性,WebSocket就是其中之一。WebSocket一向有着 “Web 的 TCP ”之称。通常 WebSocket 都是用于Web的,用于构建实时的 Web 应用。它可以在浏览器和服务器之间提供一个基于 TCP 连接的双向通道。WebSocket 协议本质上是一个基于 TCP 的协议。为了建立一个 WebSocket 连接,客户端浏览器首先要向服务器发起一个原创 2017-08-17 10:39:03 · 5081 阅读 · 1 评论 -
QUIC协议规范
title: QUIC协议规范date: 2017-01-13 18:35:49categories: 网络协议tags:网络协议QUIC翻译介绍QUIC (Quick UDP Internet Connection,快速UDP互联网连接) 是一个新的基于UDP的多路复用且安全的传输协议,它从头开始设计,且为 HTTP/2 语义做了优化。尽管以 HTTP/2 作为主要的应用协议而构原创 2017-08-17 10:38:57 · 6249 阅读 · 0 评论 -
QUIC加密协议
QUIC加密协议是QUIC的一部分,它为连接提供了传输安全性。QUIC加密协议是注定要消亡的。未来它将由TLS 1.3替代,但在TLS 1.3 最终启用之前QUIC需要一个加密协议。借助于当前的QUIC加密协议,当客户端已经缓存了关于服务器的信息时,它可以无需往返就建立一个加密的连接。TLS,相反地,至少需要两次往返(算上TCP的3次握手)。原创 2017-08-17 10:38:54 · 5125 阅读 · 4 评论 -
Traceroute
traceroute,现代 Linux 系统上的 tracepath,还有Windows 系统上的 tracert,均是用于同一目的的网络调试工具。它们用于显示数据包在IP网络中经过的路由器的IP地址。原理这些程序是利用IP数据包的存活时间(TTL)值来实现其功能的。当一台计算机发送IP数据包时,会为数据包设置存活时间(TTL)值。每当数据包经过一个路由器,其存活时间值就会减 1。当存活时间减原创 2017-08-17 10:38:48 · 1092 阅读 · 0 评论 -
初始DNS服务器地址是哪里来的?
DNS 是互联网中非常重要的一个系统。任何主机、设备,要想访问网络,几乎都需要先通过 DNS 服务器,查询主机的 IP 地址,然后才能与目标主机通信。通常情况下,我们都是无需为主机或设备设置 DNS 服务器地址的,那么那些 DNS 服务器地址究竟是哪里来的呢?难道是厂商事先在计算机里面埋的静态地址么?如果是这样的话,如果 DNS 服务器的 IP 地址改变了要如何处理呢?这里我们就通过 Wiresh原创 2017-08-17 10:38:45 · 4634 阅读 · 0 评论 -
网络优化实践探索文章
携程App的网络性能优化实践2016年携程App网络服务通道治理和性能优化实践蘑菇街App Chromium网络栈实践手机淘宝性能优化无线性能优化:域名收敛Facebook App对TLS的魔改造:实现0-RTT腾讯HTTPS性能优化实践Android微信智能心跳方案微信 MarsWebkit 远程调试协议初探基于TLS1.3的微信安全通信协议mmtls介绍微信Mars——移原创 2017-08-17 10:38:42 · 301 阅读 · 0 评论 -
Android平台Chromium net中的代理配置信息获取
在计算机网络中,代理服务器 扮演着发起请求的客户端与服务器之间的中间人的角色。客户端连接到代理服务器,请求一些服务,比如文件,网页,或其它可以从服务器获得的资源,代理服务器以简化和控制复杂度的形式获取请求的响应。代理被发明以为分布式系统添加结构和封装。在我们做移动端开发时,代理常常可以作为我们网络调试的利器。然而我们设置的代理究竟是如何对网络访问的整个过程产生影响的呢?本文将尝试回答这个问题。原创 2017-08-17 10:38:33 · 1388 阅读 · 0 评论 -
Android端打开HttpDns的正确姿势
什么是HttpDns?DNS服务用于在网络请求时,将域名转为IP地址。传统的基于UDP协议的公共DNS服务极易发生DNS劫持,从而造成安全问题。HttpDns服务则是基于HTTP协议自建DNS服务,或者选择更加可靠的DNS服务提供商来完成DNS服务,以降低发生安全问题的风险。HttpDns还可以为精准调度提供支持。因而在当前网络环境中得到了越来越多的应用。HttpDns的协议则因具体实现而异。原创 2017-08-17 10:38:30 · 2171 阅读 · 0 评论 -
QUIC/HTTP2相关资料整理
网络基础技术 The Transport Layer Security (TLS) Protocol Version 1.2 Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing TLS v1.3规范QUIC QUIC主页 QUIC概要设计文档 QUIC传输格式的详细设计文档 Google的QUIC协议:可以原创 2017-08-17 10:38:19 · 505 阅读 · 0 评论 -
UDT协议实现分析——连接的建立
UDT Server在执行UDT::listen()之后,就可以接受其它节点的连接请求了。这里我们研究一下UDT连接建立的过程。连接的发起来看连接的发起方。如前面我们看到的那样,UDT Client创建一个Socket,可以将该Socket绑定到某个端口,也可以不绑定,然后就可以调用UDT::connect()将这个Socket连接到UDT Server了。来看UDT::connect()的定原创 2017-08-17 10:38:13 · 1912 阅读 · 0 评论 -
QUIC 之类的可靠传输协议
互联网是一个分组(或者称为数据包)交换网络,其中传输的数据的基本单位是数据包。互联网中时时刻刻在发生的是距离有限的两个路由节点之间通过物理链路的数据包交换。那互联网中远距离复杂环境下的数据传输究竟如何完成的呢?它们正是借助于多次路由节点间直接的这种数据交换完成的。直觉上就让人觉得这种数据传输不是那么的可靠,不像电话网络连接那样。实际上互联网的数据传输确实不是百分之百的可靠,互联网上传输的数据天然地...原创 2019-03-28 11:29:04 · 1133 阅读 · 0 评论