learn-tech/专栏/全解网络协议/04要快还是要稳你说好了-传输层.md
2024-10-16 06:37:41 +08:00

67 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

因收到Google相关通知网站将会择期关闭。相关通知内容
04 要快还是要稳你说好了 - 传输层
现在让我们继续前进。我们来一起看下一层。在上小节中我们通过了IP知道要把包裹发给谁。我们现在必须进行设置在客户端和服务器之间建立某种会话或者说是连接这其实和打电话时的情况非常相似仔细想一下是不是你打电话的时候知道对方的电话号码也就是IP那你怎么和对方通话呢。你不可能拿起电话就能直接说话了吧。你肯定希望它能和想要说话的人连接。你必须在自己和与之通话的人之间建立会话对不对我可以拿起手机找到要呼叫的人的名字或者在电话上拨打他们的电话号码。然后我会听并等待它响起。我会等我的朋友回答当他们回答时他们会打招呼。我会说你好。现在我们可以开始交流了。我现在说什么都没关系。但是在传输数据之前必须经过特殊的过程即拨打电话号码并通过协议进行连接。因此数据网络中也会发生同样的事情。在OSI模型的第四层我们使用一种称为“传输控制协议”以允许我们在客户端和服务器之间建立此会话以便可以说是的我们建立了该会话。现在我想问你一些数据。OSI模型的这一层我们称为传输层即第四层。
传输层为可靠的通信提供了完整的端到端解决方案。 TCP/IP依靠传输层有效地控制两个主机之间的通信。当IP通信会话必须开始或结束时将使用传输层建立此连接。传输层是TCP/IP端口侦听的层。例如尽管HTTP实际上可以在任何TCP端口上运行但是HTTP侦听的标准端口是TCP端口80这是标准。同样端口80、1000或50000之间没有区别。任何协议都可以在其上运行。标准化的端口号用于帮助缓解为知名应用程序协商端口号的需求。
网络层协议只提供了点到点的连接,而传输层协议提供一种端到端的服务,即应用进程之间的通信。
那什么是点到点和端到端呢?
端到端是网络连接,点到点是物理拓扑。
端到端可以这样理解比如说你老板去坎昆开会住在Grand Fiesta Americana Coral Beach Cancún。
让你负责订机票和酒店,对于你老板来说,从他/她家到这个酒店就是端到端。就是从A到B但是老板可能瞬移过来吗不会吧。你老板可能要先打车到机场然后坐飞机可能先飞到美国在转机坎昆然后再打车到酒店这其中的每一个步骤就是点到点。
所以说端到端其实是网络连接。网络想要通信首先必须要建立连接不管隔着千山万水中间有多少机器和路由都必须在两端就是我们所说的Source和Destination间建立连接一旦连接建立起来就说已经是端到端的连接了所以端到端是逻辑链路其中包含着无数个辛苦工作的点到点就好像我们这些高贵的打工人一样
在这一层我们知道的最有名的协议就是TCP和UDP。
我们来简单看一下TCP和UDP
TCP的介绍
TCP的全称是Transmission Control Protocol它是一种通信协议通过该协议数据可以通过网络在系统之间传输。在这种情况下数据以数据包的形式传输。它包括错误检查保证传递并保留数据包的顺序。
TCP使用流控制机制通过一次发送太多数据包来确保发送者不会压倒接收者。 TCP将数据存储在发送缓冲区中并在接收缓冲区中接收数据。当应用程序准备就绪时它将从接收缓冲区读取数据。如果接收缓冲区已满则接收器将无法处理更多数据并将其丢弃。为了保持可以发送给接收方的数据量接收方告诉发送方接收缓冲区中有多少剩余空间接收窗口。每次接收到数据包时都会使用当前接收窗口的值向发送方发送一条消息。
当你在浏览器中请求网页时计算机会将TCP数据包发送到该网络服务器的地址并要求其将网页发送回给你。 Web服务器通过发送TCP数据包流进行响应你的Web浏览器将这些数据包缝合在一起以形成网页。当你单击链接登录发表评论或执行其他任何操作时Web浏览器将TCP数据包发送到服务器而服务器将TCP数据包发送回。
当提到TCP你首先能想到的就是可靠。
所以TCP发送的数据包在传输过程中不会丢失或破坏任何数据。这就是即使出现网络故障也不会损坏文件下载的原因。当然如果收件人完全脱机则你的计算机将放弃并且你会看到一条错误消息指出它无法与远程主机通信。TCP通过两种方式实现这一目标。首先它通过对数据包编号来对其排序。其次它通过让收件人将响应发送回发件人说已收到消息来进行错误检查。如果发件人没有收到正确的答复它可以重新发送数据包以确保收件人正确接收它们。
也许TCP对于其他人来说代名词是三次握手TCP使用三次握手建立可靠的连接。连接是全双工的并且双方彼此同步SYN和确认ACK。这四个标志的交换通过三个步骤SYNSYN-ACK和ACK执行。“正常” 的TCP连接拆除是通过4次握手进行的。这个三次握手的协议其实和良好的通信是很相通的。
比如我曾经参加过一个training。是教你怎么和别人良好的沟通其中一点就是重复确认。比如美国队长问黑寡妇您吃了吗黑寡妇回答你是问我您吃了吗美国队长说是的。然后黑寡妇就可以回答我吃了或者没吃但是你有没有发现。在黑寡妇正式回答问题之前是不是也使用了“三次握手”的原则来建立连接下次你如果记不住的话就想一下我说的这个例子。
那我们来看一下分手为什么要复杂一点呢。比如美国队长和黑寡妇谈恋爱但是两人身高差太多决定要分手这时候美队和黑寡妇说我觉得你很漂亮但是我想和你分手这时候黑寡妇说好的。我同意你的分手请求但是作为女孩子这时候是不是要挽回一点面子她会再说一句记住了不是你和我分手而是我和你分手。美队听了之后只能回一个好吧我也同意和你分手这样两人是不是就彻底分了。同理我也希望你能记住美队和黑寡妇这段10秒钟的恋情是来帮助你学习TCP的分手过程。
UDP的介绍
其实UDP的优点还是很多的除了不能保证错误检查和数据恢复之外它与TCP协议相同。如果使用此协议则无论接收端出现什么问题数据都会连续发送。UDP不提供流控制。使用UDP数据包以连续流的形式到达或被丢弃。它丢弃了所有的错误检查内容。因为所有来回通信都会引入延迟从而降低速度。
当应用程序使用UDP时数据包仅发送给收件人。发件人不会等着确定收件人是否收到了数据包而是继续发送下一个数据包。如果收件人在这里和那里缺少一些UDP数据包他们只是失去了发件人不会重新发送它们就好像某些无良快递一样丢了就是丢了。丢失所有这些开销意味着设备可以更快地进行通信。当需要速度且不需要纠错时使用UDP。例如UDP常用于直播和在线游戏。你可能不知道QQ 就是以UDP协议为主以TCP协议为辅的。感兴趣的你查一下微信是什么连接的。
假设你正在观看实时视频流该视频流通常使用UDP而不是TCP进行广播。服务器只是向观看的计算机发送恒定的UDP数据包流。如果几秒钟失去连接视频可能会冻结或跳动一会儿然后跳到广播的当前位置。如果遇到较小的数据包丢失则由于视频继续播放而没有丢失的数据因此视频或音频可能会暂时失真。
这在网络游戏中也类似。如果你错过了一些UDP数据包则当你收到较新的UDP数据包时播放器角色可能会在地图上传送。如果你错过了旧数据包就没有必要索要这些数据了因为没有你游戏将继续进行。重要的是游戏服务器上正在发生的事情而不是几秒钟前发生的事情。放弃TCP的错误校正有助于加快游戏连接速度并减少延迟。
当然这也是我们后面要重点讲的两个协议。这里只是抛砖引玉。那是因为TCP和UDP是那么的重要。所以我们一定要深入的来探讨和学习。后面会详细到你想不理解都难。