TCP和UDP协议的区别_朋友关系

TCP和UDP协议的区别_朋友关系在解释两者之间的关系之前,我们必须从宏观的角度了解互联网的整个交互模型。因为当了解互联网在大体上是如何运作时,我们才能了解HTTP和TCP存在的意义,包括他们所要解决的问题是。 (此图来自Udacity的网络协议教程)互联网的模型被分为4层,从上至下每一层都依赖其底层协议。换言之,Application(应用层)的协议操作成功的前提是Transport(运输层)的存在。没有运输层就没有应…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在解释两者之间的关系之前,我们必须从宏观的角度了解互联网的整个交互模型。因为当了解互联网在大体上是如何运作时,我们才能了解HTTP和TCP存在的意义,包括他们所要解决的问题是。

TCP和UDP协议的区别_朋友关系 (此图来自Udacity的网络协议教程)

互联网的模型被分为4层,从上至下每一层都依赖其底层协议。换言之,Application(应用层) 的协议操作成功的前提是Transport(运输层)的存在。没有运输层就没有应用层。好比没有任何道路的前提下就没有汽车可以行驶。而这种层次上的抽象是让开发者在设定某个层面的协议时不去考虑其他层面的问题。比如我要在运输层设计协议时,我唯一要考虑的是如何将数据从一台计算机传到另外一台,我需要着重的是其稳定性和效率。在解决运输层的问题时我不需要考虑传达的数据是什么类型或内容,因为这样的问题是应用层索要操心的。在上图中可以看到HTTP和TCP是存在于不同层面的网络协议,所以他们之间必然存在着依赖关系。确切的说是HTTP所设定的所有规则都建立在一个假设之上,那就是运输层的协议有在正常运作。

那HTTP和TCP分别代表了什么呢?

HTTP的责任是去定义数据,在两台计算机相互传递信息时,HTTP规定了每段数据以什么形式表达才是能够被另外一台计算机理解。而TCP所要规定的是数据应该怎么传输才能稳定且高效的传递与计算机之间。

HTTP的核心概念

除了HTTP存在于应用层之外,该协议还有5个特点。

1. HTTP的标准建立在将两台计算机视为不同的角色:客户端和服务器。客户端会向服务器传送不同的请求(request),而服务器会对应每个请求给出回应(response)。

2. HTTP属于无状态协议(Stateless)。这表示每一个请求之间是没有相关性的。在该协议的规则中服务器是不会记录任何客户端操作,每一次请求都是独立的。(记录用户浏览行为会通过其他技术实现)

3. 客户端的请求被定义在几个动词意义范围内。最长用到的是GET和POST,其他动词还包括DELETE, HEAD等等。

4. 服务器的回应被定义在几个状态码之间:5开头表示服务器错误,4开头表示客户端错误,3开头表示需要做进一步处理,2开头表示成功,1开头表示在请求被接受处理的同时提供的额外信息。

5. 不管是客户端的请求信息还是服务器的回应,双方都拥有一块头部信息(Header)。头部信息是自定义,其用途在于传递额外信息(浏览器信息、请求的内容类型、相应的语言)。

TCP的核心概念

在HTTP的规范内,两台计算机的交互被视为request和response的传递。而在实际的TCP操作中,信息传递会比单纯的传递request和response要复杂。通过TCP建立的通讯往往需要计算机之间多次的交换信息才能完成一次request或response。

TCP的传输数据的核心是在于将数据分为若干段并将每段数据按顺序标记。标记后的顺序可以以不同的顺序被另一方接收并集成回完整的数据。计算机对每一段数据的成功接收都会做出相应,确保所有数据的完整性。

TCP在传递数据时依赖于实现定义好的几个标记(Flags)去向另一方表态传达数据和连接的状态:

* F : FIN – 结束; 结束会话
* S : SYN – 同步; 表示开始会话请求
* R : RST – 复位;中断一个连接
* P : PUSH – 推送; 数据包立即发送
* A : ACK – 应答
* U : URG – 紧急
* E : ECE – 显式拥塞提醒回应
* W : CWR – 拥塞窗口减少

也是基于这些标志TCP可以实现三次(three ways handshake)和四次握手 (four ways tear down)。三次握手是初步建立连接的机制,而四次握手则是断开链接。两者之间大致操作是一样的,A发出建立链接(SYN)或者断开链接(FIN)的请求,B认可(ACK)其请求然后发出同样的请求给A并等待A的认可。在双方认可后,链接正式成立或者断开。

这里有两个问题:

1. 为什么A发出请求并且得到认可后B还有重复同样的动作?

在建立连接的过程中SYN标记代表的是一个随机序列号,因为当文件被切断的时候并不是从0或者1开始标记每段的顺序,所以双方都需要通过传递SYN来告知文件片段的第一个序列是多少号。

2. 为什么同样的机制,建立链接和断开链接需要握手的次数不同?

三次和四次握手的区别在于,在建立连接时,B的ACK和SYN会一起发送回A,而在断开链接时因为B发送ACK之后还要做其他处理后才能返回FIN,,因此将两步拆开。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/191256.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 观察者模式observer不适用于_观察者模式是什么

    观察者模式observer不适用于_观察者模式是什么观察者模式Obeserver动机模式定义实例结构图要点总结笔记动机在软件构建过程中,我们需要为某些对象建立 一种“通知依赖关系” —-一个对象发(目标对象)的状态发生改变,所有依赖的对象(观察者对象)都将很好的得到通知。如果这样的依赖关系过于紧密。将使软件不能很好的抵御变化使用面向对象技术 可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。模式定义定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(subject)的状态发生改变时,所有依赖于它的对象都得到通

  • JAVA链表中的回文链表结构

    JAVA链表中的回文链表结构作为一个java初学者,最近遇到了回文链表结构这个难题,经过一番学习总算搞清楚个大概。先来说一下什么是回文链表,会问链表在我们生活中经常能够遇到。会问链表的结构就是例如:1->2->3->2->1。我们将它反转过来还是与原链表相同,这种就称为回文结构。具体方法:1.先找到链表的中间位置2.然后将中间位置的链表反转3.从两边向中间遍历代码如图classNode{publi…

  • 用proxy实现一个更优雅的vue

    用proxy实现一个更优雅的vue

  • python服务器运维步骤_python运维服务器

    python服务器运维步骤_python运维服务器好久没有写东西了.一直做服务器开发需要写一些脚本来控制服务器的启动.本来Windows自带了任务计划,但不是特别方便,还是用python写了一下.需求:在固定的时间启动服务器先看源代码:defstart_process(date):cwd=os.getcwd();globallist_threads;globaliskill;iskill=False;foriinrange(n…

  • mac clion激活码【2021.8最新】

    (mac clion激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

  • 在线用户数与并发用户数的区别和比例关系[通俗易懂]

    在线用户数与并发用户数的区别和比例关系[通俗易懂]在线用户数与并发用户数的区别和比例关系在线用户数:用户同时在一定时间段的在线数量并发用户数:某一时刻同时向服务器发送请求的用户数一般而言,我们习惯以5-20的比率来推算并发用户与在线用户之间的关系。即,并发与在线的比例约为5%-20%比如,某网站存在注册用户数为10W人,但同时在线最多1W人,但这1W个人,可能只有500人会浏览帖子,500人会进行发帖,只有这1000个人对服务

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号