计算机网络总结(一)

● 请你说一下TCP怎么保证可靠性,并且简述一下TCP建立连接和断开连接的过程

参考回答:

TCP保证可靠性:

(1)序列号、确认应答、超时重传

数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明了它下一次需要接收的数据序列号。如果发送发迟迟未收到确认应答,那么可能是发送的数据丢失,也可能是确认应答丢失,这时发送方在等待一定时间后会进行重传。这个时间一般是2*RTT(报文段往返时间)+一个偏差值。

(2)窗口控制与高速重发控制/快速重传(重复确认应答)

TCP会利用窗口控制来提高传输速度,意思是在一个窗口大小内,不用一定要等到应答才能发送下一段数据,窗口大小就是无需等待确认而可以继续发送数据的最大值。如果不使用窗口控制,每一个没收到确认应答的数据都要重发。

使用窗口控制,如果数据段1001-2000丢失,后面数据每次传输,确认应答都会不停地发送序号为1001的应答,表示我要接收1001开始的数据,发送端如果收到3次相同应答,就会立刻进行重发;但还有种情况有可能是数据都收到了,但是有的应答丢失了,这种情况不会进行重发,因为发送端知道,如果是数据段丢失,接收端不会放过它的,会疯狂向它提醒......

(3)拥塞控制

如果把窗口定的很大,发送端连续发送大量的数据,可能会造成网络的拥堵(大家都在用网,你在这狂发,吞吐量就那么大,当然会堵),甚至造成网络的瘫痪。所以TCP在为了防止这种情况而进行了拥塞控制。

慢启动:定义拥塞窗口,一开始将该窗口大小设为1,之后每次收到确认应答(经过一个rtt),将拥塞窗口大小*2。

拥塞避免:设置慢启动阈值,一般开始都设为65536。拥塞避免是指当拥塞窗口大小达到这个阈值,拥塞窗口的值不再指数上升,而是加法增加(每次确认应答/每个rtt,拥塞窗口大小+1),以此来避免拥塞。

将报文段的超时重传看做拥塞,则一旦发生超时重传,我们需要先将阈值设为当前窗口大小的一半,并且将窗口大小设为初值1,然后重新进入慢启动过程。

快速重传:在遇到3次重复确认应答(高速重发控制)时,代表收到了3个报文段,但是这之前的1个段丢失了,便对它进行立即重传。

然后,先将阈值设为当前窗口大小的一半,然后将拥塞窗口大小设为慢启动阈值+3的大小。

这样可以达到:在TCP通信时,网络吞吐量呈现逐渐的上升,并且随着拥堵来降低吞吐量,再进入慢慢上升的过程,网络不会轻易的发生瘫痪。

TCP建立连接和断开连接的过程:

三次握手:

1. Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

2. Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

3. Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

四次挥手:

由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。

1.数据传输结束后,客户端的应用进程发出连接释放报文段,并停止发送数据,客户端进入FIN_WAIT_1状态,此时客户端依然可以接收服务器发送来的数据。

2.服务器接收到FIN后,发送一个ACK给客户端,确认序号为收到的序号+1,服务器进入CLOSE_WAIT状态。客户端收到后进入FIN_WAIT_2状态。

3.当服务器没有数据要发送时,服务器发送一个FIN报文,此时服务器进入LAST_ACK状态,等待客户端的确认

4.客户端收到服务器的FIN报文后,给服务器发送一个ACK报文,确认序列号为收到的序号+1。此时客户端进入TIME_WAIT状态,等待2MSL(MSL:报文段最大生存时间),然后关闭连接。

● 请回答一下HTTP和HTTPS的区别,以及HTTPS有什么缺点?

参考回答:

HTTP协议和HTTPS协议区别如下:

1)HTTP协议是以明文的方式在网络中传输数据,而HTTPS协议传输的数据则是经过TLS加密后的,HTTPS具有更高的安全性

2)HTTPS在TCP三次握手阶段之后,还需要进行SSL 的handshake,协商加密使用的对称加密密钥

3)HTTPS协议需要服务端申请证书,浏览器端安装对应的根证书

4)HTTP协议端口是80,HTTPS协议端口是443

HTTPS优点:

HTTPS传输数据过程中使用密钥进行加密,所以安全性更高

HTTPS协议可以认证用户和服务器,确保数据发送到正确的用户和服务器

HTTPS缺点:

HTTPS握手阶段延时较高:由于在进行HTTP会话之前还需要进行SSL握手,因此HTTPS协议握手阶段延时增加

HTTPS部署成本高:一方面HTTPS协议需要使用证书来验证自身的安全性,所以需要购买CA证书;另一方面由于采用HTTPS协议需要进行加解密的计算,占用CPU资源较多,需要的服务器配置或数目高

● 请你说一说HTTP返回码

HTTP协议的响应报文由状态行、响应头部和响应包体组成,其响应状态码总体描述如下:

1xx:指示信息--表示请求已接收,继续处理。

2xx:成功--表示请求已被成功接收、理解、接受。

3xx:重定向--要完成请求必须进行更进一步的操作。

4xx:客户端错误--请求有语法错误或请求无法实现。

5xx:服务器端错误--服务器未能实现合法的请求。

常见状态代码、状态描述的详细说明如下。

200 OK:客户端请求成功。

206 partial content服务器已经正确处理部分GET请求,实现断点续传或同时分片下载,该请求必须包含Range请求头来指示客户端期望得到的范围

300 multiple choices(可选重定向):被请求的资源有一系列可供选择的反馈信息,由浏览器/用户自行选择其中一个。

301  moved permanently(永久重定向):该资源已被永久移动到新位置,将来任何对该资源的访问都要使用本响应返回的若干个URI之一。

302 move temporarily(临时重定向):请求的资源现在临时从不同的URI中获得,

304:not modified :如果客户端发送一个待条件的GET请求并且该请求以经被允许,而文档内容未被改变,则返回304,该响应不包含包体(即可直接使用缓存)。

403 Forbidden:服务器收到请求,但是拒绝提供服务。

● 请你说一说TCP的三次握手和四次挥手的过程及原因

参考回答:

TCP的三次握手过程如下:

C-> SYN -> S

S->SYN/ACK->C

C->ACK->S

三次握手的原因:

// 有3中不同的看法:

1. 资源浪费观点:引自《计算机网络》释疑与习题解答 谢希仁

三次握手可以防止已经失效的连接请求报文突然又传输到服务器端导致的服务器资源浪费。例如,客户端先发送了一个SYN,但是由于网络阻塞,该SYN数据包在某个节点长期滞留。然后客户端又重传SYN数据包并正确建立TCP连接,然后传输完数据后关闭该连接。该连接释放后失效的SYN数据包才到达服务器端。在二次握手的前提下,服务器端会认为这是客户端发起的又一次请求,然后发送SYN ,并且在服务器端创建socket套接字,一直等待客户端发送数据。但是由于客户端并没有发起新的请求,所以会丢弃服务端的SYN 。此时服务器会一直等待客户端发送数据从而造成资源浪费。

2. 、可靠性论断:

另外一种是 如果想确定双通道通畅,必须使用三个包的发送接收,也就是三次握手:“这个问题的本质是, 信道不可靠, 但是通信双发需要就某个问题达成一致. 而要解决这个问题, 无论你在消息中包含什么信息, 三次通信是理论上的最小值. 所以三次握手不是TCP本身的要求, 而是为了满足"在不可靠信道上可靠地传输信息"这一需求所导致的.

三次是保证双方互相明确对方能收能发的最低值。理论上讲不论握手多少次都不能确认一条信道是“可靠”的,但通过3次握手可以至少确认它是“可用”的,再往上加握手次数不过是提高“它是可用的”这个结论的可信程度。另外Tcp的可靠传输更多的是靠重传机制来保证的

3. 初始序列号:

TCP建立连接的握手,实质上就是建立一个双向的可靠通信连接,一边一个来回,每一边都自带超时重传来确保可靠性(而不是靠握手的次数)。TCP的3次握手是优化的结果,其实它应该是4次握手,由于是从零开始的建立连接,因此将SYN的ACK以及被动打开的SYN合并成了一个SYN-ACK。
握手的作用,旨在确定两个双向的初始序列号,TCP用序列号来编址传输的字节,由于是两个方向的连接,所以需要两个序列号,握手过程不传输任何字节,仅仅确定初始序列号。

TCP的四次挥手过程如下:

C->FIN->S

S->ACK->C

S->FIN->C

C->ACK->S

四次挥手的原因:由于连接的关闭控制权在应用层,所以被动关闭的一方在接收到FIN包时,TCP协议栈会直接发送一个ACK确认包,优先关闭一端的通信。然后通知应用层,由应用层决定什么时候发送FIN包。应用层可以使用系统调用函数read==0来判断对端是否关闭连接。(也就是说主动关闭的一方在发送FIN之后不再发送数据,但是可能还需要接受数据)

● 请问tcp握手为什么两次不可以?为什么不用四次?

两次不可以:tcp是全双工通信,两次握手只能确定单向数据链路是可以通信的,并不能保证反向的通信正常

不用四次:
本来握手应该和挥手一样都是需要确认两个方向都能联通的,本来模型应该是:
1.客户端发送syn0给服务器
2.服务器收到syn0,回复ack(syn0+1)
3.服务器发送syn1
4.客户端收到syn1,回复ack(syn1+1)
因为tcp是全双工的,上边的四部确认了数据在两个方向上都是可以正确到达的,但是2,3步没有没有上下的联系,可以将其合并,加快握手效率,所有就变成了3步握手。

● 请你来说一下TCP拥塞控制?

参考回答:

发送方维持一个叫做拥塞窗口cwnd(congestion window)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口,另外考虑到接受方的接收能力,发送窗口可能小于拥塞窗口。(也就是发送窗口等于接收方的接收能力和拥塞窗口的较小者)慢开始算法的思路就是,不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。

过程cwnd的大小呈指数增长,直到超过慢启动门限,然后进入拥塞避免阶段,cwnd的大小线性增长,当出现网络拥塞(三个重复的ack或者超时)时候,将慢启动门限设置为出现拥塞时候大小的一半,cwnd的大小重新从0开始进入慢启动阶段。
快重传和快恢复:快重传要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期

注意两点:

1. TCP进行拥塞控制的算法有4种,即慢开始、拥塞避免、快重传和快恢复

2. 快重传之后执行的是快恢复而不是慢开始。在点4的时候,不是启动慢启动,而是执行快恢复算法,将门限值和拥塞窗口大小都置为当前拥塞窗口/2,并开始执行拥塞避免算法。

原文地址:https://www.cnblogs.com/lfri/p/12444083.html

时间: 2024-10-09 20:58:31

计算机网络总结(一)的相关文章

计算机网络(一)——互联网层

计算机网络,顾名思义,是由若干链路组成的,这些链路结点可以是计算机,集线器,交换机或路由器等:网络和网络之间可以通过路由器进行互联,这就是互联网的由来,而因特网就是最大的互联网:网络的存在是将许多计算机连接在一起,而因特网的存在是将许多网络连接在一起:网络的主要功能是让不同的主机之间进行数据的通信,实现大范围的资源共享:计算机之间的数据通信是通过接口来实现的: 因特网的组成部分分为边缘部分和核心部分:边缘部分为网络中的各个主机组成,核心部分是由连接这些网络的路由器组成,为边缘部分的主机提供服务:

有关计算机网络的知识分享一~

计算机网络这些基本的知识,之前学过,但那时正是爱玩绝不学习的时候,所以基本没什么印象,现在正常重新补一下. 所谓网络,是一系列可用于通信的设备相互连接构成的.在这个定义里面,一个设备可以是一台主机(或用另一种称呼,端系统),比如一台大型计算机,台式机,便携式计算机,工作站,手机或安全系统.在这种定义中,设备也可以是一个连接设备,比如用来将一个网络与另一个网络相连接的路由器,一个将不同设备连接在一起的交换机,或者一个用于改变数据形式的调制解调器,等等. 局域网(LAN,Local Area Net

计算机网络编程基本概念

网络: 计算机网络由一组通过通信信道相互连接的机器组成.我们把这些机器称为主机(hosts)和路由器(routers). 路由: 路由器的作用是将信息从一个通信信道传递或转发(forward)到另一个通信信道. 信道: 通信信道(communication channel)进行解释:它是将字节序列从一个主机传输到另一个主机的一种手段,可能是有线电缆,如以太网(Ethernet),也可能是无线的,如WiFi[ ],或是其他方式的连接. 报文: 这里的信息(information)是指由程序创建和解

网络基础篇----计算机网络基本概述(1)

享受生活  热爱挑战                                                                刘明远分享    一   计算机网络基本概述(1) 每章一段话: 不要让自己闲下来,给自己找些事情做.哪怕是看看书. 正文   (提示:本章内容比较无聊,最好当看故事一样来看,不必记下只需了解,内容基础) 1什么是计算机网络 号称新的"电力火花"是以计算机.通信.信息技术为支撑的计算机网络技术. 计算机网络将两台或多台计算机通过电缆或网络设

计算机网络学习1-网络层次

计算机网络学习中最基本的是计算机网络分层模型,目前学习需要了解的有两种 1.OSI(开放系统互连)有七层,记忆方法:无数网传会报应(物理层,数据链路层,网络层,传输层,会话层,表示层,应用层) 具体每层功能分析: 1.1物理层:规定建立,维持,断开通信端之间的机械.电气.功能.过程特性.单位bit: 物理层标准有:RJ-45,V3.5等 1.2数据链路层:不可靠物理介质上提供可靠的传输.单位frame: 数据链路层标准:SDLC,HDLC,PPP,帧中继等 1.3网络层:对数据包进行路由选择和转

计算机网络高级教程考点个人总结

计算机网络高级教程 选择题 50~60分 论述题:40~50分 个人总结仅供参考 论述题范围 1.  google公司,IBM公司.微软公司.苹果公司.华为公司.百度公司的技术发展方向. 2.5G的特点及其产业应用. 3.智慧城市的应用探索. 4.机器人技术与应用探索. Google公司市值6819.40亿美元,IBM市值1450亿美元,苹果8000亿美元,微软5400亿美元,阿里3632.63亿美元,腾讯3462亿美元,京东600亿美元,百度600亿美元,华为没有上市,没有市值. 选择题范围

胡说八道计算机网络之什么是网络?

胡说八道计算机网络之什么是网络(一) 什么是网络? 网络通信的实现:tcp/ip协议 使用Wireshark抓包分析tcp/ip协议栈 什么是网络? 所谓网络,就是通过一定的形式连接起来的物体,物体与物体之间可以实现通信. 比如这样的,就称为计算机网络.它可以实现计算机之间的通信. 抑或是这样的,就被称为神经网络.它可以通过生物的突触进行信号通信.最近深度学习,人工智能大量运用了神经网络的工作机制. 抑或是这样的,就被称为物联网络.它可以实现万物互联,想想还有点小激动呢,不知是福是祸. 只要是你

计算机基础:计算机网络

计算机网络 OSI模型 TCP握手协议 TCP/IP 4层模型

计算机网络中的协议

物理层 物理层考虑的是怎样才能连接各种计算机传输媒体上传输的数据比特流,而不是具体的传输媒体,用于物理层的协议叫做物理层的规程. 数据链路层 对于点对点的链路,PPP协议书目前应用最广泛的数据链路层协议 PPP协议的组成 1)一个将数据报封装到串行链路的方法,PPP既支持异步链路,有支持面向比特的同步链路.IP数据报在PPP帧中就是其信息部分. 2)一个用来建立,配置和测试数据链路连接的链路控制协议LCP.通信双方可协商一些选项.链路控制,PPP为用户发起呼叫以建立链路,在建立链路是协商以参数选

计算机网络(7)-----TCP协议概述

传输控制协议(Transmission Control Protocol) 概念 一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议. 主要特点 (1)TCP是面向连接的运输层协议.这就是说,应用程序在使用TCP协议之前,必须先建立TCP协议.在传送数据完毕后,必须释放已经建立的TCP连接.类似于“打电话”,需要先拨号建立连接,通话完之后要挂机释