zoukankan      html  css  js  c++  java
  • Learning hard 网络编程

    1.1网络分层总览

    网络上的计算机之所以可以互相通信,是因为它们都遵守着公认的互联网协议,就如同人与人的交流一样,两个人能够交流,就必须知道对方的语言,计算机的网络通信可归结为网络中层与层之间的通信OSI(Open System Interconnection)模型把网络通信分成7层,物理层,数据链路层,网络层,传输层,会话层,表示层,应用层,

    为了容易理解,网络应用开发人员一般将网络分成5层,物理层,数据链路层,网络层,传输层,应用层,

    各层的主要功能,

    物理层,负责二进制流的传输,为数据链路层提供一个传输比特流的物理连接,

    数据链路层,提供介质访问,加强物理层的输出功能,建立一条无差错的传输路线,

    网络层,网络层提供IP寻址和路由选择的功能,因为在网络上,源主机和目的主机可以处在同一个网络中,也可以分散在不同网络中,在由多网络组成的互联网中,会存在多条可以将源主机与目的主机连接在一起的通信线路,网络层的功能就是在这些线路中找出最佳的传输线程,

    传输层,传输层为源主机和目的主机的通信提供了数据传输服务,它隔离了网络的上下层协议,使得网络应用与下层协议无关,

    应用层,应用层提供面向用户的网络服务,如文件传输服务和远程登陆服务等,不同用户对应用层服务的需求也不一样,所以应用层定义了许多不同的协议,比较常用的有文件传输协议(FTP),超文本传输协议(HTTP),域名解析协议(DNS),简单邮件传输协议(SMTP)和邮局协议(POP3)等,

    1.2各层所使用的协议

    网络中的计算机互相通信就是实现了层与层之间的通信,为此,各层都要遵守规则以便更好的完成通信,我们把它们之间遵守的规则称作“协议”,

    物理层协议,

    物理层是五层模型中的最底层,它为计算机之间的数据通信提供了传输媒体和互连设备,为数据传输提供了可靠的环境,其中,媒体包括电缆,光纤和无线信道等,互联设备则指计算机和调制解调器之间的互联设备,如各种插头,插座等,该层的作用是透明的传输比特流(即二进制流),为数据链路层提供一个传输原始比特流的物理连接,

    数据链路层协议,

    数据链路层是模型中的第二层,该层对物理层传输过来的比特流进行分组,由一组电信号构成的数据包称作“帧”,数据链路层传输的就是以“帧”为单位的数据包,数据链路层最终会把数据包传递给网络层,

    帧数据包由两部分组成,帧头和帧数据,帧头包括接收方的物理地址和其它的网络信息,其中物理地址即网卡地址,帧数据则是要传输的数据体,帧数据的最大长度不能超过1500字节,如果数据过长,则必须分割成多个帧后在进行发送,

    网络层协议,

    该层通过寻址(寻址地址 )来建立两个节点之间的连接,大家知道,电脑连接上网络后都有一个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

  • 相关阅读:
    [leetcode-495-Teemo Attacking]
    [leetcode-413-Arithmetic Slices]
    document对象操作:浏览器页面文件
    搭建wamp环境,数据库基础知识
    jenkins配置邮箱服务器(126邮箱)
    Linux命令之文件与用户权限
    并发与同步、信号量与管程、生产者消费者问题
    TypeScript设计模式之职责链、状态
    了解HTML列表
    CSS画出的图
  • 原文地址:https://www.cnblogs.com/huangxuQaQ/p/11588977.html
Copyright © 2011-2022 走看看