DAY3-2022.5.7

1、写出osi七层模型以及每层的都是干什么的

应用层:为计算机提供服务

表示层:数据处理(编解码、加密解密、压缩解压缩)

会话层:管理(建立、维护、重连)应用程序之间的会话

传输层:为两台主机进程之间的通信提供通用的数据传输服务

网络层:路由和寻址(决定数据在网络的游走路径)

数据链路层:管理相邻节点直接的数据通信

物理层 :利用传输介质为数据链路层提供支持,实现相邻计算机节点之间比特流的透明传输

以下是国外某网站上的模型图:

2、为什么要分层,分层有哪些好处

为什么要分层,因为复杂的系统需要分层,因为每一层都需要专注于一类事情。所以我们的网络分层的原因也是一样,每一层只专注于做一类事情。如:

(1)各层之间相互独立:各层之间相互独立,各层之间不需要关心其他层是如何实现的,只需要知道自己如何调用下层提供好的功能就可以了(可以简单理解为接口调用)

(2)提高整体灵活性:每一层都可以使用最适合的技术来实现,只需要保证提供的功能以及暴露的接口的规则没有改变就行了。(可以简单理解为高内聚、低耦合)

(3)大问题化小 :分层可以将复杂的网络间题分解为许多比较小的、界线比较清晰简单的小问题来处理和解决。这样使得复杂的计算机网络系统变得易于设计,实现和标准化。

《程序员的自我修养》里面提到过一句名言:

“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决”

“Any problem in computer science can be solved by anther layer of indirection.”

分层的好处:

如上各层之间相互独立、提高整体灵活性、易于实现和维护、能促进标准化工作等。

3、详细描述数据传输过程

以一个HTTP请求数据包为例子来说明数据传输过程,发送数据的计算机叫做源计算机,接收数据的计算机叫做目标计算机

(1)首先一个HTTP数据包在应用层中大概包含HTTP协议的版本号、各种字段属性值、要发送的实际数据等。

(2)其次传输层对应着有UDP和TCP两种协议,HTTP采用的是TCP协议,因为TCP能够提供差错控制。每一种应用层协议都对应着一个端口号,接着应用层会将HTTP数据包委托给传输层来进一步包装。传输层会为将HTTP数据包包装上源端口号和目的端口号等信息。

(3)传输层包装好信息后,会进入网络层。网络层会为其加入源IP目标IP等信息。
源IP 指的是源计算机的IP
目标IP 指的是目标计算机的IP

 (4)在数据链路层中会在数据包中加入发送方MAC地址和接收方MAC地址。
发送方MAC地址 就是源计算机的MAC地址。
接收方MAC地址 并不是目标计算机的MAC地址。

(5)最后物理层利用网卡将数据通过二进制流写入到网线或者光纤当设备中。

以上是采用五层模型来解释数据在网络中的传输流程,接下来说传输设备。

(1)交换机:数据包首先会发送到交换机中,交换机工作在MAC层,是一个二层网络设备。交换机只负责转发交换,如果存在对应的MAC地址缓存,就从对应的端口转发出去,如果不存在缓存,就从所有端口转发出去。交换机中有一个MAC缓存表,会存储MAC地址和对应的转发端口号。交换机在接收到数据包后,会取出接收方MAC地址,查看其是否存在缓存,如果存在缓存,就通过其对应的端口号将数据包发送出去。

(2)路由器:数据包出了交换机后开始进入路由器。数据包通过端口进入路由器,执行以下步骤:

  • 路由器首先会检查数据包的接收方MAC地址是否等于路由器端口的MAC地址,如果等于就接收,如果不等于就抛弃。
  •  路由器去除头部的MAC包装,暴露出IP地址信息,取出目标IP地址,然后查看路由表。

就这样通过路由器的不断转发,数据包会到达与目标计算机直连的路由器。

目标计算机在收到数据包后会将数据包从下层往上层拆封。

(1) 首先是数据链路层,目标计算机会将MAC包装信息去除,取出接收方MAC地址,查看是否和自己的MAC地址一致,如果不一致,就抛弃。

(2) 接着是网络层,将IP包装信息去除,取出目标IP地址,查看是否与自己的IP地址一致,如果不一致,就抛弃。

(3)接着是运输层,会取出目标端口号,通过端口号获取对应的进程,将数据包交给对应的进程。比如HTTP数据包的目标端口号是80,就会交给HTTP进程,HTTP会调用其业务逻辑,将返回的数据包装成数据包通过源IP地址发送给源计算机。

4、详细描述tcp三次握手以及四次挥手的过程

(1)三次握手:三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。刚开始客户端处于 Closed 的状态,服务端处于 Listen 状态。

第一次握手就是客户端给服务器端发送一个报文;第二次就是服务器收到报文之后,会应答一个报文给客户端;第三次握手就是客户端收到报文后再给服务器发送一个报文,三次握手就成功了。

(2)四次挥手:建立一个连接需要三次握手,而终止一个连接要经过四次挥手(也有将四次挥手叫做四次握手的)。这由TCP的半关闭(half-close)造成的。所谓的半关闭,其实就是TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。

TCP 的连接的拆除需要发送四个包,因此称为四次挥手(Four-way handshake),客户端或服务器均可主动发起挥手动作。

刚开始双方都处于 ESTABLISHED 状态,假如是客户端先发起关闭请求。四次挥手的过程如下:

第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于 FIN_WAIT1 状态。

即发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN_WAIT1(终止等待1)状态,等待服务端的确认。

第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 +1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT 状态。

即服务端收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),服务端进入CLOSE_WAIT(关闭等待)状态,此时的TCP处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认后,进入FIN_WAIT2(终止等待2)状态,等待服务端发出的连接释放报文段。

第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。

即服务端没有要向客户端发出的数据,服务端发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),服务端进入LAST_ACK(最后确认)状态,等待客户端的确认。

第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 +1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态,服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。

即客户端收到服务端的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED状态。

收到一个FIN只意味着在这一方向上没有数据流动。客户端执行主动关闭并进入TIME_WAIT是正常的,服务端通常执行被动关闭,不会进入TIME_WAIT状态。

在socket编程中,任何一方执行close()操作即可产生挥手操作。

《TCP/IP详解 卷1:协议》有一张TCP状态变迁图,如下图所示,粗的实线箭头表示正常的客户端状态变迁,粗的虚线箭头表示正常的服务器状态变迁。

5、使用wireshark抓tcp三次握手包,并分析tcp头部

红色框为本机和服务器之间的三次握手协议

TCP通信流程大致如下:
客户端和服务器之间TCP三次握手(21、22、23帧)—->客户端请求的GET
主页面(24帧)—>服务器收到请求(25帧)—>发送响应包(26帧)。

  • 客户端向服务器发送TCP请求建立连接,标识为SYN。
  • 服务器得到请求后向客户端回应确认包的过程,标识为SYN、ACK。
  • 客户端回应服务器发送确认包的过程,将于服务器建立连接,表示为ACK。
  • 客户端向服务器发送HTTP请求内容的过程,标识为GET。
  • 服务器响应客户端请求的过程,收到请求,标识为ACK。
  • 26帧帧是服务器向客户端回应内容的过程。

ACK = 1时代表这是一个确认的TCP包

 TCP数据段头部信息

6、使用wireshark抓udp的包,并分析udp头部

UDP的首部格式

 UDP数据段首部

 

参考:《TCP/IP详解 卷1:协议》、《字节一面:“为什么网络要分层?每一层的职责、包含哪些协议?”》、《数据包在网络中的传输过程详解_张孟浩_jay的博客-CSDN博客_数据包传输过程

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值