计算机网络

目录

0、补充

1、 TCP和UDP的区别

在这里插入图片描述
UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认。

TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP 在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源

2、TCP 拥塞控制

拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致于过载。其实就是维护了一个拥塞窗口,拥塞控制窗口的大小取决于网络的拥塞程度。

3、TCP保证可靠传输

TCP从7个方面保证可靠传输

(1)数据包校验(TCP使用了校验和方法,TCP报文段有一个伪首部用来计算校验和,不传递):检验数据在传输过程中的变化,若校验出包有差错,就丢弃报文段并不给出响应,这时TCP发送数据端超时后会重发数据。
(2)应答机制:当tcp收到发自TCP连接另一端的数据,它会发送一个确认。
(3)超时重发:当发送端发出一个报文段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,就重发这个报文段。
(4)对失序数据包重排序:TCP报文作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP对失序数据重新排序,然后才交给应用层。
(5)丢弃重复数据: 对于重复数据,能够丢弃重复数据
(6)流量控制(滑动窗口协议):TCP连接的每一方都有固定大小的缓冲空间。TCP接收端只允许另一端发送接收端缓冲区所能容纳的数据,TCP发送端使用可变的滑动窗口来调节发送速率,不使接收端缓存溢出。
(7)拥塞控制:拥塞控制是TCP发送方针对网络拥堵情况所采取的措施。TCP发送方可以通过是否丢包(超时;收到3个连续的重复ACK)感知到拥塞,发送方使用拥塞窗口cwnd控制发送速率,当确认拥塞后,采用慢启动SS算法和加性增乘性减AIMD算法来调整发送速率。
当cwnd<门限值的时候,使用慢启动算法,以指数方式增长发送速率,直到接近门限值;当cwnd>=门限值时,表示网络可能进入拥塞状态,发送速率会降为以线性增长,进入CA拥塞避免阶段。乘性减是指发现丢包事件后,TCP要采取措施来迅速减小拥塞窗口。当超时事件发生时,TCP发送方会把窗口减到最小,即一个MSS(最大段长度),同时把门限值设置为之前的1/2,最后进入慢启动阶段。如果TCP发送方收到3个冗余ACK时,会把门限值减半,并把cwnd设置为门限值,并且进入AIMD阶段。

4、Get和Post的区别

GET 和 POST 本质都是 http 请求,只不过对它们的作用做了界定和适配,并让它们适应各自的场景

本质区别:GET 只是一次 http 请求,POST 先发请求头再发请求体,实际是两次请求

1、从功能上讲,GET 一般用来从服务器上获取资源,POST 一般用来更新服务器上的资源

2、从 REST 服务角度上来说,**GET 是幂等的,即读取同一个资源,总是得到相同的数据,而 POST 不是幂等的,因为每次请求对资源的改变并不是相同的;**进一步地,GET 不会改变服务器地资源,但是 POST 会对服务器资源进行改变。

3、从请求参数形式上看,**GET 请求地数据会附在URL之后,即将请求数据放置在 HTTP 报文地请求头之中,以 ?分割 URL 地传输数据,参数之间以 & 相连。**特别地,如果数据是英文字母/数字,原样发送;否则,会将其编码为 application/x-www-form-urlencoded MIME 字符串(如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用 BASE64 加密,得出如:%E4%BD%A0%E5%A5%BD,其中 %XX 中的 XX 为该符号以 16 进制表示的 ASCII);而 POST 请求会把提交的数据则放置在是 HTTP 请求报文的 请求体 中;

4、就安全性而言,POST 地安全性要比 GET 的安全性更高,因为 GET 请求的数据将明文出现在 URL 上,而 POST 请求参数则会被包装到请求体中,相对更安全

5、从请求的大小来看, GET请求的长度受限于浏览器或服务器对 URL 长度的限制,允许发送的数据量比较小,而 POST 请求则没有大小的限制。

5、HTTPS

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

1.1、应用层

作用: 通过应用进程间的交互来完成特定网络应用
协议: 应用层协议定义的是应用进程间的通信和交互的规则,如域名系统DNS和超文本传输新协议HTTP,支持电子邮件的 SMTP

1.2、运输层

作用: 负责向两台主机进程之间的通信提供通用的数据传输服务
协议: 传输控制协议TCP、用户数据协议UDP

由于一台主机可同时运行多个线程,因此运输层有复用和分用的功能。所谓复用就是指多个应用层进程可同时使用下面运输层的服务,分用和复用相、反,是运输层把收到的信息分别交付上面应用层中的相应进程

1.3、网络层

作用: 选择合适的网间路由和交换结点, 确保数据及时传送。 在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送
协议: IP协议

1.4、数据链路层

在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如:同步信息,地址信息,差错控制等)。

1.5、物理层

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

1.6、DNS(域名系统)

是因特网的一项核心服务,它作为可以将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的 IP 数串

1.7、HTTP协议

超文本传输协议,设计 HTTP最初的目的是为了提供一种发布和接收 HTML 页面的方法

1.8、TCP协议

传输控制协议 TCP:提供面向连接的,可靠的数据传输服务。

特点:

  1. TCP是面向连接的(就好像打电话一样,通话前需要先拨号建立连接,通话结束后要挂机释放连接)
  2. 每一条 TCP 连接只能有两个端点,每一条 TCP 连接只能是点对点的(一对一)
  3. TCP 提供可靠交付的服务。通过 TCP 连接传送的数据,无差错、不丢失、不重复、并且按序到达
  4. TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据
  5. 面向字节流。TCP 中的“流”(Stream)指的是流入进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和 TCP 的交互是一次一个数据块(大小不等),但 TCP 把应用程序交下来的数据仅仅看成是一连串的无结构的字节流

2、TCP 三次握手和四次挥手

1、 FIN: 请求关闭报文;
2、 SYN: 请求建立连接;
3、 ACK: 确认收到;
4、 MSL: 最大报文生存时间;

2.1、TCP 三次握手

TCP 建立连接的过程叫做握手,握手需要在客户端和服务端之间交换TCP报文段
在这里插入图片描述
最初客户端和服务端都处于CLOSED(关闭)状态。客户端主动打开连接,服务端被动打开连接。

一开始,服务端的服务器进程首先创建传输控制块TCB,准备接收客户端进程的连接请求。然后服务端进程就处于**LISTEN(监听)**状态,等待客户端的连接请求。如有,立即做出响应。

第一次握手:
客户端的TCP客户端进程也是首先创建传输控制块TCB。然后,在打算建立TCP连接时,向服务端发出连接请求报文段,这时首部中的同步位SYN=1,同时选择一个初始序列号 seq=x。TCP规定, SYN报文段(即SYN=1的报文段)不能携带数据,但要消耗掉一个序号。这时,TCP客户进程进入SYN-SENT(同步已发送)状态。

第二次握手:
服务端收到连接请求报文后,如果同意建立连接,则向客户端发送确认。在确认报文端中应把SYN位和ACK位都置1,确认号是ack = x+1,同时也为自己选择一个初始序号 seq = y。请注意,这个报文段也不能携带数据,但同样要消耗一个序号。这时TCP服务端进程进入SYN-RCVD(同步收到)状态。

第三次握手:
TCP客户进程收到服务端的确认后,还要向服务端给出确认。确认报文段的ACK 置1,确认号 ack = y+1,而自己的序号 seq = x+1。这时ACK报文段可以携带数据。但如果不携带数据则不消耗序号,这种情况下,下一个数据报文端的序号仍是 seq = x+1。这时,TCP连接已经建立,客户端进入ESTABLISHED(已建立连接)状态。

2.2、为什么是三次握手,而不是两次握手或者四次握手

不可以两次握手的原因:
为了防止已经失效的连接请求报文段突然又传送到了服务端,因而产生错误。比如下面这种情况:客户端发出的第一个连接请求报文段并没有丢失,而是在网络节点长时间滞留了,以致于延误到连接释放以后的某个时间段才到达服务端。本来这是一个早已失效的报文段,但是服务端接收到这个失效的连接请求报文段后,就误以为客户端又发出一次新的连接请求,于是就向客户端发出报文段,同意建立连接。

对于上面这种情况,如果不进行第三次握手,服务端发出确认后就认为新的运输连接已经建立了,并一直等待客户端发来数据。服务端的许多资源就这样白白浪费了。

如果采用了三次握手,由于客户端实际上并没有发出建立连接请求,所以不会理睬服务端的确认,也不会向服务端发送数据。服务端由于收不到确认,就知道客户端并没有要求建立连接,

不需要四次握手的原因:
有人可能会说客户端发出第三次握手的信息后在没有接收到服务端的请求就已经进入了连接状态,那如果客户端的这个确认包丢失或者滞留了怎么办?

我们需要明白一点,完全可靠的通信协议是不存在的。在经过三次握手之后,客户端和服务端已经可以确认之前的通信状况,都收到了确认信息。所以即便再增加握手次数也不能保证后面的通信完全可靠,所以是没有必要的。

2.3、为什么要回传SYN

在这里插入图片描述
接收端传回发送端所发送的SYN是为了了告诉发送端,我接收到的信息确实就是你所发送的信号了

SYN 是 TCP / IP 建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP 网络连接时,客户机首先发出一个 SYN 消息,服务器使用 SYN-ACK 应答表示接收到了这个消息,最后客户机再以ACK(确认字符,在数据通信传输中,接收站发给发送站的一种传输控制字符。它表示确认发来的数据已经接受无误)消息响应。这样在客户机和服务器之间才能建立起可靠的 TCP 连接,数据才可以在客户机和服务器之间传递。

2.4、传了SYN,为啥还要传ACK?

双方通信无误必须是两者互相发送信息都无误。传了 SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要 ACK 信号来进行验证。

2.5、TCP 四次挥手

数据传输结束后,通信双方都可以释放连接。现在客户端和服务端都处于 ESTABLISHED 状态

第一次挥手:
客户端的应用进程先向其TCP发出的连接释放报文段,并停止再发送数据,主动关闭TCP连接。客户端把连接释放报文段首部的终止控制位FIN置1,其序列号seq=u(等于前面已传送过的数据的最后一个字节的序号加1),这时客户端进入 FIN-WAIT-1(终止等待1)状态,等待服务端的确认。请注意:TCP 规定,FIN 报文段即使不携带数据,也将消耗掉一个序号。

第二次挥手:
服务端收到连接释放报文段后立即发出确认,确认号是是 ack = u + 1,而这个报文段自己的序号是 v(等于 服务端 前面已经传送过的数据的最后一个字节的序号加1),然后服务端就进入CLOSE-WAIT(关闭等待)状态。TCP 服务端进程这时应通知高层应用进程,因而从客户端到服务端这个方向的连接就释放了,这时的 TCP 连接处于半关闭(half-close)状态,即客户端已经没有数据要发送了,但 服务端 若发送数据,客户端 仍要接收。也就是说,从服务端到客户端这个方向的连接并未关闭,这个状态可能会持续一段时间。

第三次挥手:
若服务端已经没有向客户端发送的数据,其应用进程就通知 TCP 释放连接。这时服务端发出的连接释放报文段必须使 FIN = 1。假定服务端的序号为 w(在半关闭状态,服务端 可能又发送了一些数据)。服务端 还必须重复上次已发送过的确认号 ack = u + 1。这时 服务端 就进入 LAST-ACK(最后确认)状态,等待 客户端 的确认。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值