Learning hard 网络编程
1.1网络分层总览
网络上的计算机之所以可以互相通信,是因为它们都遵守着公认的互联网协议,就如同人与人的交流一样,两个人能够交流,就必须知道对方的语言,计算机的网络通信可归结为网络中层与层之间的通信,OSI(Open System Interconnection)模型把网络通信分成7层,物理层,数据链路层,网络层,传输层,会话层,表示层,应用层,
为了容易理解,网络应用开发人员一般将网络分成5层,物理层,数据链路层,网络层,传输层,应用层,
各层的主要功能,
物理层,负责二进制流的传输,为数据链路层提供一个传输比特流的物理连接,
数据链路层,提供介质访问,加强物理层的输出功能,建立一条无差错的传输路线,
网络层,网络层提供IP寻址和路由选择的功能,因为在网络上,源主机和目的主机可以处在同一个网络中,也可以分散在不同网络中,在由多网络组成的互联网中,会存在多条可以将源主机与目的主机连接在一起的通信线路,网络层的功能就是在这些线路中找出最佳的传输线程,
传输层,传输层为源主机和目的主机的通信提供了数据传输服务,它隔离了网络的上下层协议,使得网络应用与下层协议无关,
应用层,应用层提供面向用户的网络服务,如文件传输服务和远程登陆服务等,不同用户对应用层服务的需求也不一样,所以应用层定义了许多不同的协议,比较常用的有文件传输协议(FTP),超文本传输协议(HTTP),域名解析协议(DNS),简单邮件传输协议(SMTP)和邮局协议(POP3)等,
1.2各层所使用的协议
网络中的计算机互相通信就是实现了层与层之间的通信,为此,各层都要遵守规则以便更好的完成通信,我们把它们之间遵守的规则称作“协议”,
物理层协议,
物理层是五层模型中的最底层,它为计算机之间的数据通信提供了传输媒体和互连设备,为数据传输提供了可靠的环境,其中,媒体包括电缆,光纤和无线信道等,互联设备则指计算机和调制解调器之间的互联设备,如各种插头,插座等,该层的作用是透明的传输比特流(即二进制流),为数据链路层提供一个传输原始比特流的物理连接,
数据链路层协议,
数据链路层是模型中的第二层,该层对物理层传输过来的比特流进行分组,由一组电信号构成的数据包称作“帧”,数据链路层传输的就是以“帧”为单位的数据包,数据链路层最终会把数据包传递给网络层,
字节,如果数据过长,则必须分割成多个帧后在进行发送,
网络层协议,
该层通过寻址(寻址地址 )来建立两个节点之间的连接,大家知道,电脑连接上网络后都有一个IP地址,通过它我们可以确定不同的计算机是否在同一个子网络上,连接上网络的电脑有两种地址,一种是物理地址,另一种是网络地址,也就是IP地址,要想与网络上的某个计算机进行通信,首先需要用网络地址判断它是否与你的电脑处于同一个子网络,然后在对物理地址(MAC地址)进行处理,从而准确的确定要通信的计算机的位置,
网络层使用的是IP协议,目前广泛采用的是IP协议第4版(IPv4),这个版本规定网络地址由32位二进制位组成,你可以自己配置IP地址,也可以通过自动获得的方式来获得IP地址,IP地址分成两部分,前24位代表网络,后8位代表主机号,例如192.168.254.1和192.168.254.2就处于同一个子网络里,因为这两个IP地址的前24位是相同的,
网络层是以IP数据包的形式来传递数据的,IP数据包同样包括两部分,头(Head)和数据(Data),而且IP数据包是被放进帧数据包中的帧数据部分进行传输的,
传输层协议,
通过MAC和IP地址,你可以找到互联网上任意两台主机来建立通信,但这里有一个问题,主机上使用网络的程序有很多,比如当你一边听歌一边用QQ聊天时,如果网络上发送来一个数据包,主机如何知道它是用于聊天还是用于歌曲的呢,这时需要一个参数,来标识出该数据包是供哪个程序(进程)使用的,这个参数就是端口号,主机用端口号来标识不同的程序(进程),端口号是一个0到65535之间的整数,其中从0到1023的端口号已被系统占用,用户只能选择大于1023的端口号来标识程序,
网络层建立的是主机与主机之间的通信,而传输层则建立了端口与端口之间的通信,这样一旦确定了主机和端口号之后,你就可以实现程序之间的通信了,
传输层有两个非常重要的协议,UDP协议和TCP协议,
采用UDP协议进行通信时,传输的是UDP数据包,这种数据包也是由头和数据两部分组成的,头部分主要用来标识发送方和接收方的端口号,而数据部分则是具体的内容信息,UDP数据包被放在IP数据包中的数据部分,而IP数据包则进一步被放在了帧数据包中的帧数据部分进行传输,
UDP协议的可靠性差,它无法确定对方是否接收到数据,为保证可靠传输,我们可使用TCP协议完成通信,它通过3次握手的方式确保了数据的可靠传输,
应用层协议,
应用层是模型的最顶层,是用户与网络的接口,该层通过应用程序来满足网络用户的应用需求,应用层的数据被放在了TCP数据包的数据部分,该层定义了一个很重要的协议,HTTP协议,一般的Web应用都是基于应用层开发的,
1.3网络程序的工作机制
网络程序与传统单机程序有明显区别,网络程序够与网络上其它计算机中的程序进行通信,
网络上要与其它计算机进行通信,首先需要知道计算机的网络地址,Internet使用IP地址来标识计算机的网络地址,使用端口号来识别不同计算机上的进程,即通过“IP地址+端口号”的方式就可以唯一标识网络上特定计算机的特定进程,
除了需要知道通信程序的地址之外,网络通信也需要一定的规则,我们称之为“协议”,主机A中的程序和主机B中的程序只有采用了同样的协议,它们之间才可以正常通信,
地址有了,通信协议也有了,就可以使用套接字(Socket)来进行通信了,
IP地址,
互联网中,每台计算机(主机)都必须有一个唯一的IP地址,IP地址一般为32位(即4个字节/1个字节等于8位)大小,采用点分十进制的格式来表示,例如192.168.1.10,每个字节用一个十进制的整数来表示,并用点符号来分割各字节,
套接字,
主机A程序将传输信息写入至主机ASocket,然后通过与网卡相连的传输介质将信息传输至主机BSocket,主机B程序读取主机BSocket接收到的信息,将要回复的信息写入至主机BSocket,然后再次通过与网卡相连的传输介质将信息返回至主机ASocket,最后主机A程序读取主机ASocket,
两个程序之间的数据传输是通过套接字来完成的,可以将套接字理解为网络进程通信过程中所使用的一段缓冲区,
2.1
Learning hard 网络编程的更多相关文章
- 网络编程基础:网络基础之网络协议、socket模块
操作系统(简称OS)基础: 应用软件不能直接操作硬件,能直接操作硬件的只有操作系统:所以,应用软件可以通过操作系统来间接操作硬件 网络基础之网络协议: 网络通讯原理: 连接两台计算机之间的Intern ...
- TCP/UDP Linux网络编程详解
本文主要记录TCP/UDP网络编程的基础知识,采用TCP/UDP实现宿主机和目标机之间的网络通信. 内容目录 1. 目标2.Linux网络编程基础2.1 嵌套字2.2 端口2.3 网络地址2.3.1 ...
- 猫哥网络编程系列:HTTP PEM 万能调试法
注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...
- python select网络编程详细介绍
刚看了反应堆模式的原理,特意复习了socket编程,本文主要介绍python的基本socket使用和select使用,主要用于了解socket通信过程 一.socket模块 socket - Low- ...
- Linux Socket 网络编程
Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...
- 猫哥网络编程系列:详解 BAT 面试题
从产品上线前的接口开发和调试,到上线后的 bug 定位.性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期.不论你是前后端的开发岗位,还是 SQA.运维等其他技术岗位,掌握网络编程知识均是岗位的 ...
- 浅谈C#网络编程(一)
阅读目录: 基础 Socket编程 多线程并发 阻塞式同步IO 基础 在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践. Socket是一种网络编程接口,它是对传输层T ...
- C++11网络编程
Handy是一个简洁优雅的C++11网络库,适用于linux与Mac平台.十行代码即可完成一个完整的网络服务器. 下面是echo服务器的代码: #include <handy/handy.h&g ...
- Java - 网络编程
Java的网络编程学习,关于计算机基础的学习参考:计算机网络基础学习 - sqh. 参考:
随机推荐
- 用 F# 手写 TypeScript 转 C# 类型绑定生成器
前言 我们经常会遇到这样的事情:有时候我们找到了一个库,但是这个库是用 TypeScript 写的,但是我们想在 C# 调用,于是我们需要设法将原来的 TypeScript 类型声明翻译成 C# 的代 ...
- [CERC2016]凸轮廓线
题意 https://www.luogu.org/problem/P3680 思考 拆点即可. 注意精度. 代码 // luogu-judger-enable-o2 #include<bits/ ...
- C语言博客作业9
本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 作业链接 我在这个课程的目标是 熟练掌握C语言 这个作业在那个具体方面帮助我实现目标 pta作业的完成 参考文献 文章链接 本 ...
- Mbp通过筛选器和中间件实现异常,日志,事务及接口返回数据格式化aop处理.
Mbp应用服务层的AOP实现 实现方法:asp.net core mvc 筛选器 + 中间件 日志,事务,和接口返回结果统一格式化采用操作筛选器,而异常处理采用中间件来处理. 最开始,我是打算用aut ...
- ElasticSearch快速入门
知识储备 学习ElasticSearch之前可以先了解一下lucene,这里是我整理的一篇关于lucene的笔记(传送门),对搜索框架有兴趣的还可以了解一下另一款企业级搜索应用服务器---solr(传 ...
- Nutz框架-- Cnd条件使用原生sql
案例 今天接到一个临时的业务需求,做一个简单的过滤作为临时业务需要使用一两天,于是想到在原有的Cnd条件上加上一个Not like 进行过滤,但是发现现有Cnd条件查询好像满足不了 解决方案 使用Nu ...
- 基于 HTML5 WebGL 的智慧城市(一)
前言 中共中央.国务院在今年12月印发了<长江三角洲区域一体化发展规划纲要>(下文简称<纲要>),并发出通知,要求各地区各部门结合实际认真贯彻落实. <纲要>强调, ...
- vuede axios文件下载
this.loading = true; this.$http({ baseURL: CLOUD_BASE_SERVER_URL, url: '/audit/auditRun/ex ...
- JSP&Servlet学习笔记----第1/2章
HTML(HyperText Markup Language):超文本标记语言 HTTP(HyperText Transfer Protocol):超文本传输协议 URL(Uniform Resour ...
- CSS的常用单位介绍
①px: 像素单位:它是英文单词pixel的缩写,意思为像素,即构成图片的每一个点,为图片显示的最小单位.它是一个绝 对尺寸单位,是固定的. ②em: 相对长度单位:它是英文单词emphasize的缩 ...