计算机网络问题

1TCP三次握手与四次挥手

在这里插入图片描述
1 端口号:用来标识同一台计算机的不同的应用进程接口源端口:源端口和IP地址的作用是标识报文的返回地址目的端口:端口指明接收方计算机上的应用程序接口

2 序号和确认号:是TCP可靠传输的关键部分。序号SEQ是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。e.g.一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。所以序号确保了TCP传输的有序性

确认号ack,指明下一个期待收到的字节序号表明该序号之前的所有数据已经正确无误的收到确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0。

3 控制位:URG ACK PSH RST SYN FIN,共6个,每一个标志位表示一个控制功能。
1)URG:紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。
2)ACK:确认序号ack标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。
3)PSH:push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。
4)RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。
5)SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。
6)FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流

在这里插入图片描述
握手之前主动打开连接的客户端结束closed(关闭)阶段,被动打开的服务器端也结束closed阶段,并进入 listen(收听) 阶段。随后开始“三次握手”:

(1)client——>server
首先客户端向服务器端发送一段TCP报文,其中:
标记位SYN=1,表示“请求建立新连接”;
此段报文的序号为Seq=x(报文的序号,序号确保了TCP传输的有序性)
随后**客户端进入syn-sent(同步发送)**阶段,服务器端进入listen(收听)阶段

(2)client<——server
服务器端接收到来自客户端的TCP报文之后,结束listen(收听)阶段,并返回一段TCP报文,其中:
标志位ACK=1,表示“确认客户端发送的报文Seq序号有效,服务器能正常接收客户端发送的数据
SYN=1,表示同意创建新连接”(即告诉客户端,服务器收到了你的数据);
此段报文的序号为Seq=y
确认号ack=x+1(指明下一个期待收到报文的字节序号)ack=对方发送的报文序列号seq+1
随后**服务器端进入syn-rcvd(同步收到)**阶段。

(3)client——>server
客户端接收到来自服务器端的确认收到数据的TCP报文之后,明确了从客户端到服务器的数据传输是正常的,结束SYN-SENT(同步发送)阶段,并返回最后一段TCP报文。其中:
标志位ACK=1,表示“确认服务端发送的报文Seq序号有效,客户端能正常接收服务器发送的数据”;
此段报文的序号为Seq=x+1,表示第(2)步收到服务器端的确认号ack,并将其值作为自己的序号值
确认号ack=y+1表示收到服务器端报文序号Seq=y,并将其值加1作为自己的确认号ack的值
随后**客户端进入established(已建立)**阶段。服务器结束syn-sent阶段,进入established(已建立)阶段
此后客户端和服务器端进行正常的数据传输。这就是“三次握手”的过程。

1首先client——>server发送一段TCP报文,随后客户端进入syn-sent(同步发送)阶段,服务器端进入listen(收听)阶段。
2server接收到来自client的TCP报文之后,结束listen(收听)阶段,并返回一段TCP报文,随后server进入syn-rcvd(同步收到)阶段。
3client接收到来自server的确认收到数据的TCP报文之后,明确了从客户端到服务器的数据传输是正常的,结束syn-sent(同步发送)阶段,并返回最后一段TCP报文。
在这里插入图片描述
(1)client——>server
客户端想要释放连接,向服务器端发送一段TCP报文(Seq=U) 其中:标记位FIN=1,表示“请求释放连接”;随后客户端进入FIN-WAIT-1阶段,即半关闭阶段,并且停止在客户端到服务器端方向上发送数据,但是客户端仍然能接收从服务器端传输过来的数据

(2)client<—— server
服务器端接收到从客户端发出的TCP报文之后,确认了客户端想要释放连接,随后服务器端结束ESTABLISHED阶段,进入CLOSE-WAIT阶段(半关闭状态)并返回一段TCP报文(Seq=V),其中:
标记位ACK=1,表示“接收到客户端发送的释放连接的请求”; 确认号为ack=U+1
客户端收到从服务器端发出的TCP报文之后,确认了服务器收到了客户端发出的释放连接请求,随后客户端结束FIN-WAIT-1阶段,进入FIN-WAIT-2阶段

(3)client<——server
服务器端自从发出ACK确认报文之后,经过CLOSED-WAIT阶段,做好了释放服务器端到客户端方向上的连接准备再次向客户端发出一段TCP报文(Seq=W),其中:标记位FIN=1,ACK=1,表示“已经准备好释放连接了”注意:这里的ACK并不是确认收到服务器端报文的确认报文。确认号ack=U+1随后服务器端结束CLOSE-WAIT阶段,进入LAST-ACK阶段。并且停止在服务器端到客户端的方向上发送数据,但是服务器端仍然能够接收从客户端传输过来的数据。

(4)client——>server
客户端收到从服务器端发出的TCP报文,确认了服务器端已做好释放连接的准备,结束FIN-WAIT-2阶段,进入TIME-WAIT阶段,并向服务器端发送一段报文(Seq=U+1),其中:标记位为ACK=1,表示“接收到服务器准备好释放连接的信号”。
确认号为ack=W+1随后客户端开始在TIME-WAIT阶段等待2MSL客户端等待完2MSL之后,结束TIME-WAIT阶段,进入CLOSED阶段,由此完成“四次挥手”。

2为什么“握手”是三次,“挥手”却要四次?

TCP建立连接时之所以只需要"三次握手",是因为在第二次"握手"过程中服务器端发送给客户端的TCP报文是以SYN与ACK作为标志位的。即SYN建立连接报文与ACK确认接收报文是在同一次"握手"当中传输的,所以"三次握手"不多也不少,正好让双方明确彼此信息互通。
TCP释放连接时之所以需要“四次挥手”,是因为FIN释放连接报文与ACK确认接收报文是分别由第二次和第三次"握手"传输的

3SYN建立连接报文与ACK确认,为何建立连接时一起传输,释放连接时却要分开传输?

建立连接时,被动方服务器端结束CLOSED阶段进入“握手”阶段并不需要任何准备,可以直接返回SYN和ACK报文,开始建立连接。

释放连接时,被动方服务器,突然收到主动方客户端释放连接的请求时并不能立即释放连接,因为还有必要的数据需要处理,所以服务器先返回ACK确认收到报文,经过CLOSE-WAIT阶段准备好释放连接之后,才能返回FIN释放连接报文。

4OSI与TCP/IP各层的结构与功能,都有哪些协议

学习计算机网络时我们一般采用折中的办法,也就是中和 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。
在这里插入图片描述
应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用
应用层协议定义的是应用进程间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的 HTTP协议,支持电子邮件的 SMTP协议等等。我们把应用层交互的数据单元称为报文

运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务应用进程利用该服务传送应用层报文
运输层主要使用以下两种协议:传输控制协议 TCP(Transmisson Control Protocol)–提供面向连接的,可靠的数据传输服务。用户数据协议 UDP(User Datagram Protocol)–提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)

网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送在发送数据时,网络层把运输层产生的报文段封装成分组和包进行传送。在 TCP/IP 体系结构中,由于网络层使用 IP 协议,因此分组也叫 IP 数据报 ,简称 数据报

**数据链路层(data link layer)**通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装程帧,在两个相邻节点间的链路上传送帧。

物理层上所传送的数据单位是比特。物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异使其上面的数据链路层不必考虑网络的具体传输介质是什么

在互联网使用的各种协中最重要和最著名的就是 TCP/IP 两个协议。现在人们经常提到的TCP/IP并不一定单指TCP和IP这两个具体的协议,而往往表示互联网所使用的整个TCP/IP协议族。

5拥塞控制

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是点对点通信量的控制,是个端到端的问题。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收

为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化

TCP的拥塞控制采用了四种算法,即 慢开始 、 拥塞避免 、快重传 和 快恢复

慢开始: 慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值

拥塞避免: 拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大

快重传与快恢复:在 TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段有了 FRR,就不会因为重传时要求的暂停被耽误。  当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。

6打开一个网页,整个过程会使用哪些协议

在这里插入图片描述
总体来说分为以下几个过程:
1 DNS解析
2 TCP连接
3 发送HTTP请求
4 服务器处理请求并返回HTTP报文
5 浏览器解析渲染页面
6 连接结束

7http状态码

100:这个状态码是告诉客户端应该继续发送请求;
200:表示服务器已经成功接受请求,并将返回客户端所请求的最终结果
202:表示服务器已经接受了请求,但是还没有处理,而且这个请求最终会不会处理还不确定
204:服务器成功处理了请求,但没有返回任何实体内容 ,可能会返回新的头部元信息
301:客户端请求的网页已经永久移动到新的位置,当链接发生变化时,返回301代码告诉客户端链接的变化,客户端保存新的链接,并向新的链接发出请求,已返回请求结果
404:请求失败,客户端请求的资源没有找到或者是不存在
500:服务器遇到未知的错误,导致无法完成客户端当前的请求。
503:服务器由于临时的服务器过载或者是维护,无法解决当前的请求

8http 请求包含哪几个部分(请求行、请求头、请求体[请求数据])

** 1请求行**
请求方法字段URL字段HTTP协议版本
例如:GET /index.html HTTP/1.1
GET方法将数据拼接在url后面,传递参数受限
请求方法: GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT

2请求头(key value形式)
User-Agent:产生请求的浏览器类型
Accept客户端可识别的内容类型列表
Host主机地址

3 请求数据
post方法中,会把数据以key value形式发送请求

9如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP设有一个保活计时器,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

猜你喜欢

转载自blog.csdn.net/zs18753479279/article/details/114817889