网络中的计算机互相通信网络分层和各层协议

因为这段时间都在研究c#网络编程的一些知识, 所以在这里把我学习到的在这里和大家分享下的,这样既可以达到分享的目的也可以让大家监督我,如果有什么地方理解错了,还请大家不吝赐教的。
很多人写网络编程这快都没有怎么讲网络中的协议,然而我觉得既然是网络编程肯定要介绍下网络编程中一些协议的,这样可以让更好的梳理网络编程的知识的,所以我在这系列中会用两个专题去讲协议,第一个专题简单介绍网络分层以及各层之间如何通信的只是,第二专题将会介绍下应用层协议——http协议,了解这个不仅对网络编程有个理论基础,也可以帮助更好地理解web(asp.net)的开发。
一、网络分层 网络上的计算机之所以可以互相通信,是因为它们之间都遵守互相都可以“认识”的互联网协议(就如同人交流一样,两个人能够交流,互相必须知道对象的语言),互联网上的计算机互相通信又归根于网络中层与层之间的通信,osi模型把网络通信分成七层:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,对于开发网络应用人员来说,一般把网络分成五层,这样比较容易理解。这五层为:物理层、数据链路层、网络层、传输层和应用层(最顶层),下面是一张网络分层的图片(来源于网络):
二、各层的协议 网络中的计算机互相通信就是实现了层与层之间的通信,要实现层与层之间的通信,则各层都要遵守规则,这样才能完成更好的通信, 我们就把它们之间遵守的规则就叫个“协议”,然而网络上的五层之间遵守的协议不一样,每层都有各自的协议。下面就由下至上的讲述每层的协议
2.1 物理层协议
物理层是五层模型中的最底层,物理层为计算机之间的数据通信提供了传输媒体和互连设备,为数据传输提供了可靠的环境,媒体包括电缆、光纤、无线信道等,互连设备指是计算机和调制解调器之间的互连设备,如各种插头、插座等。该层的作用是透明的传输比特流(即二进制流),为数据链路层提供一个传输原始比特流的物理连接
2.2 数据链路层
数据链路层是模型中的第2层,该层对接受到物理层传输过来的比特流进行分组,一组电信号构成的数据包,就叫做“帧”,数据链链路层就是来传输以“帧”为单位的数据包,把数据传递给上一层(网络层),帧数据由两部分组成:帧头和帧数据,帧头包括接受方物理地址(就是网卡的地址)和其他的网络信息,帧数据就是要传输的数据体。数据帧的最长为1500字节,如果数据很长,就必须分割成多个帧进行发送。
2.3 网络层
该层通过寻址(寻址地址)来建立两个节点之间的连接,大家都知道我们的电脑连接上网络后都一个ip地址,我们可以通过ip地址来确定不同的计算机是否在同一个子网路。如果我们的电脑连接上网络后就有两种地址:物理地址和网络地址(ip地址),网络上的计算机要通信,必须要知道通信的计算机“在哪里”, 首先通过网络地址来判断是否处于同一个子网络,然后再对物理地址(mac)地址进行处理,从而准确确定要通信计算机的位置。
在网络层中有我们熟悉的ip协议(即规定网络地址的协议),目前广泛采用的是ip协议第四版(ipv4),这个版本规定,网络地址由32位二进制位组成。我们可以自己配置ip地址也可以自动获得的方式得到ip地址,ip地址分成两部分,前24位代表网络,后8位代表主机号, 如192.168.254.1和192.168.254.2就处于同一个子网络里,因为这两个ip地址的前24位相同。
网络层中以ip数据包的形式来传递数据,ip数据包也包括两部分:头(head)和数据(data),ip数据包放进数据帧中的数据部分进行传输。
2.4 传输层
通过mac和ip地址,我们可以找到互联网上任意两台主机来建立通信。然而这里有一个问题,找到主机后,主机上有很多程序都需要用到网络,比如说你在一边听歌和好用qq聊天, 当网络上发送来一个数据包时, 是怎么知道它是表示聊天的内容还是歌曲的内容的, 这时候就需要一个参数来表示这个数据包是发送给那个程序(进程)来使用的,这个参数我们就叫做端口号,主机上用端口号来标识不同的程序(进程),端口是0到65535之间的一个整数,0到1023的端口被系统占用,用户只能选择大于1023的端口。
传输层的功能就是建立端口到端口的通信,网络层就是建立主机与主机的通信,这样如果我们确定了主机和端口,这样就可以实现程序之间的通信了。我们所说的socket编程就是通过代码来实现传输层之间的通信。因为初始化socket类对象要指定ip地址和端口号。
在传输层有两个非常重要的协议:udp 协议和tcp协议
采用udp协议话传输的就是udp数据包,同样udp数据包也由头和数据两部分组成,头部分主要标识了发送端口和接受端口,数据部分就是具体的内容信息。同样udp数据包是放入ip数据包中的“数据”部分,ip数据包再放入数据帧中在网络上传输。
由于udp协议的可靠性差(数据发送后无法确定对方是否收到),所以又定义了一个可靠性高的协议——tcp协议,tcp协议采取了握手的方式要确保对方收到了数据。
2.5 应用层
应用层是模型中的最顶层,是用户与网络的接口,该层通过应用程序来完成网络用户的应用需求。该层的数据放在tcp数据包的数据部分,该层定义了一个很重要的协议——http协议,我们一般的web开发都是基于应用层的开发, 所以后面专题将会和大家介绍下http协议。理解http协议可以帮助我们理解asp.net的请求响应模型以及帮助我们自定义发出请求和自定义服务器。
三、总结 现在通过一个简单的访问网页的例子来说明网络中的通信。
当我们在浏览器中输入www.baidu.com时,这意味着浏览器要向百度发送一个网页数据包,要发送数据包,需要知道对方的ip地址,这里我们只知道网址为www.baidu.com,却不知道ip地址,此时应用层协议dns协议会帮我们把网址解析为ip地址,此时会发送一个dns数据包给dns服务器,dns服务器再做出响应来告诉我们百度的ip地址为220.181.111.147,这样我们就知道百度(我们需要通信的主机)的ip地址。
应用层:
浏览网页采用的是http 协议,http数据包会嵌入在tcp数据包中,此时我们发送的http数据包内容为:
get http://www.baidu.com/ http/1.1
accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
accept-language: en-us
user-agent: mozilla/4.0 (compatible; msie 7.0; windows nt 6.1; wow64; trident/5.0; slcc2; .net clr 2.0.50727; .net clr 3.5.30729; .net clr 3.0.30729; media center pc 6.0; .net4.0c; .net4.0e; zune 4.7; infopath.3; ms-rtc lm 8)
accept-encoding: gzip, deflate, peerdist
proxy-connection: keep-alive
host: www.baidu.com
cookie: bdsfrcvid=h1k_jgc2l434o0a3slyrhiydwflxpm7c3j; h_bdclckid_sf=tjat_c8htdv5hturj63d5jch-unlqmkdwaoz0h8-ai-5mbax-jb6hhfxm-r80nblbtbt2c3nthf0hponhj8bej5l3j; baiduid=c0e879d1a40237e70e9fa559d40ee0ac:fg=1; bdut=w5n3c0e879d1a40237e70e9fa559d40ee0ac13914a661370; bduss=feqvdndjllmtyyylrxy3zzbw1hm2htemdqzfvjcwrlwmfbaetqd1fotdnxee5squfbqufbjcqaaaaaaaaaaaoqyysaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadewlji2lje5ny43nwaaaadaxfinaaaaapcnjld3dszqyv; bdrcvfr[eyjbpwsqvss]=2g3v5sbi-ncpv4eilpoxi4wuvy; hm_lvt_9f14aaa038bbba8b12ec2a4a3e51d254=1344671219756; hm_lpvt_9f14aaa038bbba8b12ec2a4a3e51d254=1344671219756
x-p2p-peerdist: version=1.0
传输层:
tcp数据包需要设置端口,接收方(百度)的http端口默认是80,本机的端口是一个1024-65535之间的随机整数,这里假设为1025,这样tcp数据包由标头(标识着发方和接收方的端口信息)+http数据包,这样tcp数据包再嵌入ip数据包中在网络上传送
网络层:
ip数据包需要知道双方的ip地址,本机ip地址假定为192.168.1.5,接受方ip地址为220.181.111.147(百度),这样ip数据包由头部(ip地址信息)+tcp数据包,
数据链路层:
ip数据包嵌入到数据帧(以太网数据包)中,以太网数据包需要知道双方的mac(物理地址),发送方为本机的网卡地址,接受方为网关192.168.1.1的mac地址(通过arp地址解析协议得到的)。这样数据帧由头部(mac地址)+ip数据包组成。
经过多个网关的转发到百度服务器220.181.111.147,服务器接受到发送过来的以太网数据包,然后再从以太网数据包中提取ip数据包——》tcp数据包——》http数据包,最后服务器做出“http响应”,再用tcp协议发回给客户端(浏览器),浏览器同样的过程读取到http响应的内容(http响应数据包),然后浏览器对接受到的html页面进行解析,把网页显示出来呈现给用户,这样就完成了一次网络通信了。


位移传感器的选型及常见故障排除方法
全球芯片短缺 汽车生产面临中断风险
节水98%的智能水龙头 为何可以节省这么多?
互联网金融正在有什么变化
区块链技术如何彻底改变更多的行业
网络中的计算机互相通信网络分层和各层协议
诺基亚8:6G运行内存和128储存,离我们不远了
什么是气体检测仪,它的作用是什么
道路照明设施漏电原因及安全运行建议
电缆桥架的计算公式分享
电子科技大学利用纳米纤维有机传感器实现氢气检测
2021年荣耀新品发布会将于1月18日举行
HarmonyOS 3.1 Release版发布!
NB/笔记本无线网络应用集锦
意法半导体推动智能手机对汽车的连接
BGA返修焊台技术迎来了高速发展契机——智诚精展
2020年5G部署情况 目前存在的风险有哪些
关于数码管的一些知识笔记
广电计量| 电容器基础知识介绍
可编程晶振用于400G高速光模块,频率稳定度达±50ppm