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 网络编程的更多相关文章

  1. 网络编程基础:网络基础之网络协议、socket模块

    操作系统(简称OS)基础: 应用软件不能直接操作硬件,能直接操作硬件的只有操作系统:所以,应用软件可以通过操作系统来间接操作硬件 网络基础之网络协议: 网络通讯原理: 连接两台计算机之间的Intern ...

  2. TCP/UDP Linux网络编程详解

    本文主要记录TCP/UDP网络编程的基础知识,采用TCP/UDP实现宿主机和目标机之间的网络通信. 内容目录 1. 目标2.Linux网络编程基础2.1 嵌套字2.2 端口2.3 网络地址2.3.1 ...

  3. 猫哥网络编程系列:HTTP PEM 万能调试法

    注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...

  4. python select网络编程详细介绍

    刚看了反应堆模式的原理,特意复习了socket编程,本文主要介绍python的基本socket使用和select使用,主要用于了解socket通信过程 一.socket模块 socket - Low- ...

  5. Linux Socket 网络编程

    Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...

  6. 猫哥网络编程系列:详解 BAT 面试题

    从产品上线前的接口开发和调试,到上线后的 bug 定位.性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期.不论你是前后端的开发岗位,还是 SQA.运维等其他技术岗位,掌握网络编程知识均是岗位的 ...

  7. 浅谈C#网络编程(一)

    阅读目录: 基础 Socket编程 多线程并发 阻塞式同步IO 基础 在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践. Socket是一种网络编程接口,它是对传输层T ...

  8. C++11网络编程

    Handy是一个简洁优雅的C++11网络库,适用于linux与Mac平台.十行代码即可完成一个完整的网络服务器. 下面是echo服务器的代码: #include <handy/handy.h&g ...

  9. Java - 网络编程

    Java的网络编程学习,关于计算机基础的学习参考:计算机网络基础学习 - sqh.     参考:  

随机推荐

  1. HCNA 2017年01月26日

    [Huawei]ping 127.0.0.1 PING 127.0.0.1: 56 data bytes, press CTRL_C to break Reply from 127.0.0.1: by ...

  2. 剑指Offer对答如流系列 - 实现Singleton模式

    目录 面试题2:实现Singleton模式 一.懒汉式写法 二.饿汉式写法 三.枚举 面试题2:实现Singleton模式 题目:设计一个类,我们只能生成该类的一个实例. 由于设计模式在面向对象程序设 ...

  3. PyCharm2019.3.3专业版完美激活

    在 PYPL 编程语言榜单上,Python 因近几年受欢迎程不断提高而继续霸榜.俗话说“萝卜青菜,各有所爱”,在众多的编辑器当中,因每个人的使用习惯不同,也会选择各自的喜欢的编辑器.Pycharm 分 ...

  4. 小程序redio 样式

    小程序 radio 不写样式大概是这样的 数据为测试数据. 为了增加用户体验我们一下 美化后大概是这样的 给他设定头部.左边间距 ,和自身最小宽度 上代码: wxml: <radio-group ...

  5. 实验11:EIGRP

    实验8-1:EIGRP 基本配置 实验目的通过本实验可以掌握:(1)在路由器上启动EIGRP 路由进程(2)启用参与路由协议的接口,并且通告网络(3)EIGRP 度量值的计算方法(4)可行距离(FD) ...

  6. SendInput模拟键盘操作

    #include <windows.h> int main() { HWND parentHwnd, childHwnd; INPUT input[4]; parentHwnd = Fin ...

  7. Linux 系统监控工具 atop

    系统监控是运维工作中重要的一环,本文以 atop 工具为例来介绍系统的重要监控项. atop可以使用yum或apt包管理器进行安装.atop man page 中详细说明了 atop 中各监控项含义及 ...

  8. Codeforces Round #617 (Div. 3) D. Fight with Monsters

    D : Fight with Monsters 题目大意 : 有一组数,每个值对应着一个怪物的 hp 值,现在有两个人,一个自己一个对手,每个人有一个攻击值, 两个人轮流攻击怪物,如果是自己将怪物先打 ...

  9. python学习Day27--time模块、sys模块、os模块和序列化模块

    [知识点] 1.时间模块: (1)时间戳时间,格林威治时间,float数据类型 英国伦敦的时间:1970.1.1     0:0:0 北京时间:1970.1.1     8:0:0 (2)结构化时间, ...

  10. Python Namespace - 命名空间

    命名空间 命名空间 namespace 对 python 来说是一个非常核心的概念,整个 python 虚拟机运行的机制与 namespace 概念有这非常紧密的联系. 从'赋值'说起, python ...