轻轻的,小刚打开QQ,看着好友栏里熟悉的那个头像,依旧是那么的漂亮,依旧是那么的安静。
仿佛透过这个头像,就能够看到屏幕后方的那个她,明媚的笑容,恬静的气质,优雅的举止,一切的一切都是那么的令人回味,可惜,已经好久没有联系过了,单恋就是一个的兵荒马乱。
今天打开对话框,是听人说,好像她要结婚了,很可惜从来没有认真的聊过天,身为一个网络工程师,和网络设备打交道的时间远远高于想她的时间。
“听说你要结婚了?”小刚对话框里的光标不断闪烁着,可是发送键一直不敢按下去,内心中充斥着复杂的情绪,双手合十,轻轻呢喃道:“TCP/IP,拜托了!”
小刚提到的TCP/IP是什么呢,为什么要拜托它呢?
前文中我们已经讲过了OSI,它呢是ISO标准化组织为了实现设备互联,能够相互通信而提出的一个模型,他严谨的告诉了我们,一个网络应该具备哪些功能,也提到了这些功能能够实现时应该在哪个层次。
但是呢,对于这个模型中的功能技术,如何具体实现是没有进行规范的,也就是说OSI更像是一个旗帜,一个标杆。
这个时候TCP/IP协议就脱颖而出,它不仅仅只是TCP和IP这两个协议,他是整个协议簇的代表,是网络通信中一套协议的总称。
TCP/IP协议和OSI七层模型他们之间有着主要的区别,OSI定义了这个协议应该拥有什么功能,而TCP/IP协议呢,则更强调在实现该协议时,应该开发何种程序。
我们可以通过图片,来详细看一下TCP/IP协议与OSI模型的对比。
在图片中我们可以明确的看到,OSI的上三层,在TCP/IP中仅用了一层来定义,而末尾的数据链路层与物理层,则合并成为了数据链路层。
我们要知道,OSI中,在网络层是支持多种网络协议的,比如IP协议,IPX协议,AppleTalk协议等,而TCP/IP顾名思义,只支持IP协议,而事实上,目前主流的协议,就是IP协议。
接下来我们就来讲一下,小刚的消息应该如何通过TCP/IP协议,到达心仪的窗口的。
那便不得不了解下TCP/IP中,每一层的详细定义:
数据链路层——磐石之基·通讯之本
这一层又叫做网络接口层,与OSI相比合并了物理层与数据链路层,在这一层包括如何定义物理介质,如何访问和共享介质,以及在数据发送之前如何将其变成数据帧。
网络层——选路规划·绝对大脑
这一层又叫做Internet层,在这一层中定义了数据包以及IP地址的格式,对于经过网络传输的数据,同时进行路径选择,他是我们在TCP/IP中比较重要的一层。
赠人玫瑰,手有余香,一边观看一边点赞收藏的人,配的路由条条皆通,IE证书一遍就过。
传输层——精确连接·高速公路
传输层是TCP/IP的核心层,顾名思义,负责端到端的连接,保证数据能够实现正确且稳定的传输,这一层主要对数据进行服务点编址、分段与重组、连接控制、流量控制、差错控制等。
在TCP/IP中,本层的协议共有两个,一个是面向连接,稳定安全可靠的TCP传输协议,另一个则是非面向连接的,不提供可靠性,不提供流控和差错检查的UDP传输协议,两者各自有着自己的优点。
传输层之TCP传输协议
你可以把传输层理解为一条快递线路,而TCP呢,就是比较贵的一家快递公司,这家快递公司提供了优秀的安全与保密稳定机制,在双面建立连接之前,首先要进行三次握手。
当连接建立完成之后,则进行数据的传递,传递过程中,两个数据包还会进行序列号和checksum的校验。
只有当这几个条件都满足后,TCP才会进行数据交互,所以TCP时非常可靠的一个传输协议。
当传输结束后,TCP还会进行四次挥手,以此来断开连接,所以TCP在速度上可能差强人意,但是在安全性上,是非常优越的。
至于UDP协议,那就一个字,直接干!
观察UDP的报头格式,没有冗长的序列号,确认号,也没有对于流控和差错检测的指针,唯一的Checksum值,也对于不匹配的值直接丢弃,不会返回告诉源包,没有重传机制。
但存在即合理,UDP的优点就是快,对于一些对安全性要求不高的数据,直接使用UDP即可,比如说我们现在看到网络直播,一些音乐,小说,对于安全性和稳定性要求不高,偶尔卡顿或者丢包也影响不大,所以这是UDP能够存在的一个意义。
应用层——服务受众·襁褓宝宝
用襁褓宝宝来形容应用层,觉得在合适不过了,底层的所有动作,都是为了最上层的应用层服务的,在这一层,为用户的应用提供了访问网络的接口,比较知名的接口比如FTP协议的20/21端口,Tenet的23端口,及HTTP协议的80端口等等等等。
以上便是在TCP/IP协议中,每一层的分层定义,那小刚的数据在TCP/IP中,应该是如何进行传输的呢?
首先,应用层收到数据后,开始检查为哪一种数据,同时将数据,传递给传输层。
传输层收到数据后,检查该数据由TCP还是UDP传输,添加源目端口号,同时对数据进行分组,添加完包头后传入网络层。
网络层收到数据后,开始检查到达目的网络的ip地址,查询路由表进行传递,同时将添加ip包头,传递到下一层。
数据链路层收到数据包后,添加上帧头帧尾,其中关键点就在于源目MAC地址和检验和,当全部封装完毕后,再从相应的接口发送出去。
数据在网络上传输时,会根据网络环境,经过多次的拆解包的过程,而在此时,都是网络层发挥它的作用,不断的查询路由表,选择路线,而在这一层,如何选择最优路径,如何保障数据如何安全到达目的地,就是网络工程师的工作!
当数据到达目的网段后,开始解封装,链路层去掉帧头,同时根据路由表,寻找目的ip地址后发送,网络层收到数据后,开始对包头重点checksum属性,进行校验,校验一致,即通过本次检验,将数据传递给传输层。
传输层收到数据后,假如是TCP报文,此时也会对序列号进行检查,假如检验通过,即可以对多个分组按照约定好的顺序进行重组,将最后的数据排列完毕之后,传递给应用程序。
此时彼端的心仪,消息窗口终于震动了一下,嘴角微微一笑,疲倦的眼神中带了几分笑意,说道:“大忙人,你都没结婚,我怎么敢结婚啊。”