小明家离小红家较远,无线电信号无法传输到小红家。然而,这难不倒小明。他在离小红家的路上搭建了多个节点,包括路由器和交换机,用于信号传输。但有时他被雄性激素影响,搭建的信号节点有些杂乱且数量较多。那么,他若想以最短路径传输信号该怎么办呢?小明沮丧地走回家时已到深夜。他看到今天见过的那位王叔叔匆匆从自己家走出来,便连忙拉住王叔叔,向他诉说自己的烦恼,希望王叔叔能给自己一些帮助。小明说完后,王叔叔的神情从紧张变得和蔼,对小明说:其实已经有人发明了网络层,也就是路由器、交换机那些具有寻址功能的设备所实现的功能。这一层的定义是关于 IP 地址的,并且通过 IP 地址来进行寻址。正因如此,就产生了 IP 协议。该层具备选择最佳路径的能力,而这正是路由所需要做的事情。
然而,小红根本没有玩游戏这一情况。得知此消息后,小明愣住了。可是他并未放弃,而是将自己猜测小红可能喜欢的信息都发送给她。但是每次小明发送一次,都需要调用 TCP 去进行打包,接着调用 IP 协议去寻找路由,这样一来一回往往需要一天的时间,那该怎么办呢?
他再次翻看王叔叔的笔记本资料,上面写着:会话层能够协助我们构建并管理应用程序间的通信。它封装了调用 TCP 来进行打包的操作,接着又调用 IP 协议去寻找路由等。正因如此,他只需十几二十分钟,就能够成功搭建起传输数据的机器。
6.表示层(数据格式化,代码转换,数据加密)
有一次,小明传送了一份数据,这份数据是关于怎样选购化妆品的文章。小红对这份文章很感兴趣,然而当小红想要打开这个文件时,却发现根本无法打开。后来,在下课的时候,小红告诉小明自己无法打开这个文件。小明心想,自己明明用 Linux 系统完整地发送给了小红啊,这可真奇怪。但出于耍帅,小明只是淡淡地说:“我放学后再给你发一份!”
他坚信老王叔叔的资料笔记会有答案。
清楚地写着:现在能保证应用程序自动收发包和寻址。不过要用 Linux 来发包,因为两个系统语法不一致,就如同安装包,exe 在 Linux 下不能用,shell 在其他系统下也不能直接运行。所以需要表示层()来帮我们解决不同系统之间通信语法的问题。
很久很久以前,A向 B 发送了一个连接请求。然而,由于网络滞留,这个请求未能到达 B 处,因此 B 也没有确认并返回给 A。接着,A 又发送了一个连接请求给 B,这次 B 收到了连接请求并返回了一个确认给 A。随后,两端开始了愉快的数据传输之旅。当传输结束后,它们分别断开了连接,各自去做各自的事情。但是过了一段时间后,滞留在网络中的 A 发出的连接请求抵达了 B。B 以为 A 要传输数据,于是给 A 回了一个确认。然而,A 并不需要输出传输,也未理会这个确认。而 B 却在傻傻地等待 A 传输数据,这会浪费 B 的资源。
但是存在第三次 A 的确认情况时,A 这个处于滞留状态的连接会传给 B,B 会返回一个确认。然而,若 A 不想传输数据,就不会给 B 回一个确认(即第三次握手),在此情况下,B 没有收到该确认,也就不会等待 A 传输数据。
连接释放(四次挥手)
如图:
客户端发送连接。FIN=1 标志着 A 已经完成了数据的发送。这是第一次挥手的动作。
第二次挥手:B回了一个确认,此时A与B的发送连接就断开了。
第三次挥手:TCP 连接是全双工通信的。B 保留着一个对 A 的发送连接。如果等到 B 也不需要发送数据给 A 时,B 会发送一个连接给 A 。这个连接的 seq 等于一个大于或等于 v 的值。因为在 A 与 B 断开发送连接到 B 与 A 断开发送连接期间,有可能 B 向 A 发送了数据,也就是消耗了序号。
A 收到 B 的连接后,会回一个响应给 B。在这个过程中,会有一个 2MSL 长的等待时间。时间一过,就会真正地断开与 B 的全部连接。
为什么需要2MSL的等待时间?
MSL:最长报文寿命
A 发送确认给 A 之后,倘若出现某些状况,比如连接被丢弃等,导致确认无法抵达 B 处。那么 B 会重新向 A 发送一个连接,然而此时 A 却停止了动作,B 则一直处于等待状态,实际上存在一个保活时间。
如果存在这个等待时间,即便 A 的 ACK 确认丢失了,B 也会再次向 A 发送一个连接。A 接收到这个连接之后,会重新计算等待时间。并且 A 会再次进行确认。