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

  1. 云栖社区>
  2. 博客>
  3. 正文

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

技术小甜 2017-11-16 16:58:00 浏览2633
展开阅读全文

网络通信神马的,听起来不过尔尔,唠起来也是催眠的话题。不过没关系。

网络还没有你认为的那么枯燥。话说阿拉喜欢的,你要说他没意思阿拉真的……会证明他的魅力给你看的哦。

嗨嗨,第一个词——抓包。兴许各位倒是有所耳闻。没有耳闻也没关系。下面是阿拉君粘上的百度简介。t_0020.gif

wKiom1mn83rA-OErAABCApVIxVI078.png

用人话说就是截取别人发送的信息,必要时甚至能骑到,抱歉,起到修改别人发送的信息的恶意目的。

恶意目的的确能达到。可惜阿拉是三观良好的新世纪接班人一个。阿拉怎么可能去截获别人隐私呢?顺便,B站广告区大佬lex,有知道其微博密码的请私信博主,必有重谢。

咳咳,扯远了。

为师教你峨眉剑法是为了让你为世间惩恶扬善匡扶正义,但你要拿来泡妞,为师也不能扇你耳光不是。话说,IT男啊,有些老大不小的,就不要再怂了。做自己想做的事,就拿出点勇气来啊。有时候不是人家不喜欢你,是你太过敏感了啊。日剧《逃避虽可耻却有用》里,女主用尽力气才融化男主周身的寒冰,哦,这里的男主,是个沉默寡言的系统工程师哦。啊啊,温柔的人得到幸福明明是理所当然的事情,为什么还是有种松了口气的感觉呢?幸福在来的路上,为了让他尽早到来,多走几步去迎接啊!

男主星海源。屌丝们做个头发换身衣服打理下脸还是能看的嘛。

wKiom1mn_UKwvNs5AAGcWR0Lk4g832.jpg

但要是这样子,就……B_0063.gif

wKioL1mn_w-RcDwnAAAw41aM9A4135.jpg

(图片若侵权请留言,阿拉会删掉的!)

嗨,这里,为什么阿拉要用峨眉剑法呢?

喂,这种事怎么都好吧。不习惯就脑补华山剑法九阴真经乾坤大挪移葵花宝典什么的……t_0032.gif

用技术手段截获QQ密码、聊天记录以及伪造虚假信息骗取钱财是有可能的。这类案件,多到不甚枚举就不举例了。

那么就让阿拉来给你说说这截获信息的过程吧。

我们在使用qq通信时。第一步当然是打开我们的客户端,输入账号,密码。成功登录后,打开对话框,输入信息,发送,就可以静静等待了。

以上我们能够清晰看到的步骤都是发生在应用层了。app之类的不是也叫应用嘛!

然而消息发送给对方就不如看到的如此简单了。秒回信息背后发生的,要一一道来的话,足够写成一本书了。

嗨嗨,那我们就长话短说。如果阿拉的唠唠还算有意思的话,你们再查资料也有了针对点不是。

第一个标题。


OSI七层与TCP四层对应


比如你发“约吗”给女神。这个约吗经过应用层、表示层、会话层、传输层、网络层、数据链路层、物理层、光纤或其他传输介质、物理层、数据链路层、网络层、传输层、会话层、表示层、应用层……哈哈,其实没这么多了。虽然国际标准制定委员会OSI(就是那个认证iso9001什么的)要走这么多层,但因为实际用起来太过麻烦,众人偷懒又不好意思不给老大面子,遂,便有了OSI七层框架(应用层、表示层、会话层、传输层、网络层、数据链路层、物理层)的简化版,即TCP四层模型。(有些资料上表示为TCP5层模型,是将物理层和数据链路层分开来说。四层模型更偏向标准化,五层的概念更容易理解,酱紫)

TCP四层模型分别是网络访问层,Internet层,传输层和应用层。TCP的网络访问层对应OSI七层框架里的物理层和数据链路层,Internet层对应网络层,传输层就是传输层,最后,TCP里的应用层囊括了OSI七层框架的上三层,即会话层、表示层和应用层。

对照下图你会有个大概的了解。


wKioL1mpVwfBxf3ZAACpDNX12uQ050.png

了解这个有用吗?

诶,有用。

数据在传输过程中要遵循一定章法,否则就会乱套。没有源地址女神就不知道“约吗”是你发的,这样可能就跟其他屌丝约了。没有目的地址的话,你的“约吗”可能会发到你好友列表的任何一人,不不,甚至世界上任何一人都有可能。想像下上班的时候老板收到你的“约吗”……后果不要太美妙哟。除此之外,为了有效传输数据,还需要稳定的网络环境。然而同一时间里上网的人千千万,发QQ的少说也有五六位数的家伙吧,这个数量根据时间段还有高峰期一说。

怎么保证千万数据流里的一条信息能够成功传输?

你也许会觉得头大。但是放心,这些问题,已经在对应协议的管制下顺利解决了。

就算并不完美。也足够漂亮的保证了你和女神的正常通信。

这个例子是不是不够好?嘛,那我们换个人好了。你和某老师的正常通信。嗯,这样就正常多了嘛!


用OSI七层模型描述数据传输流程


OSI模型能够清晰的表明这一过程。发送的数据要转化为二进制才能传输,饭嘛,嚼碎了才能咽得下。心急吃不了某老师0.0。这个过程啊,也就是从QQ应用到底层计算机识别的二进制的过程,OSI说的很清楚。这流程,TCP也是照做的。

简而化之如图所示:


wKiom1mpWZKyjtoOAANwLyhEjWg129.gif

我知道你们又要吐槽——这叫简而言之?得,那就来瞅瞅完整版:http://www.colasoft.com.cn/download/protocols_map.php

阿拉还是很义气的吧。

主要是这图够清晰明了。其实图里的内容,大体看一下,然后对照图片,能够方便理解,也就足够了。

嘛嘛,有兴趣了就再拓展,不过那就修行靠个人了。

要注意的是,发送信息是由应用层到物理层,接收的过程则是物理层到应用层,真正的数据传输,只在物理层进行。其他层是方便理解抽象出的模型。

物理层,说白了就是网线光纤啦!这是底层。


大体看一下。

wKiom1mpYoeT8VRYAAHSppiRPZw681.png

传输时,下层数据会在上层数据的基础上加上头部信息,到了数据链路层,还有尾部信息。

这些头部信息看起来冗余而啰嗦。就像法律条文密密麻麻让人头大。其实就像串了一串糖葫芦而已啦!后来的在最外层呢,那我们就先看看第一颗山楂球。

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啊,又掉线!”,稍安勿躁,哦急死尅,冷静下来后你会发现——游戏还是连不上。科科,那就出去跑个步健个身钓个妹妹早日结束阿宅的生活吧。

在加班的当我什么也没说。i_f27.gif

传输层要向会话层提供通信服务的可靠性,避免报文的出错、丢失、延迟时间紊乱、重复、乱序等差错。聊天无碍,电影和游戏还在不断完善的路上。

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)了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
[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

下面是百度百科就数据链路层的介绍。

wKiom1mqVe_zWLV_AADAOOFAkis391.png

不同层次上,数据会有首部信息的变化。用专业的说法来称呼不同层次上的数据块,数据链路层中就是帧(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


关于接收信息

发送是封装,接收即为解封装。

就像吃糖葫芦。最后的那颗,是最先放上的,也是最下面的。还是最值得期待的。往往人们都会觉得最后一颗最好的吧。接收数据的差别在于,只有最后一颗才是留给使用者的。拆除路由、主机、应用需要识别的信息,剩下的“约吗”留给你的某老师。

就算如此,串糖葫芦的签也是很重要的,这种感觉?t_0026.gif

是不是用吃虾需剥壳的说法更好呢?

拆掉一层层的包装后发现钻戒的feel?

如果还是get不到点请留言,阿拉会做补充的。


主机通讯实况

想说的太多,能一点一点是整理出来却是个并不容易的过程。

能在这个过程中捋清全过程是很不错的。可能的话,把抽象的理论以自己的方式储存起来,那是极好的。

遗憾的开始写出来的,要么认知有局限,要么过于啰嗦。虽然现在还是啰嗦0.0。要么个人色彩太重,搞的不像科教反而像是传教了。

还有要阿拉做到条例清晰确实有点难度啊。嗯,肯定是网络设计的知识太碎的原因。i_f27.gif

还有一点要说的是,两主机是可以不经任何中间设备直接通信的。详情见:https://www.zhihu.com/question/41496681

但是发QQ信息就不行了,QQ和网页都有涉及应用层。局域网的通信到不了应用层啊。下面就要正式提及路由器了。

路由器和交换机

wKioL1mqbdijeUEwAABZc9QbZMM796.png


主机第一次通讯会向同一网络的所有主机发送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.html

TCP和UDP

关于这个协议,网上说的已经太多了。

跨网段传输需要路由器或交换机,早前还有集线器。

定义这其中的规则并实际起作用的,就是TCP/IP协议。

TCP是一个协议,IP协议是IP协议。TCP/IP协议由网络层的IP协议和传输层的TCP协议组成。

在多个网络段中的通信TCP协议更多保证了数据传输的可靠性。

看TCP包头就知道了。

wKiom1mqr6nTA3M4AAF_J4H8pv8031.png

简单粗暴解决多个网络段中的通信的是UDP。社会我U哥,人狠话不多。

UDP可以说是TCP性格奇怪的哥哥了。UDP风风火火,TCP稳重得体。

如果单纯为解决问题,方式多了去了。

得到钱财可能偷摸拐骗,为什么大部分人还是要自己挣钱呢?

为了能够安稳的活着。生活光明正大。

这样就有了社会主流价值观。真善美之类。为了社会大同而确定的社会准则,为规范社会而生,为了大多数人的幸福运行。

扯远了。UDP包头:

wKiom1mqsI2TfgWJAAAt6waRKdY643.jpg

三次握手和四次挥手

这个也蛮多人说过,阿拉这里就不提了吧。i_f30.gif

TCP/IP协议的确认机制,差不多可以这么说吧。


电脑生来为人脑服务。网络自然也是因为便利人们生活而存在。

老实说,当初知道米国还是欧洲来着?总之那群人,制定了个君子协议,阿拉当时还蛮意外的。还有GNU开源之类的,这种价值观虽然只是在业内主流,也让人感觉IT界很温暖呢!

最初的网络协议,关于安全性的设计几乎没有。直至现在,这方面也有很高的可提升空间。

网络为传输数据而存在,就像很久以前的战争,为了生存进行。

人们只是活着已经很尽力了。就在上世界七八十年代,数据光是传输已经很不容易了。

这个说的略为沉重。但你差不多知道了。网络设计存在漏洞的始作俑者,对,正是网络传输本身。

钱重要还是命重要?

反正阿拉是选择命啦!

相对应的,网络数据传输,数据包的完整传输是放在首位的。

对此有三次握手和四次挥手。

毫不客气又略带色气的一句话——饱暖思淫欲。基本生存问题解决后,精神需求又会越来越匮乏。钱作为万能物,很少有人觉得现有数额就足够。这没错。人为天灾人祸做准备哪里需要那么多理由。

人人都没有那么崇高,只是有些人,被赋予使命。

不是被选定的,而是自己的选择。比如运维。

其实制度已经准备好了,加密算法之类的。而这个制度,只会越来越完善。尚方宝剑在手,天下我有?

嘛,差不多就是这感觉吧!

话说阿拉很喜欢IT界呢,没有那么多弯弯绕绕,每个人都在努力做着自己的事情,有多少能力就得到多少回报,一个劲的加油总会被人看的见。真好啊,能够成为运维。

就像距离目标总有一些暧昧的距离,而这个距离,一直都不是遥不可及,却一直到达不了。

愿你我都有到达不了的尽头,所以可以尽情驰骋。偶尔回首,也会被自己感动的热泪盈眶。



















本文转自阿拉杜美美51CTO博客,原文链接:http://blog.51cto.com/amelie/1962086 ,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
技术小甜
+ 关注