首页 > 编程知识 正文

计算机科学与技术实验课(计算机科学技术课程)

时间:2023-05-03 19:02:20 阅读:98324 作者:1150

笔者将与大家分享TCP/IP协议家族的基础知识,HTTP、TCP、UDP、Socket、状态码等。

一个完整的通信过程

互联网,顾名思义,就是互相连接形成网络。关键是“人脉”。从技术上讲,网络就是交流。

那么,沟通的过程是什么?使用浏览器访问网页是最常见的交流方式。我们也以访问网页为例,看一个完整的沟通过程。

我们在浏览器中输入一个URL,输入后会在浏览器中观察页面内容。其实这个过程经历了很多步骤。

我们在地址栏输入一个URL链接,比如www.baidu.com;浏览器向百度服务器发送访问请求;百度服务器收到这个访问请求后,进行处理和分析,知道客户端想访问网站;百度服务器向浏览器返回相应的响应,包括页面的源代码等。浏览器随后分析其响应;在浏览器中呈现网页。

互联网的基础:TCP/IP协议族

互联网的关键是通信,通信的关键是通信协议。

跑题了,一时之间,联想的5G投票事件如火如荼。除了民族感情,更多的是关于通信协议的竞争。谁掌握了通信协议,谁就掌握了通信的核心。

计算机之间的通信协议是TCP/IP协议族,通信协议定义了通信的基本问题。

比如哪一方先发起通信,通信使用哪种语言,数据传输顺序是什么样的,如何结束通信等规则都称为协议。通过这些协议,不同的电脑、手机甚至智能手表都可以相互通信。

“家庭”是指多种协议,如TCP、UDP、IP、FTP、HTTP、ICMP等。都属于TCP/IP家族。这些协议本身可以分为不同的层,大致可以分为四层,即应用层、传输层、网络层和链路层。

当然,有不同的划分方式,它们是相似的,没有本质的区别。

1)应用层

应用层负责传输各种最终形式的数据,是直接与用户打交道的层。典型的协议有HTTP、FTP等。

2)传输层

传输层负责传输文本数据。传输层有两种不同的协议,即传输控制协议和用户数据报协议。

3)网络层

网络层负责分配地址和传输数据,主要协议是IP协议。

互联网协议地址是指互联网协议地址,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以屏蔽物理地址的差异,标记网络中一台计算机的一串数字,如192.168.1.1。

4)链路层

在链路层为用户提供透明可靠的数据传输基础服务。

透明是指在这一层传输的数据的内容、格式和编码不受限制,不需要解释信息结构的含义。可靠的传输使用户能够避免担心信息丢失、干扰信息和不正确的序列。

你可能会想,为什么要分等级?

在层次之间的接口保持不变的情况下,可以在内部改变层次,从而降低开发的复杂度。在开发过程中,我们只需要关注某个层次的协议,并不需要对所有的协议都有深入的了解。数据是如何流动的?

数据发送时,依次经过应用层、传输层、网络层和链路层,再通过光纤等硬件传输到接收端。

接收方的链路层接收数据,然后经过网络层、传输层,最后到达应用层进行数据处理。

首先,作为发送方的客户端在应用层(HTTP协议)发出一个HTTP请求(比如想要访问http://www.baidu.com),并生成HTTP数据。

为了传输方便,从应用层接收的数据(HTTP数据)被封装在传输层(如TCP协议)中,然后转发到网络层。在网络层(IP协议)中,添加地址作为通信目的地,并将其转发到链路层。这些数据与以太网数据一起附加并发送,生成的以太网数据将通过物理层传输到接收器。接收器在链路层接收数据,然后依次传输到上层,直到应用层。当它被传输到应用层时,客户端发送的HTTP请求才能被真正接收到。

HTTP是啥?

HTTP协议是Hyper Text Transfer Protocol,这是服务器用来将超文本传输到本地浏览器的传输协议。作为HTTP TCP/IP协议家族的一部分,作为应用层的面向对象协议,它以其简单、快速的特点得到了广泛的应用。

HTTP协议在客户机-服务器架构上工作,客户机向服务器发送所有请求。

服务器根据接收到的请求后,向客户端发送响应信息。

HTTP协议具有以下特点:

HTTP协议简单快速,客户端向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。HTTP系统通信灵活,允许传输任意类型的数据对象。比如:文字、图片、音频和视频等内容,这也是我们可以在浏览器或者手机APP查看各种音频、视频的原因。HTTP协议面向无连接通信,面向无连接是指通信双方不需要事先建立一条通信线路,而是把每个带有目的地址的包送到线路上,由系统自主选定路线进行传输。这就像我们做出租车的时候,只会告诉司机目的地,并不需要跟司机说走哪条路。

TCP、UDP、Socket

TCP

TCP(transport control protocol,传输控制协议)是面向连接的、可靠的流协议。

流就是指不间断的数据,你可以把它想象成排水管中的水流。

面向连接,是指发送数据之前必须在两端建立连接。建立连接,为数据的可靠传输打下了基础。

可靠的意思是信息不会丢失,当一台计算机想要与另一台计算机通讯时,两台计算机之间的通信需要畅通且可靠,这样才能保证正确收发数据。比如:查收电子邮件的时候,有时候差一个字,意思可能就不一样了,所以要保证每一个字都能够接收到。

在技术实现上,TCP为了保证报文传输的可靠,就给每个包一个序号,序号也保证了传送到接收端实体的包的按序接收。接收端接受到数据之后,也会向发送端发送一个确认的信息(Acknowledgement ,ACK)。如果发送端在一定时间内没有收到接收端返回的ACK,那么发送端会重新发送数据,保证通信的可靠性。

UDP

UDP(user datagram protocol,用户数据报协议)与TCP协议一样用于处理数据包,是一种无连接,面向消息的,提供高效率服务的协议。

UDP是面向无连接的协议, UDP不需要在发送数据前进行建立连接,想发数据就可以开始发送了。有时候,接收端还没有准备好,发送端就开始发送数据了!

UDP也没有数据拆分和编号操作,一股脑直接发送过去了。特别是在网络传输状况较差的时候,发送端只顾着发送数据,接收端可能压根没有接受到数据。

但UDP这样做也有好处,就是传输速度快,TCP在传输之前要建立连接,传输过程中还要编号。接收端接收到所有编号之后,重新组装成信息,需要花费不少时间,在对时间较高的场景,这样做明显会带来较长的时延。

所以,UDP常用在对实时性较高的通信领域,比如:视频会议,这些情况对实时性要求较高,即使丢失了一些数据,也不影响接受信息。

TCP提供面向连接的可靠服务 ,UDP提供无连接的不可靠的服务。对数据准确性要求高,速度可以相对较慢的,可以选用TCP,对实时性要求高的场景可以使用UDP。

Socket

除了TCP/IP,我们可能也会听说过Socket。

Socket(套接字) 是对 TCP/IP 协议的封装,Socket 只是个接口(API)不是协议,通过 Socket 我们才能使用 TCP/IP 协议。

创建 Socket 接口的时候,需要指定传输层协议,可以是 TCP 或者 UDP,当用 TCP 连接,该Socket就是个TCP连接,反之亦然。

状态码:404

服务器响应客户端请求的时候,会返回HTTP状态码(HTTP Status Code)。状态码是表示服务器响应状态的3位数字代码,表示访问请求已经被服务器接收、理解并接收。

状态码可以分为下面5类:

1xx:指示信息–表示请求已接收,继续处理;2xx:成功–表示请求已被成功接收、理解、接受;3xx:重定向–要完成请求必须进行更进一步的操作;4xx:客户端错误–请求有语法错误或请求无法实现;5xx:服务器端错误–服务器未能实现合法的请求。

下面是几个比较常见的状态码。

1)200:OK

请求已成功,出现此状态码是表示正常状态。

2)403:Forbidden

服务器已经理解请求,但是拒绝执行它,通常是服务器文件权限设置导致,比如:用户无权访问。

3)404:Not Found

用户最常见的状态码是404,即请求失败,通常是访问的资源在服务器中不存在。用户没有找到自己需要的资源,给用户的体验很不好,自定义404错误页面是提高用户体验的常见做法。

当用户访问的资源不存的时候,不是直接返回404,而是指向一个设计好的html 文件,有些网站甚至会为404设置个小游戏,作为彩蛋。

比如:游戏公司暴雪的404网页延续了其冷酷的设计,一张被锤子砸得面目全非的网页告诉用户:你真的走错路了。

八卦:下载那些事儿

带宽与网速

我们去中国电信、中国联通、中国移动办理宽带网络的时候,带宽通常是10M、20M,但安装完成后,下载速度却可能只有1M/s,远远达不到所说的10M。是运营商欺骗了我们么?带宽、网速是什么,又有什么关系呢?

带宽是数据传输的速度,单位是比特/秒(bps),10M=10Mbps。网速是数据传输的速度,但是单位与带宽的单位不同,单位是字节/秒(B/s),1MB/s=1024KB/s 。

比特是信息的最小单位,1字节=8比特,1字节/秒=8比特/秒。因此, 10M带宽=1.25MB/s网速,1M带宽=0.125MB/s=128KB/s,运营商提供的10M网络,转换成网速也就是1.25M/s,跟我们日常的体验相符,这也算是运营商的“小诡计”了。

带宽成本

对紧张的黑米而言,10M的宽带,每个月的上网费用就要几十块钱。不只是对紧张的黑米,带宽成本对互联网公司而言同样是巨大的成本,特别是对于各大视频网站而言,带宽成本是非常巨大的运营成本。

根据阿里云提供的数据,按流量计费,要0.8元/G,一部电影通常在2G左右,下载一部电影就需要 1.6元,这个数据看起来可能不大,但考虑到用户规模,数据就会变得很大了。如果有100万个用户,每个用户每天看一部电影,每天的带宽成本可能就有160万元,这也是视频网站难以盈利的重要原因。

为了减低带宽成本,互联网公司也是想尽办法,比如:百度网盘会对非会员限速,巨大的带宽成本是百度网盘这么做的重要原因。

面对用户对限速的质疑,百度网盘回应,“作为一款免费的云存储产品,每年的服务器成本和带宽成本是硬伤啊。百度网盘存活着为广大用户提供免费的空间内存已经是一笔需每年持续支出的高额成本。除此之外,还有服务成本和带宽成本,宝宝们虽然已经为家里的网络网速买过单,但是当宝宝们打开百度网盘上传和下载文件时,我们还需要为这些文件传输时的带宽进行支付,用户文件传输时带宽越大我们需要支付的费用越高”。

即使是财大气粗的百度公司,也要考虑到wrdmp的带宽成本,带宽成本始终是高流量网站需要面对的问题。

P2P

提高下载速度就要增加带宽,增加带宽,运营成本也随之提高;如果不增加带宽,下载速度就会降低,用户体验很差。

有没有什么办法可以解决成本和下载速度之间的矛盾呢?

P2P是个好主意,这里的P2P不是互联网金融的P2P,而是点对点(peer to peer)通信的网络技术。P2P依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上,互联网金融的P2P借鉴了这个技术概念。

定义有些拗口,我们举个例子就明白了。

传统下载方式是从服务器端下载文件到客户端,由于是从一台服务器下载,服务器所提供的带宽是一定的,因此下载人越多速度越慢。假设服务器的带宽是100M,即12500kb/s。有100台客户端连接,那么每一台的带宽就是125kb/s,难怪下载速度这么慢!

为了避免服务端带宽的限制, P2P下载应运而生。与传统下载不同,P2P下载是用户越多,下载越快,这是因为P2P用的是一种共享的方式提供下载。

我们可能也会听说过BT,BT全名叫”BitTorrent”, BT和P2P有些差别,P2P指的是数据的一种传送方式,而BT是应用这种方式的软件。但我们大多数人接触较多的都是P2P,这里就用P2P直接使用P2P代指P2P和BT了,请读者知晓。

我们以迅雷下载为例,说明P2P的下载过程。

通过P2P下载,在不增加服务器带宽的时候,却能提高下载速度!网络真奇妙!

本文由@wqdbbz 原创发布于人人都是产品经理,未经许可,禁止转载

题图来自Unsplash, 基于CC0协议

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。