您的位置:首页 > 理论基础 > 计算机网络

浅谈主机间网络通信实际过程

2017-09-02 09:10 363 查看
网络通信神马的,听起来不过尔尔,唠起来也是催眠的话题。不过没关系。
网络还没有你认为的那么枯燥。话说阿拉喜欢的,你要说他没意思阿拉真的……会证明他的魅力给你看的哦。嗨嗨,第一个词——抓包。兴许各位倒是有所耳闻。没有耳闻也没关系。下面是阿拉君粘上的百度简介。





用人话说就是截取别人发送的信息,必要时甚至能骑到,抱歉,起到修改别人发送的信息的恶意目的。恶意目的的确能达到。可惜阿拉是三观良好的新世纪接班人一个。阿拉怎么可能去截获别人隐私呢?顺便,B站广告区大佬lex,有知道其微博密码的请私信博主,必有重谢。咳咳,扯远了。为师教你峨眉剑法是为了让你为世间惩恶扬善匡扶正义,但你要拿来泡妞,为师也不能扇你耳光不是。话说,IT男啊,有些老大不小的,就不要再怂了。做自己想做的事,就拿出点勇气来啊。有时候不是人家不喜欢你,是你太过敏感了啊。日剧《逃避虽可耻却有用》里,女主用尽力气才融化男主周身的寒冰,哦,这里的男主,是个沉默寡言的系统工程师哦。啊啊,温柔的人得到幸福明明是理所当然的事情,为什么还是有种松了口气的感觉呢?幸福在来的路上,为了让他尽早到来,多走几步去迎接啊!男主星海源。屌丝们做个头发换身衣服打理下脸还是能看的嘛。

但要是这样子,就……



(图片若侵权请留言,阿拉会删掉的!)嗨,这里,为什么阿拉要用峨眉剑法呢?喂,这种事怎么都好吧。不习惯就脑补华山剑法九阴真经乾坤大挪移葵花宝典什么的……

用技术手段截获QQ密码、聊天记录以及伪造虚假信息骗取钱财是有可能的。这类案件,多到不甚枚举就不举例了。那么就让阿拉来给你说说这截获信息的过程吧。我们在使用qq通信时。第一步当然是打开我们的客户端,输入账号,密码。成功登录后,打开对话框,输入信息,发送,就可以静静等待了。以上我们能够清晰看到的步骤都是发生在应用层了。app之类的不是也叫应用嘛!然而消息发送给对方就不如看到的如此简单了。秒回信息背后发生的,要一一道来的话,足够写成一本书了。嗨嗨,那我们就长话短说。如果阿拉的唠唠还算有意思的话,你们再查资料也有了针对点不是。第一个标题。
OSI七层与TCP四层对应比如你发“约吗”给女神。这个约吗经过应用层、表示层、会话层、传输层、网络层、数据链路层、物理层、光纤或其他传输介质、物理层、数据链路层、网络层、传输层、会话层、表示层、应用层……哈哈,其实没这么多了。虽然国际标准制定委员会OSI(就是那个认证iso9001什么的)要走这么多层,但因为实际用起来太过麻烦,众人偷懒又不好意思不给老大面子,遂,便有了OSI七层框架(应用层、表示层、会话层、传输层、网络层、数据链路层、物理层)的简化版,即TCP四层模型。(有些资料上表示为TCP5层模型,是将物理层和数据链路层分开来说。四层模型更偏向标准化,五层的概念更容易理解,酱紫)TCP四层模型分别是网络访问层,Internet层,传输层和应用层。TCP的网络访问层对应OSI七层框架里的物理层和数据链路层,Internet层对应网络层,传输层就是传输层,最后,TCP里的应用层囊括了OSI七层框架的上三层,即会话层、表示层和应用层。对照下图你会有个大概的了解。


了解这个有用吗?诶,有用。数据在传输过程中要遵循一定章法,否则就会乱套。没有源地址女神就不知道“约吗”是你发的,这样可能就跟其他屌丝约了。没有目的地址的话,你的“约吗”可能会发到你好友列表的任何一人,不不,甚至世界上任何一人都有可能。想像下上班的时候老板收到你的“约吗”……后果不要太美妙哟。除此之外,为了有效传输数据,还需要稳定的网络环境。然而同一时间里上网的人千千万,发QQ的少说也有五六位数的家伙吧,这个数量根据时间段还有高峰期一说。怎么保证千万数据流里的一条信息能够成功传输?你也许会觉得头大。但是放心,这些问题,已经在对应协议的管制下顺利解决了。就算并不完美。也足够漂亮的保证了你和女神的正常通信。这个例子是不是不够好?嘛,那我们换个人好了。你和某老师的正常通信。嗯,这样就正常多了嘛!
用OSI七层模型描述数据传输流程
OSI模型能够清晰的表明这一过程。发送的数据要转化为二进制才能传输,饭嘛,嚼碎了才能咽得下。心急吃不了某老师0.0。这个过程啊,也就是从QQ应用到底层计算机识别的二进制的过程,OSI说的很清楚。这流程,TCP也是照做的。简而化之如图所示:


我知道你们又要吐槽——这叫简而言之?得,那就来瞅瞅完整版:http://www.colasoft.com.cn/download/protocols_map.php阿拉还是很义气的吧。主要是这图够清晰明了。其实图里的内容,大体看一下,然后对照图片,能够方便理解,也就足够了。嘛嘛,有兴趣了就再拓展,不过那就修行靠个人了。要注意的是,发送信息是由应用层到物理层,接收的过程则是物理层到应用层,真正的数据传输,只在物理层进行。其他层是方便理解抽象出的模型。物理层,说白了就是网线光纤啦!这是底层。
大体看一下。


传输时,下层数据会在上层数据的基础上加上头部信息,到了数据链路层,还有尾部信息。这些头部信息看起来冗余而啰嗦。就像法律条文密密麻麻让人头大。其实就像串了一串糖葫芦而已啦!后来的在最外层呢,那我们就先看看第一颗山楂球。1.应用层最上层的应用层负责提供用户身份验证,并为应用进程提供网络服务。这个很好理解。毕竟QQ本身也要处于网络连通的状态才能提供服务。这个涉及服务器。这个是马化腾要每天操心的玩意。上面所提的各种协议。HTTP、FTP之类的。每项协议对应相应的服务。http是网页,ftp在局域网中用的多,上机课的时候老师也会用来传些资料什么的,SMTP是邮件传输,and so on。主机上应用这么多,又要如何区分各个进程呢?那就是端口号了。这个等下面TCP/IP协议的地方会详细说。2.表示层表示层向上对应用层服务,向下接受来自会话层的服务。表示层为在应用过程之间传送的信息提供表示方法的服务,它只关心信息发出的语法和语义。表示层为应用层提供的服务有三项内容。语法转换:语法转换涉及代码转换和字符集的转换,数据格式的修改、数据结构操作的适配、数据压缩、数据加密等。语法选择:语法选择是提供初始选择的一种语法和随后修改这种选择的手段。联接管理:利用会话层提供的服务建立表示联接,管理在这一联接之上的数据运输和同步控制,以及正常或非正常地终止联接。表示层提供加密,并将数据处理为标准格式。比如将“约吗”转个码之类的。你知道的,中文很容易发生乱码。语言格式不处理好,就会发生这种情况。传输数据不能被理解的话,传输时没有意义的。这个类似于,冷藏食物的贩运,不在冷藏上下功夫,食物不到目的地就坏掉了。那个很容易见到的utf8就是挺有名的编码,百分之七八十的乱码都是这个utf8的问题。下次遇上记得试试看。在浏览器编码的地方。3.会话层会话层(Session)是建立在传输层之上,利用传输层提供的服务,使应用建立和维持会话,并能使会话获得同步。会话层session,你可能会在浏览器上见过这个词。cookie和session,cookie在客户端,也就是本地存储,session在客户端存储。cookie的典型用法是本地账号和密码等信息的保存,下次自动登录无需再次输入密码之类。session最经典案例莫过于购物车。在电脑上加入的物品,等到下次再手机上登录也能看到,是不是很神奇呢?cookie和session详解:http://blog.csdn.net/fangaoxin/article/details/6952954/会话层负责对话控制。如令牌管理。QQ是不容许一个账号在两台电脑同时登录或两个手机上同时登录的。但是,电脑和手机上同时登录一个账号却是可以的。有的时候,你也会发现,某些程序,是可以同时运行在两个手机上的。(网易云好像就OK),而且,同时打开一个网站的多个网页也是再寻常不过的事情。协调与管理这些,就是令牌管理(tokenmanagement)要做的。基于此,购物车也如此便利。会话层还有一个很棒的服务是同步。在我们下载大的文件,比如电影的时候。有可能下载到一半断网断电了,或者其他的意外导致电影下了一半。早些年经常出现要重新下载的情况。现在大部分都可以接着上次的继续下载。能够实现断点下载,实际上是会话层在数据中插入同步点的缘故。4.传输层
呜哇,到传输层了。传输层呢,提供了主机应用程序进程之间的端到端的服务,基本功能如下:(1) 分割与重组数据。“约么”两个字,发送一次就可以搞定了。但如果是“某老师你还会不会出新片呐某老师你有freestyle吗某老师给我们表演个胸口碎大石呗”之类长长的一段话,为了保证消息能够完整被某老师接收到,数据就要分段传输了。戳这里(2) 按端口号寻址。接收数据时表现为此。发送数据时,表现为在传输信息的头部加入此类信息。(3) 连接管理。通常,对会话层要求的每个传输连接,传输层都要在网络层上建立相应的连接。说传输层是会话层和网络层的缓冲还是蛮适合的。(4) 差错控制和流量控制。包括接收时纠错的功能,发送时传输速率的控制,错误重传等。若在晚上七八点的上网高峰期通讯,这点还是相当重要的。毕竟很多人都是这个点最为空闲,说不定就有女神呐。流量控制在这个时间点的实际表现是“啊!好卡啊!我X啊,又掉线!”,稍安勿躁,哦急死尅,冷静下来后你会发现——游戏还是连不上。科科,那就出去跑个步健个身钓个妹妹早日结束阿宅的生活吧。在加班的当我什么也没说。

传输层要向会话层提供通信服务的可靠性,避免报文的出错、丢失、延迟时间紊乱、重复、乱序等差错。聊天无碍,电影和游戏还在不断完善的路上。5.网络层
从这里开始,就有路由的概念了。这是后话。建议按顺序看哟。下面提及路由也会好理解一些。阿拉会竭尽所能理清,将已知的点与理论联系起来的。当然,阿拉能力有限。不到之处尽请指出啊!网络层涉及一些抽象的概念。IP地址就是这一体现方式。看吧,IP地址而已,也没有那么复杂吧!
IP地址是网络中通讯用到的。就我们日常所见的网址,百度啦谷歌啦b站啦,背后都有一个IP存在。访问网页时,协议会把网址转化为IP,这样你才能正常使用网站上提供的功能。网址到IP,也就是应用层到网络层哦。局域网内实现两主机直接通讯是可以的。但范围大了,通讯就变得不那么容易了。谷歌服务器在大洋彼岸,要想访问谷歌就要经路由器了。路由器能够识别IP,并按一定机制转发。这样经若干路由,离的很远的两人也能在线聊天了。当然网络层最重要,也是最基本的能力当然还是数据传输啦!(1) 路由数据包。依旧是添加标识。(2) 选择传递数据的最佳路径。最短路径不一定是最优路径。R2P和OSPF我们下文会提到。(3) 支持逻辑寻址和路径选择。逻辑寻址指的是IP地址的寻找,其中涉及知道了IP地址,如何找到其主机的问题。到达路径不止一条时的路径选择,也是网络层的内容哦。6.数据链路层说到数据链路层就不得不提MAC地址。MAC地址也就是硬件地址,标明主机身份的编号,代表物理机。IP地址则是网络通信层次的。Mac地址二进制为48位,但通常用十六进制表示。windows在命令提示符页面输入命令ipconfig可以查看IP和Mac地址,Linux可用的命令就多了,ifconfig了,ip addr(简写ip a)了。
[root@centos7 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 172.17.252.90  netmask 255.255.0.0  broadcast 172.17.255.255
inet6 fe80::1af6:e3a3:fd04:f811  prefixlen 64  scopeid 0x20<link>
ether 00:0c:29:8d:46:58  txqueuelen 1000  (Ethernet)
RX packets 1506  bytes 140082 (136.7 KiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 71  bytes 13090 (12.7 KiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.234.166  netmask 255.255.255.0  broadcast 192.168.234.255
inet6 fe80::eab5:adba:ab3f:c899  prefixlen 64  scopeid 0x20<link>
ether 00:0c:29:8d:46:62  txqueuelen 1000  (Ethernet)
RX packets 13  bytes 1446 (1.4 KiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 39  bytes 6297 (6.1 KiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
inet 127.0.0.1  netmask 255.0.0.0
inet6 ::1  prefixlen 128  scopeid 0x10<host>
loop  txqueuelen 1  (Local Loopback)
RX packets 1  bytes 99 (99.0 B)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 1  bytes 99 (99.0 B)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@centos7 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:8d:46:58 brd ff:ff:ff:ff:ff:ff
inet 172.17.252.90/16 brd 172.17.255.255 scope global dynamic ens33
valid_lft 86209sec preferred_lft 86209sec
inet6 fe80::1af6:e3a3:fd04:f811/64 scope link
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:8d:46:62 brd ff:ff:ff:ff:ff:ff
inet 192.168.234.166/24 brd 192.168.234.255 scope global dynamic ens34
valid_lft 1608sec preferred_lft 1608sec
inet6 fe80::eab5:adba:ab3f:c899/64 scope link
valid_lft forever preferred_lft forever

查询结果中,inet行后,inet后跟的就是IP地址。ifconfig查询结果中,ether行,enter后的便是Mac地址。ip addr查询结果中,link/enter行,link/enter后的是Mac地址。查询结果有时候会出现名为virbr0的网卡,那个基本无用的虚拟网卡。解决方式在这里:http://xushen.blog.51cto.com/1673219/1871465下面是百度百科就数据链路层的介绍。

不同层次上,数据会有首部信息的变化。用专业的说法来称呼不同层次上的数据块,数据链路层中就是帧(frame)了。数据链路层采用CRC循环冗余校验,用来检查传输差错。ARP是用来由IP地址寻找Mac地址的协议,中文就是地址解析协议。在OSI模型中ARP协议属于数据链路层,而在TCP/IP模型中,ARP协议属于网络层。嘛,这家伙起到的作用还蛮大的!7.物理层
物理层转化数据帧为比特流,即二进制。使介质尽可能不存在,数据尽可能无碍传输,就是物理层要做的了。
以上不同层次上,数据的格式单位是不一样的。这个用专业的说法叫PDU。PDU是指对等层次之间传递的数据单位。PDU: Protocol Data Unit,协议数据单元物理层的 PDU是数据位 bit
数据链路层的 PDU是数据帧 frame 网络层的PDU是数据包 packet传输层的 PDU是数据段 segment其他更高层次的PDU是消息 message
关于接收信息发送是封装,接收即为解封装。就像吃糖葫芦。最后的那颗,是最先放上的,也是最下面的。还是最值得期待的。往往人们都会觉得最后一颗最好的吧。接收数据的差别在于,只有最后一颗才是留给使用者的。拆除路由、主机、应用需要识别的信息,剩下的“约吗”留给你的某老师。就算如此,串糖葫芦的签也是很重要的,这种感觉?


是不是用吃虾需剥壳的说法更好呢?拆掉一层层的包装后发现钻戒的feel?如果还是get不到点请留言,阿拉会做补充的。

主机通讯实况想说的太多,能一点一点是整理出来却是个并不容易的过程。
能在这个过程中捋清全过程是很不错的。可能的话,把抽象的理论以自己的方式储存起来,那是极好的。遗憾的开始写出来的,要么认知有局限,要么过于啰嗦。虽然现在还是啰嗦0.0。要么个人色彩太重,搞的不像科教反而像是传教了。还有要阿拉做到条例清晰确实有点难度啊。嗯,肯定是网络设计的知识太碎的原因。

还有一点要说的是,两主机是可以不经任何中间设备直接通信的。详情见:https://www.zhihu.com/question/41496681但是发QQ信息就不行了,QQ和网页都有涉及应用层。局域网的通信到不了应用层啊。下面就要正式提及路由器了。路由器和交换机


主机第一次通讯会向同一网络的所有主机发送ARP广播。如果目标主机在同一广播域,目标主机会单播回应此主机,然后二者就可以单播通信了。假设A主机寻找B主机通讯,其广播信息在同一网络段的其他主机也是可以接收到的。何为网络段?这就牵扯到IP地址分类的概念了。结合以下两篇,会大体上清楚很多。http://www.360doc.com/content/14/0211/00/15519979_351497733.shtmlhttps://wenku.baidu.com/view/7c764de9e009581b6bd9eb30.html。不在同一个网段的主机通信需要路由器或交换机。交换机连接的主机独享带宽,路由器连接的统一网段的主机共享带宽。通俗来讲,家庭内用一个宽带实现多台主机上网,用路由器连接就能实现局域网的功能。但交换机连接下,一个宽带只能供一台主机上网。路由器方便,交换机则更加安全。更多路由器和交换机的区别戳这里:http://jingyan.baidu.com/article/14bd256e082f2abb6d261212.htmlTCP和UDP关于这个协议,网上说的已经太多了。跨网段传输需要路由器或交换机,早前还有集线器。定义这其中的规则并实际起作用的,就是TCP/IP协议。TCP是一个协议,IP协议是IP协议。TCP/IP协议由网络层的IP协议和传输层的TCP协议组成。在多个网络段中的通信TCP协议更多保证了数据传输的可靠性。看TCP包头就知道了。

简单粗暴解决多个网络段中的通信的是UDP。社会我U哥,人狠话不多。
UDP可以说是TCP性格奇怪的哥哥了。UDP风风火火,TCP稳重得体。如果单纯为解决问题,方式多了去了。得到钱财可能偷摸拐骗,为什么大部分人还是要自己挣钱呢?为了能够安稳的活着。生活光明正大。这样就有了社会主流价值观。真善美之类。为了社会大同而确定的社会准则,为规范社会而生,为了大多数人的幸福运行。扯远了。UDP包头:

三次握手和四次挥手这个也蛮多人说过,阿拉这里就不提了吧。

TCP/IP协议的确认机制,差不多可以这么说吧。
电脑生来为人脑服务。网络自然也是因为便利人们生活而存在。老实说,当初知道米国还是欧洲来着?总之那群人,制定了个君子协议,阿拉当时还蛮意外的。还有GNU开源之类的,这种价值观虽然只是在业内主流,也让人感觉IT界很温暖呢!最初的网络协议,关于安全性的设计几乎没有。直至现在,这方面也有很高的可提升空间。网络为传输数据而存在,就像很久以前的战争,为了生存进行。人们只是活着已经很尽力了。就在上世界七八十年代,数据光是传输已经很不容易了。这个说的略为沉重。但你差不多知道了。网络设计存在漏洞的始作俑者,对,正是网络传输本身。钱重要还是命重要?反正阿拉是选择命啦!相对应的,网络数据传输,数据包的完整传输是放在首位的。对此有三次握手和四次挥手。毫不客气又略带色气的一句话——饱暖思淫欲。基本生存问题解决后,精神需求又会越来越匮乏。钱作为万能物,很少有人觉得现有数额就足够。这没错。人为天灾人祸做准备哪里需要那么多理由。人人都没有那么崇高,只是有些人,被赋予使命。不是被选定的,而是自己的选择。比如运维。其实制度已经准备好了,加密算法之类的。而这个制度,只会越来越完善。尚方宝剑在手,天下我有?
嘛,差不多就是这感觉吧!话说阿拉很喜欢IT界呢,没有那么多弯弯绕绕,每个人都在努力做着自己的事情,有多少能力就得到多少回报,一个劲的加油总会被人看的见。真好啊,能够成为运维。就像距离目标总有一些暧昧的距离,而这个距离,一直都不是遥不可及,却一直到达不了。愿你我都有到达不了的尽头,所以可以尽情驰骋。偶尔回首,也会被自己感动的热泪盈眶。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux