计算机网络那些事

什么是网络?网络为我们带来了什么。作为一个学软件的学生,我阐述下我的看法。网络是一个虚拟的网,正因为有了虚拟的网,我们可以浏览到很远地方的最新信息,可以愉快的在b站学习发布过的视频。
但是虚拟的网络是如何传播数据的,为什么我们输入一段文字后对方准确的接收到了文字,文字是如何寻找到我们要发送的目标的。其中最重要的就是协议,因为有了协议,数据的传输变得井然有序。下面我们就揭开协议的面纱。

在讲述协议之前,我们先介绍下,计算机网络的体系结构
对于传统的OSI七层协议模型来说,划分的太过复杂,用书上的话说就是既复杂又不实用。但是我们还是要了解下

1.应用层,2. 表示层 3. 会话层   4. 运输层   5.网络层   6. 数据链路层,  7.物理层 

现在普遍接受的是五层协议模型

  1. 应用层
    应用层的任务就是通过进程间的交互来完成特定网络应用
    常见的协议 http协议 smtp协议 dns协议
    形象的来说就是,我们打开的qq向好友发信息时的那一层。
  2. 运输层
    运输层的任务就是负责向两台主机中进程之间的通信提供通用的数据传输服务
    常见的协议就是tcp udp协议
    如何理解数据传输,就是接收应用层向下传输的数据并且包装上tcp和udp的头部信息,接收网络层向上传输的数据并且根据tcp和udp找到目标主机
  3. 网络层
    网络层负责为分组交换网上的不同主机提供通信服务,发送数据时 网络层将运输层产生的报文段或用户数据报封装成分组或包进行传送
  4. 数据链路层
    数据链路层将网络层交下来的IP数据报封装成帧,在两个相邻结点间的链路上传送帧。每一帧都包含数据和比较的控制信息(同步信息,地址信息,差错控制)
    在接收数据时,控制信息能使接收端知道数据从那个bit开始到那个bit结束。
    三个基本的服务:封装成帧,透明传输 差错控制
    控制信息还使接收端检测所收到的帧有无差错。
  5. 物理层
    传输01bit流
    常见的物理媒体有 双绞线,同轴电缆和光缆。

分类的IP地址

IP的作用非常重要这点毋庸置疑,因为有了IP,使我们可以在互联网上方便的寻址。因为一个Ip在互联网上使唯一的。

IP地址分为5类,
ABC三类的主要组成是网络号和主机号
不同的是A类主机的网络号为前8位,B类主机的网络号为前16位,C类主机的网络号为前24位。
D类地址用于多播,
E类地址保留以后使用。

A类地址的网络号中第一位固定为0,所以可用的是7位,因此第一个字段的范围是1-127,但是又因为127保留为本机做环回测试。所以可以使用的是1-126。
可以使用的Ip范围是1.0.0.0-126.255.255.255

B类地址的网络号中前面两位固定位10,所以可以使用的是14位。
可以使用的IP范围是128.1.0.0-191.255.255.255

C类地址的网络号中前面三位固定位110,因此可以使用的是21位,
可以使用的Ip范围是192.0.1.0-223.255.255.255

ARP协议是怎么一回事?
数据链路层所作的工作就是将IP数据报封装成mac帧,但是如果不知道目标Ip的mac地址,改怎末做,因此ARP协议就应运而生。
(1). ARP进程在本局域网上广播发送一个ARP请求分组,发送的内容大概是这样的,我的IP地址是209.0.0.5 硬件地址是00-00-C0-15-AD-18,我想知道IP地址为209.0.0.6的MAC地址。
(2). 在本局域网上的所有主机运行的ARP进程都接收到ARP请求分组。
(3). 主机B的IP地址和请求的目的IP地址一样就向主机A发送ARP响应分组。同时在ARP响应分组中写入自己的硬件地址。

IP分组转发流程
在这里插入图片描述

TCP的三次握手和四次挥手
三次握手:

  1. 客户端A向客户B发送请求,此时报文中不包含数据,SYN的状态置为1,并随机生成一个序列号seq=x;
  2. 客户B接收到客户端A的请求后,发信SYN为1知道客户端A想要建立连接,因此向客户端A响应数据,设置报文SYN=1 ACK=1,ack=x+1,并随机生成一个序列号seq=y,发送给A;
  3. A接收到信息后,检测到SYN和ACK=1 ,并且确认号为ack=x+1,此时可以携带数据向
    B发送数据了。

为什么要进行三次握手,二次不行吗?
主要是为了已失效的连接请求突然又传送到了B;

四次挥手
在这里插入图片描述
第一次挥手:客户端发送一个FIN=M,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。意思是说"我客户端没有数据要发给你了",但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据。

第二次挥手:服务器端收到FIN后,先发送ack=M+1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。这个时候客户端就进入FIN_WAIT_2 状态,继续等待服务器端的FIN报文。

第三次挥手:当服务器端确定数据已发送完成,则向客户端发送FIN=N报文,告诉客户端,好了,我这边数据发完了,准备好关闭连接了。服务器端进入LAST_ACK状态。

第四次挥手:客户端收到FIN=N报文后,就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,所以发送ack=N+1后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。服务器端收到ACK后,就知道可以断开连接了。客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了。最终完成了四次握手。

为什末要等待2MSL

  1. 为了保证A发送的最后一个ACK报文段能够到达B,如果不是在2MSL的时间段到达客户端的话,服务器会继续发送FIN 字段给客户端。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值