这篇文章上次修改于 2138 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
我们先讲个小故事理解一下。
盛唐年间,天下安定,由于疆域太大传递信件不易,就有民间的能人异士向皇帝谏言,每个州县都建立信息司来养信鸽。由信鸽来传递信件。皇帝觉得可行遍开始施行。
一日皇帝命小吏从东都洛阳发一封信件到西京,这个小吏第一次去信息司发信件,到了信息司发现只有一个人处理信件。小吏便把信件交给了信息司的小哥,只见小哥娴熟的拿出只信鸽告诉它去西京,就放飞了,然后将信件誊抄了一份,将信件撕成了三份,并标上了序号。过了不一会小哥刚刚放走信鸽飞回来了,只见小哥又将信鸽放飞了。然后拿出三个信鸽分别将三份信件绑到信鸽的腿上,然后将信鸽放飞了。这时候小吏就问了小哥一句:”为什么刚刚只把信鸽放飞而不放信件啊!“。这时小哥不耐烦地说:”我要试试,我们州县附近有没有猎人,看看信鸽能不能飞出去。如果飞不出去就要找县衙派兵沿途检查一下路线了。“;小吏又问:”既然我们已经看到信鸽飞回来了,为什么还要再次放出去。“。小哥继续说:”西京那边还不知道他能不能发信鸽。我需要告诉他一声。“,谈话间只看到传递 1,3 号信件的鸽子飞回来了。小哥说:”又有一只鸽子飞丢了。“,小吏急忙问道:”怎么办!如果出了差错,我可是要被杀头的。“。小哥说:”莫着急我们再等一柱香的时间,如果还不回来我们在把 2 号信件重新发一次就好了。“。一炷香过后,小哥又拿出一只信鸽把 2 号信件绑到鸽子的腿上。不一会传递 2 号信件的信鸽飞回来了。只见小哥又娴熟的拿出一只信鸽放了出去,不一会飞回两只,然后小哥又放出去一只信鸽。小吏不解的问小哥:”你这个在干什么!“。小哥说:“我这是再告诉西京那边我的信息发完了。然后西京告诉我他知道了并让我把备份的信件销毁。我再告诉西京没问题”。终于皇帝的信件发完了。
小吏回去后感觉比较有意思,东都西京中间隔着两个州,信鸽是怎么如何飞的呢?他又专程去问了信息司的小哥。小哥说:”我也不知道信鸽会飞到那个州,如果信鸽飞到其他州,其他州的人会看到信鸽的目的地是西京,他会改变信鸽的飞行方向,直到信鸽飞到西京才算结束。“。
以上的小故事就是个简单 TCP 传输。
小吏便算是应用层,皇帝让他去发消息。
信息司的小哥身兼传输层和网络层。
信鸽便是链路层。
TCP/IP 分层网络
1. 应用层
应用层决定了向用户提供应用服务时通信的活动。
TCP/IP 协议族内预存了各类通用的应用服务。例如:HTTP、SSH、FTP 等。
2. 传输层
应用层的下一层就是传输层,提供处于网络连接中的两台计算机之间的数据传输
常见的传输层协议有 TCP、UDP 等。
3. 网络层
网络层又称网络互连层。
网络层用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位。该层规定了通过怎样的路径到达对方的计算机,并把数据包传送给对方。
网络层的作用就是在众多选项内选择一条合适的传输路径。
4. 链路层
链路层又称数据链路层,网络接口层
用来处理连接网络的硬件部分,控制操作系统、硬件的设备驱动。
我们能够看到的交换机、网线、光纤等也属于物理层
TCP 是什么
TCP 的全称是传输控制协议(Transmission Control Protocol)位于传输层,它是一种有连接的协议,提供可靠的字节流服务[注1]。而可靠的传输服务是指,能够将数据准确可靠的传递给对方。数据为何能准确无误的送达目标处,就是因为 TCP 协议采用了三次握手策略,当然除了三次握手,TCP 协议还有其他手段来保证通信的可靠性
TCP 三次握手
- 发送端首先发送一个带 SYN 标志的数据包给对方
- 接收端收到标有 SYN 的数据包后回传一个带有 SYN/ACK 标志的数据包表示确认信息
- 发送端在发送一个带有 ACK 标志的数据包给接收端表示握手成功
如果握手成功后连接断开,再次连接还需要重新握手
TCP 四次挥手
由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
第一次挥手:
Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
第二次挥手:
Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
第三次挥手:
Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:
Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
UDP 是什么
UDP 的全称是用户数据报协议(User Datagram Protocol)同样位于传输层,它是一种无连接的协议,提供面向事务的简单不可靠信息传送服务
TCP 与 UDP 的差异
- TCP 是有连接的而 UDP 是无连接的
- TCP 是可靠的连接而 UDP 是不可靠的
- UDP 不需要各种可靠性策略所以相比 TCP 性能要高不少
- 因为 UDP 的连接步骤少,报头内容少所以相比 TCP 更加的省流量
- TCP 只能一对一连接传递消息而 UDP 可以一对一、一对多、多对一和多对多
参考
参考资料 https://blog.csdn.net/huangxy10/article/details/8012180
抓包软件 Wireshark
注1:字节流服务是指,为了方便传输,将大块数据分割成报文段为单位的数据包进行管理的服务
没有评论