• 慕课网首页
  • 免费课
  • 实战课
  • 体系课
  • 慕课教程
  • 专栏
  • 手记
  • 企业服务
  • 猿问

我的购物车

已加入门课程

购物车里空空如也

快去这里选购你中意的课程

实战课

体系课

我的订单中心
去购物车
  • 登录 / 注册
  • 新人专属100元礼包 | 查看
抱歉,未找到你想要查询的结果
全部开发者教程

网络编程入门教程

网络编程
网络编程简介 网络参考模型及协议族介绍 网络编程概念介绍 互联网标准化组织 大小端序之争 Java Socket 地址结构 如何创建 Java TCP Socket Java TCP Socket 数据收发 如何创建 Java UDP Socket Java UDP Socket 数据收发 Java 服务器多线程编程 设置 Java Socket 选项 为什么需要非阻塞 Java Socket 编程 非阻塞 Java Socket 编程示例 非阻塞 Java NIO Channel 体系介绍 非阻塞 Java SocketChannel 介绍 Java NIO Selector 介绍 Java ByteBuffer 分析 Java Async SocketChannel 如何封装一个非阻塞式 Java 网络库
  • 前端开发

    JavaScript

    JavaScript 入门教程

    本教程带你从初级到高级全面掌握 Javascript 的使用方法

    TypeScript 入门教程

    这是一个很好的简单课程,只需2小时你就可以学习TypeScript基础知识。

    Vue 入门教程

    本教程带您从零开始学习 Vue 框架的使用,让您轻松应对 Vue 项目的开发。

    Ajax 入门教程

    本教程涵盖Ajax的实现原理,及Ajax封装,最后是框架实现方法。

    ES6-10 入门教程

    对比 ES5 进行学习 ES6+,理解 ES6+ 语法背后的思想

    Yarn 入门教程

    Yarn得相关基础知识和高级进阶

    ECharts 入门教程

    从零开始学习 ECharts ,掌握 ECharts 核心内容

    HTML & CSS

    CSS3 入门教程

    本课程从盒模型、文字、颜色、过渡、动画、布局、伪类等方面介绍 CSS3 的使用。

    雪碧图入门教程

    本文详细介绍了雪碧图的由来历史以及各种使用方式

    移动端布局教程

    由于移动互联网的兴起,移动端项目占据了很大一部分比重,本章将详细讲解几种常见布局

    Html5 入门教程

    最新一代的HTML标准,增加了许多实用的特性

    Sass 入门教程

    前端项目中 Sass 的快速入门教程

    HTML 入门教程

    从零讲解 HTML,掌握基础 HTML 知识内容

    canvas 入门教程

    本教程带你从初级到高级全面掌握canvas的使用方法

    uni-app 入门教程

    从零开始学习 uni-app 框架,轻松上手应用开发

  • 服务端相关

    服务器

    Nginx 入门教程

    本教程使您掌握 Nginx 安装、配置、核心模块的详解、实际使用的能力。

    HTTP 入门教程

    从协议原理开始到 Web 服务器以及 Web 安全一网打尽

    Docker 入门教程

    从 Docker 的基础概念开始,从实际问题入手带你学习 Docker

    Shell 入门教程

    本教程由浅入深,系统性的讲解Linux Shell脚本编程。

    Linux 入门教程

    本教程从安装 Linux 开始,囊括 Linux 基础命令操作以及进阶系统管理

    开发工具

    Gradle 入门教程

    本教程使您掌握实际使用gradle进行项目构建、测试、打包、发布的能力。

    Vim 编辑器教程

    课程主要讲解Vim的安装配置,四种模式、基本操作,以及包管理工具和寄存器等内容。

    RESTful 规范教程

    本教程从什么是 REST 开始带你领略 Web 开发中无处不在的规范

    Dreamweaver 教程

    DW 是一款同时具有网页制作和网页管理功能的网站开发工具,可以快速进行网站建设

    Markdown 入门教程

    本课程涵盖 Markdown 的基本及扩展语法。

    Maven 入门教程

    从最基础的安装 Maven 开始到 Maven 在开发中的实际应用

    Eclipse 编辑器教程

    本教程从Eclipse安装开始带你轻松掌握Eclipse常用开发技巧

    GitHub 入门教程

    本教程带你轻松掌握最实用的 GitHub 知识

    Android Studio 编辑器教程

    Android Studio 编程技巧一网打尽

    PyCharm 编辑器教程

    工作经常用到的 PyCharm 编辑器使用技巧一网打尽

    Sublime Text 使用教程

    花里胡哨展示sublime编辑器的各种功能

    Postman 教程

    Postman 由Google 开发用来做接口请求测试,前后端开发人员都可以使用

    Git入门教程

    从入门到精通。

    热门服务端语言

    C 语言入门教程

    本教程从语法基础、进阶知识等各方面详解 C 语言。

    Go 入门教程

    本教程从 Go 语言的基本语法掌握到进阶编程实践

    Kotlin 教程

    从 Kotlin 的基础语法到高级特性一网打尽

    Ruby 入门教程

    本教程从 Ruby 的各种对象开始学习到 Ruby 的实际使用

    ThinkPHP 入门教程

    本教程主要讲解 ThinkPHP 框架如何上手开发应用

  • Java

    基础应用

    Java 入门教程

    深入浅出讲解 Java 语言基础知识,带你入门 Java 语言

    Android 入门教程

    为你解析最实用的 Android 技术,让你平滑上手,顺利进阶,为开发保驾护航

    算法入门教程

    分析讲解常见算法的思想及使用

    数据结构入门教程

    通俗易懂的带你了解 Java 数据结构

    Lambda 表达式教程

    本教程展现了Lambda表达式的基础语法以及在程序中的应用

    Java 并发原理入门教程

    本教程为Java并发原理入门教程,在Java程序开发中占据着举足轻重的地位

    设计模式入门教程

    带你分析最常见的九个设计模式

    Java并发工具

    本课程简洁明了展示最基本的并发工具类相关概念及应用方法。

    JVM 入门教程

    JVM 入门教程,对JVM结构进行分模块讲解,简单易懂。

    RabbitMQ 入门教程

    超系统的RabbitMQ基础知识课程,你还在等什么?

    网络编程入门教程

    Java 网络编程核心要点详解

    后端通用面试教程

    带你系统梳理后端高频面试题,轻松丰富你的校招&社招阶段

    仿社交小程序

    商业级小程序 开发仿社交实战

    框架应用

    Spring Boot 入门教程

    循序渐进讲解 Spring Boot 企业级应用开发

    Spring 入门教程

    通俗易懂 渐进式讲解 Spring 企业级开发应用

    Hibernate 入门教程

    由浅入深讲解 Hibernate 企业级 JDBC 应用框架

    MyBatis 入门教程

    本教程整理出“百分之二十”的知识,帮你办到“百分之八十”事情

    Spring MVC 入门教程

    通俗易懂讲解 Spring MVC 框架应用

    Swagger 入门教程

    本课程以图文并茂的方式带你学习 Swagger 核心知识和应用剖析

    Zookeeper 入门教程

    由浅入深的 学习 ZooKeeper 的基本使用以及高级使用

    Netty 教程

    由浅入深的讲解 Netty 的核心知识体系,快速上手使用和理解 Netty

    Spring Security

    本课程涵盖了 Spring Security 框架的基本原理和集成方法

    微服务

    Spring Cloud Hystrix

    系统介绍 Hystrix 支持特性与实际应用场景实战

  • Python

    基础应用

    Python 入门语法教程

    本教程带你从 Python 的基础语法开始学习 Python。

    Python 原生爬虫教程

    本教程从爬虫基础知识到进阶技巧到实际应用。

    Python 进阶应用教程

    本教程涵盖 Python 的面向对象、标准库解析、异常处理直至最后的领域应用

    Python 算法入门教程

    用 Python 代码实现常用算法并汲取算法核心思想。

    进阶方向应用

    Django 入门教程

    从 Web 基础到 Django 框架的实际开发应用

    Flask 框架教程

    Flask 框架快速入门实现一个 TodoList 功能

    NumPy 入门教程

    本教程从基础的数据类型开始到 NumPy 的高级应用一网打尽

    Scrapy 入门教程

    从爬虫基础开始到使用 Scrapy 框架抓取各大网站数据

    TensorFlow 入门教程

    通过本教程对 TensorFlow 框架快速入门

    Python 办公自动化教程

    本教程带你使用Python快速操作Excel、Word、PPT,处理各种文件

    Pandas 入门教程

    本教程从基础的数据类型开始到 Pandas 的高级应用一-网打尽

  • 数据库

    MySQL

    MySQL 入门教程

    本教程主要讲解 MySQL 增删改查等基础操作

    SQL 入门教程

    本教程讲解使用 SQL 访问和处理数据系统中的数据的方法。

    MySQL 进阶教程

    那些你还不理解的 MySQL 高阶特性一网打尽

首页 慕课教程 网络编程入门教程 网络编程入门教程 网络编程简介
陈子兴 · 更新于 2021-06-08

网络参考模型及协议族介绍

下一节

网络编程简介

1. 前言

在计算机诞生之初,它们的体积非常庞大,它们常常被摆放在一个很大的房间内,这些房间通常都装有玻璃墙,你可以透过玻璃欣赏这个神奇的电子物种。一般来说,只有大学或者大型研究机构才会拥有先进的电子计算机,如果你需要通过这些大型计算机完成一些工作,需要走进机房,面对面的和它交流。现在看来,通过这些奇迹工作很不方便,但在当时来说,代表了最先进的科技实力。

随着 PC 的迅猛发展,以及计算机网络的诞生,很快这些计算机就被连接在了一起,你再不需要走进机房面对面和它交流了,通过远程就可以和他们交流了。当然,早期的计算机网络也是来源于大学和科研机构。然而计算机技术的发展真是太过迅猛了,经过短短几十年,从最早的专业科研机构的计算机网络,到现在的移动互联网、物联网,手机、家电、交通工具都实现了互联。

2. 什么是网络编程

我们今天所讨论的网络编程是指编写特定的应用程序,使得接入到计算机网络中的设备能够相互通信。网络设备之间的通信,需要程序员设计好特定的协议,然后通过编程语言实现这些协议,最终由计算机设备来执行。在计算机网络的发展过程中,通用的、基础的网络协议已经被实现在计算机操作系统中,通常叫做网络协议栈。而操作系统为程序员提供了网络相关的 API ,通常把它叫做 Socket。为此,网络编程也叫 Socket 编程、套接字编程。

任何事物的发展都有它的起源和历史,现在我们了解一下 Socket 的发展史。

3. Socket 发展史

我们现在以及今后所讨论的 Socket 都叫做 Berkeley (伯克利) Socket,是由加州大学伯克利分校的计算机系统研究小组发布的。从历史上来看,Berkeley Socket 是随着 4.x BSD(Berkeley Software Distribution) 操作系统一起发布的。BSD 操作系统最早是在贝尔实验室的 Unix V6 之上增加了一些新的功能,或者是一些优化,所以不是完全自己实现的,这个版本就是 BSD1。从 BSD1 开始,中间经历了好几个版本,直到 BSD 4.2 开始支持了 TCP/IP 软件。关于 Berkeley Socket 的发布历史年表,如下:

  • 4.2 BSD(1983)第一个包含 TCP/IP 的版本。
  • 4.3 BSD(1986)对 TCP/IP 的支持更加完善。
  • 4.3 BSD Tahoe(1988) 支持慢启动、拥塞避免等。
  • 4.3 BSD Reno(1990)支持 TCP 头部预测、SLIP 头部压缩等。
  • 4.4 BSD(1993)支持多播、长肥管道修改等。

由于 BSD 是基于 AT&T 的 UNIX 发布的,核心代码都是 AT&T 的 UNIX,所以受限于 AT&T License。伯克利的研究人员决定开发可以自由发布的系统,所以在 4.3 BSD Tahoe 基础之上,对系统中原有 AT&T 的源码进行重写,发布了 BSD Net/x 系列,它的历史年表如下:

  • BSD Net/1(1989)
    针对网络部分进行移植。
  • BSD Net/2(1991)
    对系统中网络以外的组件进行了移植,
  • BSD Net/3(1994)
    也叫 4.4 BSD-Lite,是一个系统功能比较完善的版本,符合 BSD license 的规定。后来出现的 OpenBSD、FreeBSD 都是基于 4.4 BSD-Lite 修改的。

4. 为什么要学习网络编程

现代人的生活已经离不开网络,不知道你是否体会过不带手机、家里不能上网的心情。不管你在意还是不在意,网络就在你身边,如影随形。想象一下,现代社会如果没有网络又会是什么状况呢?

当然,作为一名程序员,就算你不需要编写网络程序,但也应该理解网络通信原理。各种网络中间件、分布式框架、微服务框架,其中很大一部分工作都是在处理网络通信的逻辑,要想学习这些中间件不懂网络通信是很难学好的。另外,一些知名的网络库,它里面包含了许多优秀的设计理念和编程技巧,也是非常值得研读的,对于个人技术能力的提升具有很大的帮助。

5. 如何学习网络编程

要想学习网络编程,需要学习计算机网络基础知识。比如,TCP/IP 协议栈工作原理,分组在路由器中的存储、转发原理,可靠协议 TCP 的工作原理,不可靠协议 UDP 的工作原理等。

由于网络协议栈的发展是离不开操作系统的,所以需要学习操作系统的基础知识,比如进程、线程的基本概念。

学习编程必须要动手实践,只有当你亲自上机调试一些程序,你才能体会的更深刻,掌握的更牢固。

最后,你需要学会使用 tcpdump 和 Wireshark 这两个抓包工具,这俩个工具是解决很多网络相关问题的利器,可以说是开发人员工具箱里面必备工具。tcpdump 是 linux 系统自带的工具,而 Wireshark 是具有图形界面的工具,一般在 Windows 系统上使用。同时,要学会应用 ipconfig、netstat 等网络工具。

本系列文章的所有示例代码路径:

https://github.com/haska1025/imooc-sock-core-tech/tree/master/java_netprogramming

6. 小结

文中涉及到的所有示例程序都采用 JAVA 语言实现,JAVA 作为一门平台无关语言,天生就对网络编程提供了很好的支持。所以,需要具备一定的 JAVA 语言基础。当然,选择一款自己喜欢的 IDE 也是很重要的,这样可以提高你学习编程的效率。

另外,在调试网络程序的过程中,经常需要检查端口是否被占用,检查服务是否监听成功,定位消息收发失败等问题。所以需要学习一下 ipconfig、netstat 的使用方法,这两个工具都是系统自带的,使用非常方便。最好在你的个人电脑上安装一个 Wireshark 工具,方便问题的分析。

  • 划线
  • 写笔记
  • 复制

0/1000

 

下一节

网络参考模型及协议族介绍

我要提出意见反馈
· 最近更新于 请填写更新时间
使用手机查看
最近更新
向你推荐
更多
索引目录
网络编程简介
1. 前言
2. 什么是网络编程
3. Socket 发展史
4. 为什么要学习网络编程
5. 如何学习网络编程
6. 小结
意见反馈 收藏教程 标记书签
使用 Ctrl+D 可将网站添加到书签
  • 企业服务
  • 网站地图
  • 网站首页
  • 关于我们
  • 联系我们
  • 讲师招募
  • 帮助中心
  • 意见反馈
  • 代码托管

Copyright© 2023 imooc.com All Rights Reserved | 京ICP备 12003892号-11 京公网安备11010802030151号

意见反馈 常见问题 APP下载
官方微信
返回顶部