计算机网络,IP,Mac地址,DHCP,交换机与路由器,家庭网络与因特网,SNAT,DNAT,TCP与UDP协议,三次握手,传输确认,四次挥手,UDP协议

计算机网络-掌知识

https://www.bilibili.com/video/BV1CQ4y1d728

1、IP与mac,DHCP协议

  1. IP地址是收件人,MAC地址就是收件地址。

  2. 网络比喻成我们的生活城市,网卡就是生活中的建筑,mac地址就是这栋建筑的物理地址,而IP地址就是在这些建筑中的人。

  3. 在计算机中发送信息,填写内容和对方的ip,操作系统会根据目标ip,自动查询arp表,获取对方mac地址,补齐这封信,从网卡发出。

  4. mac地址6个字节构成,前3个字节表示的是网络硬件厂商编号,后3个字节表示的是该制造商所制造的网卡序列号,全球唯一的地址。

  5. Mac地址表示网卡在网络中的确定位置,那这个位置是如何表示与确定的呢?
    比如计算机a通过网线接入到交换机的端口1,那这个端口1就是网络中的具体位置,就像我们的门牌号一样,交换机就知道某个mac地址在端口1上,从而就把mac地址与端口进行了绑定

  6. 网卡接入网络后如果要通信,需要配置ip地址。

  7. ①DHCP协议,当电脑插上网线或手机接入wifi,操作系统网络协议栈会自动向外发送一包dhcp请求,请求为其分配ip地址;
    ②路由器获取到dhcp请求后,会为其分配一个ip地址,并通过dhcp回复报文发送回去;
    ③操作系统收到了dhcp回包后,将其分配的ip地址配置到网卡上。

  8. mac地址是由操作系统来补齐的,操作系统如何知道对方的mac地址?
    ①arp协议完成的,当计算机a想向计算机b发送消息时,操作系统并不会立即发出,它会先发送一包arp广播报文出去,问一下192.168.1.10的mac地址是多少,此时网络中的所有设备都收到了这一包请求报文,除了192.168.1.10以外的设备都会丢弃这包请求报文,只有192.168.1.10会回复自己的mac地址是多少,计算机a收到了回复,
    ②知道了计算机b的mac地址,它首先会把计算机b的mac地址缓存起来以便下次使用,然后把这封信补全从网卡发送出去,
    交换机根据数据包中的目标mac地址找到了计算机b所在的端口,从此端口发送出去,数据就内计算机b收到了。

2、交换机与路由器

  1. 交换机主要功能就是把数据包发送到正确的位置,写信的例子中,交换机相当于邮递员,根据数据包中的目标mac地址,找到他对应的物理端口,一台交换机有很多个端口,它们都有自己的编号,计算机的网卡通过网线连接到交换机的网口上,这个端口就是一个确定的物理位置,我们只要知道某个网卡的mac地址,在那个端口上,我们就能正确的把数据包发给它,所以在交换机中有一张端口与mc地址的映射关系表,我们称之为mac地址表,交换机维护这张映射关系表,想要与某个mac地址通信时,只需要来查询一下,这个mac地址在那个端口上,然后从对应的端口发送出去就可以了。

  2. 每一包数据都会有两个mac地址,一个是发送方的mac地址称为源mac,另一个是接收方的mac地址称为目标mac,交换机收到一包数据后,首先要把这包数据的源mac与接收端口进行绑定,然后交换机要根据目标mac查找,从哪个端口把数据包发送出去,这时候就会出现两种情况,第一种情况是mac地址表中查询到了关联的端口,则直接从关联端口发出,第二种情况是mac地址表中没有查询到关联端口,则向除了接收端口之外的所有端口群发,这种行为称为泛洪,如果目标mac地址在这个网络中,则它一定能收到群发的数据包,如此运行一段时间之后,通过交换机的mac地址表就可以找到网络中的所有网卡设备,由此可见,交换机只会关心数据包中的mac地址,而不会关心ip地址,mac地址在TCP/IP协议中,处于第二层数据链路层,所以交换机通常也被称为二层设备。

  3. 路由器有两种接口LAN口和WAN口,LAN可以有多个用来接家庭网络设备,比如台式机、手机、笔记本,其他手机和笔记是通过wifi连接到路由器的设备,也相当于连接到了LAN口上,WAN口只有一个用来接入运营商网络,以连接到互联网上,如果把路由器的WAN口忽略,路由器其实就是交换机。

  4. 加上WAN口,引入网关概念, 子网是如何划分,把ip地址和子网掩码按位相与,1&x=x,0&x=0,我们常用的子网掩码255.255.255.0,前3个字节也就是前24位全为1,后8位全为0,所以按位相与的结果,一定是这个ip地址的前3个字节,192.168.1.10&255.255.255.0=192.168.1.0,我们把ip地址与子网掩码相与之后的结果,相同的两个ip,认为是在同一个子网中,也就是说,ip为192.168.1.10,子网掩码为255.255.255.0的这张网卡与另一个192.168.1.x的网卡,一定是在同一个子网之中,因为子网掩码都是连续的1和连续的0,所以我们通常用1的数量来表示子网掩码,比如255.255.255.0,就是24,我们用ip/子网掩码来表示一个网络,比如192.168.1.0/24,表示的网络中拥有255个ip地址,所以如果想扩大子网中的ip数量,我们只需要把子网掩码调小,如果想减少子网中ip地址的数量,我们只需要把子网掩码调大就可以了。

  5. 子网有什么意义呢?
    因为tcp/ip协议规定,不同子网之间是不可以直接通信的,如果要通信需要通过网关来进行转发,网关上有两张网卡,分别配置了属于2个子网的ip地址,可以在两个网络之间转发数据包,这样我们就拥有了一个连接了两个子网的网络,

  6. 例子:子网1中的计算机a发送数据包时,首先计算机a会根据目标ip,判断是否跟自己属于同一个子网,如果是同一个字网则直接从网卡发出,如果不是同一个子网,则需要把数据包的目标mac地址,改为网关mac,然后发送给网关,网关拿到这一包数据后,在通过路由表,查询到这一包数据属于子网2,网关修改目标mac地址为计算机b的mac地址,修改源mac为自己的mac,然后从子网2的网卡发出,以上出现了多次根据目标ip,判断数据包该如何发送的行为,我们就称之为路由。

  7. 路由器有一个WAN口接入互联网,多个LAN口接入本地网络,它们就分别属于两个不同的子网,所以从内网访问互联网就是跨网络的行为,这时候就需要路由器来担任网关的角色,它的行为就叫路由。

3、家庭网络与因特网

在两个不同家庭中,通过路由器接入的两台电脑,两台电脑内网IP地址是192.168.1.10、192.168.1.11,公网IP地址123.123.123.123,同时访问互联网上的同一个网站,为什么IP地址不会冲突?

SNAT和DNAT是什么?

SNAT

在计算机网络中,数据包如何发送,是根据目标ip进行路由的,如果同一个网络中出现两个相同的IP(IP冲突),则arp表就会混乱,数据包发送到那台主机上,将变成不确定性的行为,那怎么解决这个问题呢?

就是让数据包从路由器发出去的时候,变成不同的IP不就可以了,这个技术叫做源地址转换技术,称之为SNAT

为了简化模式,我们还是先假设路由器的WAN口,接入的IP地址为公网IP,比如123.123.123.123,我们的内网计算机地址是192.168.1.10,网关地址为192.168.1.1,我们访问的远程IP为234.234.234.234,首先计算机发送一包数据出来到路由器上,在这报数据的网络层有两个重要的信息,一个是源IP,192.168.1.10另一个是目标IP 234.234.234.234,路由器拿到这一包数据时,需要执行源地址转换,把源IP改一下,改成WAN口的公网ip123.123.123.123发送出去,服务器收到了数据,处理完之后需要回复,再把源IP作为目标IP发送回来,路由器收到回包执行反向SNAT,再把目标IP改成192.168.1.10发送给了家庭中的计算机,一次通信完成。

看着挺简单的但实际要复杂得多,假如家庭中有两台计算机,另一台计算机的IP,地址为192.168.1.11,他们俩同时访问同一个网站,发送了两包数据到路由器上,路由器执行SNAT发送出去,回来的数据包目标IP都是234.234.234.234如何从中区分出来两台计算机的数据包,所以这样看只关注IP地址是不行的,还需要增加一些确定性的标记,这时就要把关联的属性再往下扩展,扩展到传输层,我们以最常用的传输协议TCP协议举例,TCP协议有两个关键属性,源端口和目标端口,这时候我们的源地址转换就变成了修改源IP和源端口,并将修改后的端口号和源IP加源端口形成映射关系,比如主机1和主机2的源端口,都是12345修改后主机1的源端口变成23456,主机2变成34567,在返回包中根据目标端口号是23456还是34567,区分出来是主机1还是主机2的包,并且在反向SNAT的时候,把目标端口号改回,除了TCP协议外,UDP协议也是同样的道理,通过IP加端口进行关联,但是我们常用来检测目标联通性的ping命令,使用的是ICMP协议,它没有端口信息,则需要使用协议中的type+code来代替端口进行关联,其他的协议也都是类似的道理,通过协议特定的标记来进行关联。

DNAT

DNAT名为地址目标转换,DNAT是把目标地址修改的技术,有什么用呢?如果我们的内网计算机对外提供服务,公网发送过来的请求不能直接到达内网计算机,我们就需要路由器,用DNAT技术帮我们转发请求,比如我们内网上有一台主机上,有一个web服务监听80端口,我们需要在路由器上配置一个DNAT,内容为访问公网地址的8080端口,则帮我们转到计算机1,也就是192.168.1.10的80端口,则当访问数据包从WAN口进入后,路由器执行DNAT修改目标地址为192.168.1.10,修改目标端口为80,把数据包转发给了计算机1。

4、TCP与UDP协议

TCP和UDP协议都工作在传输层,它们的目标都是在程序之间传输数据,数据可以是文本、图片、视频等,对于TCP和UDP协议来说,都是一堆二进制数,并没有多大的区别,那tcp与udp之前的区别是什么,tcp基于连接(打电话),udp基于非连接(发邮件)。

TCP

三个关键步骤:三次握手,传输确认,四次挥手。

三次握手

三次握手是建立连接的过程,当客户端向服务端发起连接时,会先发一包连接请求数据,过去询问一下,能否与你建立连接,这包数据我们称之为SYN包,如果对端同意连接,则回复一包SYN+ACK包,客户端收到之后回复一包ACK包,连接建立,因为这个过程中相互发送了三包数据,所以称之为三次握手。

为什么要三次握手而不是两次握手,服务端回复SYN+ACK之后就建立连接,这是为了防止因为已失效的请求报文,突然又传到服务器引起错误,假设采用两次握手建立连接,客户端向服务端发送了一个SYN包,来请求建立连接,因为某些未知的原因并没有到达服务器,在中间某个网络节点产生了滞留,为了建立连接客户端会重发SYN包,这次数据包正常到达,服务端回复SYN+ACk之后建立起了连接,但是第一包数据阻塞的网络节点,突然恢复,第一包SYN包又送达到服务端,这是服务端会误认为是客户端,又发起一次新的连接,从而在两次握手之后,进入等待数据状态,服务端认为是两个连接,而客户端认为是一个连接,造成了状态不一致,如果在三次握手的情况下,服务端收不到最后的ACK包,自然不会认为建立连接成功,所以三次握手本质上来说,就是为了解决网络信道不可靠的问题,为了能够在不可靠的信道上,建立起可靠的连接。

ACK位为1,seq:序列号,

传输确认

经过三次握手之后,客户端和服务端都进入了数据传输状态,tcp协议需要在不可靠的信道上,保证可靠的连接,现在就有几个问题需要面对,一包数据有可能会被拆成包多发送,如何处理丢包问题,这些数据包到达的先后顺序不同,如何处理乱序问题,针对这些要求,tcp协议为每一个连接,建立了一个发送缓冲区,从建立连接后的第一个字节的序列号为0,后面每个字节的序列号就会增加1,发送数据时,从发送缓冲区取一部分数据组成发送报文,在其tcp协议头中会附带序列号和长度,接收端在收到数据后,需要回复确认报文,确认报文中的ACK,等于接收序列号加长度,也就是下一包数据需要发送的起始序列号,这样一问一答的发送方式,能够使发送端确认发送的数据已经被对方收到,发送端也可以一次发送,连续的多包数据,接收端只需要回复一次ACK就可以了,这样发送端就可以把待发送的数据,分割成一系列的碎片,发送到对端,对端根据序列号的长度,在接收后重构出来完成的数据,假设其中丢失了某些数据包,在接收端可以要求发送端重传,比如丢失了100-199这100个字节接收端向发送端发送ack=100的报文,发送端收到后重传这一包数据,接收端进行补齐,以上过程不区分客户端和服务端,tcp连接时全双工的,对于两端来说均采用上述机制。

四次挥手

处于连接状态的客户端和服务端,都可以发起关闭连接请求,此时需要四次挥手来进行连接关闭,假设客户端主动发起连接关闭请求,他需要将服务端发起一包FIN包,表示要关闭连接,自己进入终止等待1状态,这是第一次挥手,服务端收到FIN包,发送一包ACK包,表示自己进入了关闭等待状态,客户端进入终止等待2状态,这是第二次挥手,服务端此时还可以发送未发送的数据,而客户端还可以接收数据,待服务端发送完数据之后,发送一包FIN包,进入最后确认状态,这是第三次挥手,客户端收到之后回复ACK包,进入超时等待状态,经过超时时间后关闭连接,而服务端收到ACK包后,立即关闭连接,这是第四次挥手。

为什么客户端需要等待超时时间?这是为了保证对方已经收到ACK包,因为假设客户端发发送完最后一包ACK包后就释放了连接,一旦ACK包在网络中丢失,服务端将一直停留在最后确认状态,如果客户端发送最后一包ACK包后,等待一段时间,这是服务端因为没有收到ACK包,会重发FIN包,客户端会响应这个FIN包,重发ACK包并刷新超时时间,这个机制跟三次握手一样,也是为了保证在不可靠的网络链路中,进行可靠的连接断开确认。

UDP协议

UDP协议是基于非连接的,就是简单的把数据包封装一下,然后从网卡发出去就可以了,数据包之间并没有状态上的联系,正因为udp这种简单的处理方式,导致它的性能虽好非常少,对于cpu内存资源占用也远小于tcp,但是对于网络传输过程中产生的丢包,udp协议并不能保证,所以udp在传输稳定性上要弱于tcp。

TCP可靠稳定,适用于对网络质量通信较高的场景,需要准确无误的传输给对方,比如传输文件、发送邮件、浏览网页等。

UDP速度快,但是可能产生丢包,所以适用于对实时性要求较高,但是对少量丢包,并没有太大影响的场景,比如域名查询,语音通话,视频直播等。

VPN隧道网络,SDN隧道网络VXLAN。

软件定义网络(Software Defined Network,SDN)是由美国斯坦福大学Clean-Slate课题研究组提出的一种新型网络创新架构,是网络虚拟化的一种实现方式。其核心技术OpenFlow通过将网络设备的控制面与数据面分离开来,从而实现了网络流量的灵活控制,使网络作为管道变得更加智能,为核心网络及应用的创新提供了良好的平台。

ok

posted @ 2022-04-28 17:35  凌易说-lingyisay  阅读(391)  评论(0编辑  收藏  举报