网络编程懒人入门(十四):到底什么是Socket?一文即懂!
引言本系列文章前面那些主要讲解的是计算机网络的理论基础,但对于即时通讯IM这方面的应用层开发者来说,跟计算机网络打道的其实是各种API接口。 本篇文章就来聊一下网络应用程序员最熟悉的Socket这个东西,抛开生涩的计算机网络理论,从应用层的角度来理解到底什么是Socket。 对于 Socket 的认识,本文将从以下几个方面着手介绍: ***1)***Socket 是什么; ***2)***Socket 是如何创建的; ***3)***Socket 是如何连接的; ***4)***Socket 是如何收发数据的; ***5)***Socket 是如何断开连接的; ***6)***Socket 套接字的删除等。 特别说明:本文中提到的“Socket”、“网络套接字”、“套接字”,如无特殊指明,指的都是同一个东西哦。 *** 推荐阅读:**《深入操作系统,一文搞懂Socket到底是什么》一文也非常适合初学者。另一篇《我们在读写Socket时,究竟在读写什么?》,相信可进一步为你解惑。 Socket...
网络编程懒人入门(十三):一泡尿的时间,快速搞懂TCP和UDP的区别
引言网络协议是每个搞网络通信应用开发(比如IM、推送、网关等等)的程序员都必须要掌握的基础知识,TCP/IP协议簇中有两个最具有代表性的传输层协议——分别是 TCP 和 UDP。 有过网络通信开发经验的同学们都知道,TCP和UDP协议是平时用的最多的两种协议,而对于很多人来说,什么时候以及什么场景下该用TCP还是UDP?这是个经久不息的讨论话题。 不同于其它长篇大论,本文尽量以简洁精炼的文字,帮你总结归纳TCP和UDP协议的主要区别,方便那些想掌握这方面知识又不愿意耗费太多时间去系统地学习网络理论基础的同学快速理解! 推荐阅读:为了加深理解,本系列的另一篇《网络编程懒人入门(四):快速理解TCP和UDP的差异》也可以一并阅读。 快速理解TCP/IP协议簇计算机与网络设备要相互通信,双方就必须基于相同的方法。比如:如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议(protocol)。 TCP/IP...
网络编程懒人入门(十二):快速理解TCP和UDP的差异
引言HTTP3是HTTP协议的最新版本。从诞生之初,HTTP就是交换超文本文档的首选应用层协议。多年来,为了跟上互联网的发展,以及WWW上交换的内容种类增加,HTTP进行了几次重大升级,而HTTP/3就是目前的最新版本。 本文将从HTTP/3的基本概念、技术原理、应用场景和如何使用它等方面进行介绍,确保在有限的篇幅内,能让你通俗地理解它。 HTTP协议的演进史在万维网诞生之时,万维网仅仅是一群交换超文本文件的计算机。在计算机之间交换文件是一个简单的程序,包括请求和响应。在此基础上设计了一个简单的基于文本的协议。HTTP(超文本传输协议)应运而生。后来,它被起草成了一个标准化的IETF协议,定义在RFC...
网络编程懒人入门(十一):一文读懂什么是IPv6
引言现在IPv6的技术应用已经越来越普及了,很多应用都开始支持IPv6。 ▲ 去年开始,支付宝的官网上就已出现“支持IPv6”标识 对于即时通讯技术(尤其是IM应用)的开发者来说,新产品上架苹果的App Store因IPv6问题被拒的情况,很常见。每次也都能根据网上的资料一一解决,并顺利通过审核。 然而几次下来,到底什么是IPv6,还是有点云里雾里。 那么,IP协议在TCP/IP体系中到底有多重要?看看下图便知(原因清晰版:从此处进入下载)。 ▲...
网络编程懒人入门(十):一泡尿的时间,快速读懂QUIC协议
TCP协议到底怎么了?现时的互联网应用中,Web平台(准确地说是基于HTTP及其延伸协议的客户端/服务器应用)的数据传输都基于 TCP 协议。 但TCP 协议在创建连接之前需要进行三次握手(如下图 1,更详细原理请见《理论经典:TCP协议的3次握手与4次挥手过程详解》),如果需要提高数据交互的安全性,既增加传输层安全协议(TLS),还会增加更多的更多握手次数(如下图 2)。 ▲ 图 1 - TCP的三次握手原理图 ▲ 图 2 - TLS的初始化握手原理图 正如上面两张图里演示的原理,TCP 协议连接建立的成本相对较高。 所以,一般的稳定网络传输都是通过TCP,但是在网络基建本身就已经越来越完善的情况下,TCP设计本身的问题便暴露了出来,特别是在弱网环境下,让我们不得不考虑一些新的可能性。 QUIC协议登场和 TCP 相反,UDP 协议是无连接协议。客户端发出 UDP...
网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?
前言标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西。本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么。 关于作者 翟志军,个人博客地址:https://showme.codes/,Github:https://github.com/zacker330。感谢作者的原创分享。 书上说的*基本概念:* 如今的网络是分层来实现的,就像是搭积木一样,先设计某个特定功能的模块,然后把模块拼起来组成整个网络。局域网也不例外,一般来说,在组网上我们使用的是[IEEE802](https://baike.baidu.com/item/IEEE...
网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接
引言好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不能理解Web短连接(就是最常见的HTTP通信了)跟长连接(主要指TCP、UDP协议实现的socket通信,当然HTML5里的Websocket协议也是长连接)的区别,导致写即时通讯这类系统代码时往往找不到最佳实践,搞的一脸蒙逼。 本篇我们先简单了解一下 TCP/IP,然后通过实现一个 echo 服务器来学习 Java 的 Socket API。最后我们聊聊偏高级一点点的 socket 长连接和协议设计。 另外,本系列文章的前2篇《网络编程懒人入门(一):快速理解网络通信协议(上篇)》、《网络编程懒人入门(二):快速理解网络通信协议(下篇)》快速介绍了网络基本通信协议及理论基础,如果您对网络基础毫无概念,则请务必首先阅读完这2篇文章。本系列的第3篇文章《网络编程懒人入门(三):快速理解TCP协议一篇就够》有助于您快速理解TCP协议理论的方方面面,建议也可以读一读。 TCP...
网络编程懒人入门(七):深入浅出,全面理解HTTP协议
前言HTTP(全称超文本传输协议,英文全称HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。 对于移动端即时通讯(尤其IM应用)来说,现今主流的数据通信总结下来无外乎就是长连接+短连接的方式,而短连接在应用上讲就是本文将要介绍的HTTP协议的应用,而而正确地理解HTTP协议对于写好IM来说,是相当有益的(关于移动端的HTTP具体应用情况,可以阅读《现代移动端网络短连接的优化手段总结:请求速度、弱网适应、安全保障》)。 “HTTP之父”其人 ▲ “HTTP之父”——Ted Nelson ▲ HTTP协议logo 1960年Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。 Ted Nelson组织协调万维网协会(World Wide Web Consortium)和Internet工作小组(Internet Engineering...
网络编程懒人入门(六):史上最通俗的集线器、交换机、路由器功能原理入门
前言即时通讯网整理了大量的网络编程类基础文章和资料,包括《TCP/IP协议...
网络编程懒人入门(五):快速理解为什么说UDP有时比TCP更有优势
前言对于即时通讯开者新手来说,在开始着手编写IM或消息推送系统的代码前,最头疼的问题莫过于到底该选TCP还是UDP作为传输层协议。本文延续《网络编程懒人入门》系列文章的风格,通过快速对比分析 TCP 和 UDP...