嵌入式Linux知识第三章——网络编程

目录

3.1 TCP UDP

3.1.1 TCP、UDP的区别 ⭐⭐⭐⭐⭐

3.1.2 TCP、UDP的优缺点⭐⭐⭐

3.1.3 TCP UDP适用场景⭐⭐⭐

3.1.4 TCP为什么是可靠连接⭐⭐⭐⭐

3.1.5典型网络模型,简单说说有哪些;⭐⭐⭐

3.1.6 Http1.1和Http1.0的区别⭐⭐⭐

3.1.7 URI(统一资源标识符)和URL(统一资源定位符)之间的区别⭐⭐

3.2 三次握手、四次挥手

3.2.1什么是三次握手⭐⭐⭐⭐⭐

3.2.2为什么三次握手中客户端还要发送一次确认呢?可以二次握手吗?⭐⭐⭐⭐

3.2.3为什么服务端易受到SYN攻击?⭐⭐⭐⭐

3.2.4什么是四次挥手⭐⭐⭐⭐⭐

3.2.5为什么客户端最后还要等待2MSL?⭐⭐⭐⭐

3.2.6为什么建立连接是三次握手,关闭连接确是四次挥手呢?⭐⭐⭐⭐


3.1 TCP UDP

  • 3.1.1 TCP、UDP的区别 ⭐⭐⭐⭐⭐

TCP(传输控制协议)和UDP(用户数据报协议)是两种常见的网络传输协议,它们有以下区别:

1)连接:TCP是面向连接的协议,而UDP是无连接的协议。在发送数据前,TCP通过三次握手建立连接,而UDP不需要建立连接。

2)可靠性:TCP提供可靠的数据传输,保证了数据的可靠性和完整性。TCP通过序号、确认应答和超时重传等机制来实现可靠性。而UDP不提供可靠性保证,数据可能丢失、损坏或重复。

3)传输速度:UDP比TCP快,因为它不需要建立连接和提供可靠性保障。在一些场景中,如视频、音频等实时应用,UDP更适合。

4)数据量限制:UDP的数据包大小通常受限于底层网络协议(如以太网),一般不超过1472字节。而TCP的数据包大小则取决于操作系统和底层网络协议。

5)应用场景:TCP适用于可靠性要求高的应用场景,如网页浏览、电子邮件等。UDP适用于对速度和实时性要求高的应用场景,如在线游戏、视频流等。

6)头部开销:TCP的首部较大,为20个字节,而UDP的首部较小,为4个字节。

  • 3.1.2 TCP、UDP的优缺点⭐⭐⭐

TCP和UDP都有各自的优缺点,以下是它们的比较:

1)TCP的优点:

可靠:TCP提供了可靠的连接,保证了数据的可靠性和完整性,适用于对数据准确性要求高的场景。

高速:TCP的传输速度相对较快,尤其是在底层网络支持的情况下。

适应性:TCP的协议规范和实现独立于底层网络协议,可以适应不同的网络环境。

多路复用:TCP通过连接机制实现了多路复用,可以同时处理多个数据流,提高了传输效率。

2)TCP的缺点:

连接管理:TCP需要建立连接和断开连接的过程,这可能会导致一定的开销和延迟。

数据顺序:TCP在传输过程中需要维护数据顺序,如果某个数据包丢失或乱序,需要重新发送,这可能会影响传输速度。

数据量限制:TCP的数据包大小受限于底层网络协议,如以太网的最大传输单元(MTU),超过该限制可能导致数据被分割为多个小包传输。

流量控制:TCP的传输速率受限于底层网络协议的带宽,如果发送速率过快,可能导致数据包丢失或传输受阻。

3)UDP的优点:

快速:UDP的传输速度相对较快,尤其适用于实时性要求高的场景,如在线游戏、视频流等。

灵活性:UDP的数据包大小灵活,可以根据应用需要调整,同时不需要维护数据顺序。

简单:UDP的协议相对简单,易于实现和维护,适用于一些轻量级的应用场景。

多路复用:UDP的多路复用机制可以提高传输效率,同时处理多个数据流。

4)UDP的缺点:

不可靠:UDP不提供可靠性保障,数据可能丢失、损坏或重复,适用于一些对数据准确性要求不高的场景。

数据顺序:UDP的数据包顺序需要应用程序自行处理,适用于一些简单的应用场景。

数据量限制:UDP的数据包大小通常受限于底层网络协议(如以太网),一般不超过1472字节。4. 流控制:UDP的发送速率受限于底层网络协议的带宽和接收方的能力,可能导致数据包丢失或传输受阻。

数据错误处理:UDP的数据包在传输过程中可能发生错误,如损坏或重复,应用程序需要自行处理这些问题。

连接管理:UDP没有建立连接和断开连接的过程,因此不需要维护连接状态,这使得它更加轻量级,适用于一些简单的应用场景。

  • 3.1.3 TCP UDP适用场景⭐⭐⭐

TCP和UDP都有各自的适用场景。

TCP(传输控制协议)通常用于对准确性要求相对高的场景,比如文件传输、接受邮件和远程登录。TCP在传输数据时需要进行数据的确认、重发、排序等操作,因此相对来说效率没有UDP(用户数据报协议)高。

UDP常用于对实时性要求高的场景,例如在线游戏、流媒体传输。UDP不可靠,因此它不适用于需要保证数据完整性和可靠性的应用场景。但因为UDP不需要进行连接管理、确认和重传等操作,所以它的数据传输速度比TCP快。同时,UDP还支持多播技术,可以将数据包发送到多个目的地。

UDP

TCP

是否连接

无连接

有连接

是否可靠

不可靠传输,不使用流量控制和拥塞控制

可靠传输,不使用流量控制和拥塞控制

连接对象个数

支持一对多、一对一、多对一、多对多交互通信

一对一通信

传输方式

面向报文

面向字节

首部开销

首部开销小,仅8字节

首部最小20字节,最大60字节

使用场景

适用于实时应用(IP电话、视频会议、直播等)

适用于要求可靠传输的应用,例如文件传输

  • 3.1.4 TCP为什么是可靠连接⭐⭐⭐⭐

TCP之所以被认为是可靠连接,是因为它采用了以下几种机制来确保数据的可靠传输:

1)确认和应答机制:TCP通过发送数据后等待接收方的确认,以及在数据传输过程中采用应答机制,确保每个数据包都被正确接收。如果接收方没有确认收到某个数据包,发送方将重新发送该数据包,直到接收方确认收到为止。

2)序列号:TCP给每个数据包分配一个独特的序列号,接收方可以根据序列号对数据包进行排序,确保数据包的顺序正确。

3)超时重传:如果发送方在一定时间内没有收到接收方的确认,将重新发送数据包,以确保数据包能够被正确传输。

4)流量控制:TCP通过流量控制机制,确保发送速度不会超过接收方处理速度,避免数据包丢失或传输错误。

5)拥塞控制:当网络拥塞时,TCP会减缓发送速度,以避免过度拥塞网络,导致数据包丢失。

  • 3.1.5典型网络模型,简单说说有哪些;⭐⭐⭐

1)物理层:这一层的主要功能是建立物理连接,将比特流从一个地方传输到另一个地方,并进行数模转换和模数转换。

2)数据链路层:这一层的主要功能是为网络层提供服务,确保数据在物理层上的传输可靠。数据链路层还提供了一些错误检测和校正功能。

3)网络层:这一层的主要功能是进行逻辑地址寻址,实现不同网络之间的路径选择。

4)传输层:这一层的主要功能是定义传输数据的协议端口号,并进行流控和差错校验。其中最常用的协议是TCP(传输控制协议)和UDP(用户数据报协议)。

5)会话层:这一层的主要功能是建立、管理和终止会话。会话层还提供了一些同步和对话控制的功能。

6)表示层:这一层的主要功能是将数据进行加密、解密、压缩、解压缩等处理,以确保数据的完整性和一致性。

7)应用层:这一层是OSI模型的最上层,它提供了网络服务与最终用户的一个接口,用户可以操作的一个界面终端。

  • 3.1.6 Http1.1和Http1.0的区别⭐⭐⭐

1)持久连接:HTTP 1.0默认使用短连接,即每个请求/响应后都会关闭连接,而HTTP 1.1默认使用持久连接,在同一个连接上可以发送多个请求和响应。

2)请求管道化:HTTP 1.1支持请求管道化,即在一个持久连接上可以同时发送多个请求,而HTTP 1.0不支持请求管道化。

3)缓存处理:HTTP 1.0的缓存处理较为简单,仅支持通过"Expires"和"Cache-Control"头字段进行缓存控制,而HTTP 1.1引入了更多的缓存控制机制,如"ETag"和"If-None-Match"等。

4)错误处理:HTTP 1.0的错误处理较为简单,仅通过状态码表示错误,而HTTP 1.1引入了更多的错误处理机制,如通过"Transfer-Encoding"头字段传输错误信息。

此外,在HTTP 1.1中新增了24个状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

5)Host头字段:HTTP 1.0中没有Host头字段,而HTTP 1.1中要求每个请求都包含Host头字段,以指示请求的目标主机。

  • 3.1.7 URI(统一资源标识符)和URL(统一资源定位符)之间的区别⭐⭐

1)URI是用于标识互联网上的资源的字符串序列,而URI并不关注资源的位置,而只关注它的标识符;

2)URL提供了关于资源在互联网上位置的详细信息,而URI是一种更广义的概念,不仅涵盖了URL,还包括了用于标识资源的其他形式,如URN;

3)URL是URI的一种特殊类型,用于定位互联网上的资源,而URI则是一种更广义的标识符,用于唯一地标识和命名资源。

3.2 三次握手、四次挥手

  • 3.2.1什么是三次握手⭐⭐⭐⭐⭐

1)第一次握手

客户端发送SYN包(seq=xSYN=1)到服务器,并进入SYN_SENT状态,等待服务器确认。

              2)第二次握手

                     服务端收到客户端发来的SYN包后,给客户端回复SYN+ACK包(SYN=1seq=yack=x+1),并进入SYN_RCVD的状态。

              3)第三次握手

                     客户端收到服务器响应报文后,发送ACK给服务器(seq=x+1ack=y+1,此时客户端处于ESTABLISHED状态,服务器收到ACK报文后,也处于ESTABLISHED状态,至此,TCP连接成功。

  • 3.2.2为什么三次握手中客户端还要发送一次确认呢?可以二次握手吗?⭐⭐⭐⭐

第一次握手(客户端发送SYN报文给服务器,服务器接收该报文):客户端什么都不能确认;服务器确认了对方发送正常,自己接受正常(不能携带数据)

第二次握手(服务器响应SYN报文给客户端,客户端接收该报文):客户端确认了自己发送,接收正常,对方发送、接收正常;服务器确认了对方发送正常,自己接收正常(不可以携带数据)

第三次握手(客户端发送ACK报文给服务器):客户端确认了自己发送,接收正常,对方发送、接收正常;服务器确认了自己接收正常,发送正常,对方发送、接收正常。(可以携带数据)

第三次握手是为了防止如果客户端没有收到服务器的确认报文,会放弃连接,重新启动一条连接请求,但服务器并不知道客户端没有收到,所以会产生两个连接,浪费连接开销,3次握手会根据协商好的序列号进行发送和确认。(防止SYN泛洪)

  • 3.2.3为什么服务端易受到SYN攻击?⭐⭐⭐⭐

攻击者首先伪造地址对服务器发起SYN请求,服务器回应(SYN+ACK)包,而真实的IP会认为,我没有发送请求,不作回应。服务器没有收到回应,这样的话,服务器不知道(SYN+ACK)是否发送成功,默认情况下会重试5次。这样的话,对于服务器的内存,带宽都有很大的消耗。攻击者如果处于公网,可以伪造IP的话,对于服务器就很难根据IP来判断攻击者,给防护带来很大的困难。

  • 3.2.4什么是四次挥手⭐⭐⭐⭐⭐

(1)第一次挥手

    客户端向服务器发送FIN(FIN=1,seq=x)包,请求断开向服务器的数据传送,等待服务器的确认,客户端进入FIN_WAIT_1状态

(2)第二次挥手

    服务器收到FIN包,发送ACK(ack=x+1,seq=y)进行响应,确认这一方向的TCP断开连接,服务器不再接收来自客户端的数据,但是服务器还能向客户端发送数据,此时客户端处于FIN_WAIT_2状态,服务器处于CLOSE_WAIT状态,客户端进入FIN_WAIT_2状态

(3)第三次握手

    服务器向客户端发送FIN(FIN=1,seq=w等于前面已经传送过的数据最后一个字节序号+1,ack=x+1)包,关闭服务器到客户端的数据传输,服务器进入LAST_ACK状态,客户端进入TIME_WAIT状态。

(4)第四次挥手

    客户端收到FIN包,发送一个ACK(seq=w+1,seq=x+1)给服务器,等待2MSL,客户端和服务器均进入CLOSED状态,至此,四次挥手完成。

  • 3.2.5为什么客户端最后还要等待2MSL?⭐⭐⭐⭐

TCP协议规定主动断开连接的一方需要处于TIME_WAIT状态,等待2MSL时间后才会处于CLOSED状态,TIME_WAIT持续存在2MSL,能保证两个传输方向上的尚未被接收或迟到的报文段都已经消失,同时也是在保证最后一个报文可靠到达(假设最后一个ACK丢失,那么服务器会再重发一个FIN,这是虽然客户端不存在了,但是TCP连接还在,仍然可以重发LAST_ACK)。

  • 3.2.6为什么建立连接是三次握手,关闭连接确是四次挥手呢?⭐⭐⭐⭐

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步挥手。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值