网络基础

本文通过生动的比喻解释了局域网、广域网和Internet的工作原理,涵盖了IP地址、路由器、交换机的功能,以及TCP/IP协议栈各层的作用,如TCP和UDP协议的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

局域网:一个家里一台路由器连好几台电脑,然后这同一个栋好几个家都连着同一个路由器,就这么像树开花一样。

广域网:走广域网链路 花钱买带宽 如果我花钱买30M带宽,指的是买从自己到运营商的带宽。

Internet:ISP=Internet Service Provider 因特网服务提供商。

看了知乎上石岩的通俗的方式,觉得很棒很好懂:1.想象你住在一个小区里,这个小区有很多栋楼,每栋楼有很多单元,每个单元有很多层,你和你的邻居之间谁也不认识谁,不知道该怎么找到对方,你们想要互相联系,只能靠写信的方式,你把信写好后交给小区的门房大爷,并且告诉他,这封信要送到1号楼1单元101,然后门房大爷负责把信送到,这个时候,整个小区可以看成一个局域网,因为大家在这个小区里使用的都是私有地址(私有IP),这个地址只有你们小区的门房大爷知道该怎么走,换个人就找不到了。2.如果你想要给另外一个小区的某个住户写信,因为每个小区的私有地址命名方式都不一样,假设他们小区的地址是A号楼东座302,这个时候你把信交给门房大爷,他就傻眼了,因为他不认识,所以拒绝为你送信。当然还是有解决方式的,那就是把附近小区的门房大爷全都叫到一块大家开个会,给所有门房大爷统一按照一种方式来命名,比如叫天通苑张大爷、回龙观王大爷等等,这个名字就是公有地址(公有IP),这个名字在所有门房大爷中是唯一的,一人一个不能重名,这个时候门房大爷之间就互相认识了,以后你再想给另外一个小区的住户写信,就需要告诉你们小区的门房大爷,“麻烦您把这封信交给天通苑的张大爷,再让他转交给A号楼东座302”。这个时候,附近这些小区就形成了一个广域网,广域网内包含很多个小区(局域网),小区(局域网)和小区(局域网)之间想要互相通信,就必须靠各自的门房大爷。3.过了段时间大家觉得这样还是很不爽,干脆把全世界的门房大爷都交到一块开个会吧,以后全世界的门房大爷们都统一起一个唯一的名字,这样全世界的人就可以自由通信了,这就叫Internet/互联网。可以说Internet/互联网是最大的广域网,但并不是每个广域网都叫Internet/互联网。4.一些特殊需求:你就是想要和天通苑那个A号楼东座302直接通信,不想通过门房大爷,所以你在你家和他家之间拉了条钢丝(专线),你把信写好以后吊在篮子里直接给他送了过去,这种方式效率很快,也很安全,但是成本也很高。或者你可以雇一个专职通信员(VPN),他只负责给你送信,信一直放在他身上不需要倒手,由他去向门房大爷问路,并且亲自送过去,这样安全了很多,当然成本同样很高。5.再来说一下“广域网由交换机连接”和“广域网需要路由交换和分组转发”这两句话。交换机的功能可以看成是小区和小区之间的路,有些小区之间只有一条路通着,有些小区之间可能有好几条路,这些路有的远有的近。而门房大爷的功能其实就是路由器(严谨的说其实不一定,因为现在具备路由功能的设备很多,不一定是路由器),也就是负责找路,只有他知道小区和小区之间的路怎么走,哪条路最近。所以说广域网(附近多个小区)有交换机(路)连接,并且广域网(附近多个小区)需要路由(门房大爷)选择(走哪条路)和分组转发(把不同的信交个不同的人)。

IP地址有网络部分和主机部分,网络部分类似区号,配上主机部分的ip地址全球唯一。路由器负责在不同网段转发数据。子网掩码用来告诉我们哪里是主机部分,哪里是网络部分,比如ip地址:13.0.0.0 子网掩码:255.0.0.0,那我们就知道13是网络部分,0.0.0是主机部分。

mac地址,即物理地址,出厂时就固定在网卡上。


应用层:如果我打开一个记事本,虽然也是程序,但并不产生网络流量,所以不是应用层;比如打开qq或阿里旺旺才算是应用层。

表示层:比如服务器传来的网页会先压缩或者加密,然后才切割放缓存走你,到了客户端会解密解压缩,传输之前是否压缩或加密就是表示层干的事情。

会话层:打开一个窗口就是建立一个会话,如果没有会话层,那我们打开好几个窗口,传来的数据不知道应该展示在哪个窗口上,就乱套了。cmd: netstat -n 能够查看有多少个会话,此项可以查是否有木马,因为木马无论如何都会与外界建立会话,此时它就暴露了。

传输层:

可靠传输:服务器发过来编号为1的包,结果堵在半路上始终没有收到客户端返回的确认收到消息,于是它认为这个包丢了服务器将再发送一遍1号包,直到收到确认消息,才发送2号包。

流量控制:服务器发送太快客户端来不及接收导致数据损失,传输层会告诉它你慢点~

不可靠传输:比如客户端发送给DNS让他解析域名就只有一个帧,DNS返回也是一个帧,没有切割。再比如qq聊天,大家发的消息也是不可靠传输,因为没有多大不需要切割,一个包就OK

网络层:如果某条最佳路径嘎嘣断掉了,它会选择另一条最佳路径;此外还有规划ip地址

数据链路层:一个帧包含帧头、数据、帧尾,所以我们可以知道开始和结束位置;有可能数据和帧尾长得一致被误判,所以这个长得一样的数据前头会插入特定的几位表明他不是帧尾,等接受完成再把这几位卸磨杀驴过河拆桥,这就是透明传输;还有数据当中会插入几位校验位,告诉人家它们这数据一共有多少,人家一判断这给的数和得到的数据个数不统一啊,就把这帧扔掉了,这就是差错校验

物理层:网卡都是8根线,厂商要统一,接口标准;厂商都是用0V表示0,5V表示1,电器标准。这些大家都有个标准,不会出现这边厂商用50V0V表示烧了5V0V的线。如何在数据链路层传输更快。

OSI指导错误排查:

物理层:查看连接状态(无线有线连没连是否打×);看发送和接收包是否为0,可能网线头儿虚了

数据链路层:改了mac地址(回想学校等级mac地址被人盗用的事);可能没交钱欠费了;网速没办法协商一致(服务器带宽100M接到电信的交换机是1000M不能自动协商,就会导致出现网络问题) 

计算机网络的速率

加速球上显示的速度和我们实际带宽往往差10倍,因为我们虽然买了8M带宽(理论值),但那只是bit下的带宽,又因为1字节=8bit,加速球显示的是字节速率,所以要用小于8M(实际值)的带宽除以8才对。同理4M对应400k。我们平常说的买个交换机100M其实是买了个100Mbit/s的交换机,bit/s这个单位在日常生活中省略了。

速率:一个发送端到一个接收端的一个信道上的。当然我们可以一个发送端对多个接收端,这就有好几个信道了,每个信道上都有速率。

带宽:最大速率。

吞吐量:几个信道速率的叠加。

时延带宽积:传播时延×带宽

往返时间:发送方发送数据到发送方收到接收方确认

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

传输层:

两个协议:TCP(Transmission Control Protocol传输控制协议) UDP(User Data Protocol用户数据报协议)

TCP 一个数据包最大65535字节 65k,一个数据包不能完成完整网页的传送,要分段,还要编号;有可能网堵塞就丢包了。客户端和服务器端要维持着会话,直到传输完成,能够实现可靠传输;并且还有流量控制功能。

UDP 一个数据包就能完成数据通信 不分段 不建立会话(对服务器要求降低了) 不需要流量控制 不可靠传输

        屏幕广播(不和计算机建立会话,实时,我的电脑屏幕播到哪是哪,不管你收没收到,不保证数据传输可靠性) 

cmd: netstat -n是查不到UDP的,因为UDP不产生会话!

TCP/UDP+端口---->应用层程序

TCP/UDP+53------>DNS协议,但大多数情况下是UDP+53

http = TCP+80

https = TCP+443

服务和应用层协议之间的关系

服务使用 TCP或UDP的端口侦听客户端请求;客户端使用IP地址定位服务器,使用目标端口,定位服务;可以在服务器网卡上设置必要的端口开,其余都不开,实现网络安全。

cmd: netstat -n find "established"查找已经建立的会话

TCP的端点(套接字)是:(IP地址:端口),每一条TCP连接有两个端点。

ARQ实现可靠通信,自动重传请求,重传的请求是自动的,接收方没有请求发送方重传。

连续ARQ可靠通信:发送数据包的计算机需要维持一个发送窗口,发送窗口是5,框住5个数据包表示5个数据包可以连续发送,不用等确认。比如第一个到第五个数据包发完,收到第一个包的确认收到消息,此时滑动窗口移动1位,第一个包可以从缓存中清除掉了,此时第六个数据包被框住,就可以被发出去了。

当然还有累计确认,收到“已收到3”的确认消息就不需要1、2了

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

TCP报文首部:

>=20字节,每一行四个字节,固定位置是20字节

第一行是源端口(2字节)和目的端口(2字节)

第二行是序号(4字节),记录这个头部后面所跟着的数据的第一个属于整个大数据的第几位。

第三行是确认号(4字节),等客户端收到这个数据之后会把首部去掉并返回给服务器端一个确认包,返回的是下一个要接收的东西(即上本次收到的数据最后一个+1),比如此次我收到1、2、3、4,我会返回一个确认号为5的确认包,这个5表示接下来我要收的数据,这就是确认号。

第四行:数据偏移量(1字节),因为TCP首部长度不固定,所以需要数据偏移量告诉我们偏移多少之后才是数据(也就是首部多长),数据偏移量虽然只有一个字节,但是他一个1代表的是4字节,首部最长是15×4=60,选项最多有40字节;保留(6位=3/4个字节),没用;FLAGS:URQ:如果设为1,就不用在缓存里排队,vip会员优先级高于一切(比如告诉对方你别给我发啦);ACK:如果是0,确认号没有用;PSH:如果设为1,收到的数据不用在缓存中排队等着,直接提交给应用程序;RST就是告诉发送方,你别发了,此次会话结束啦;SYN是发起会话时才用的;FIN是告诉对方,这是我最后一个数据咯~窗口也是告诉对方我的接收缓存最大容量是多少(一般建立会话时有)。

第五行:检验和,与UDP一样,也是伪首部+TCP首部+数据,只不过伪首部中的协议号是6(UDP是17);紧急指针:告诉对方紧急处理的数据是从1一直到多少,如果是50,表示需要紧急处理的数据为1到50。


老师上课给大家抓包工具抓了一个包,其中用到了TCP、UDP(域名解析)、ARP(要上外网需要解析网关的MAC地址)

建立TCP三次握手:

1.建立会话请求[SYN](SYN=1)(此时ACK=0也就是确认号没有用,抓包的时候也看不到确认号)MSS(是首部第六行“选项”中的)=1460告诉服务器我这边支持一个数据包最多1460个字节,你以后给我发别给我发大包。win=65535,告诉服务器我这里的接收缓存窗口最大是65535字节,服务器知道了之后会把自己的发送缓存设为65535字节。

2.紧接着服务器返回给客户端的[SYN](SYN=1) [ACK],告诉客户端我同意和你建立会话,此时确认号为1(ACK=1确认号能用),序号为0,MSS=1430告诉客户端,我这边支持一个数据包最多1430个字节;win=64240表示缓存里能最多64240个字节,如果你给我发了64240字节我还没给你确认,你就停止给我发送哈。win=64240,告诉浏览器我这里的接收缓存窗口最大是64240字节,浏览器知道了之后会把自己的发送缓存设为64240字节。

3.[ACK] win=64245,客户端告诉服务器缓存里能最多64245个字节。从此之后SYN再不会设为1,因为SYN只是用来发起会话。


以字节为单位的滑动窗口:

A发送给B的过程:A发送1~3 4~7 8~15,结果B收到1~3和4~7,发现他们是连续的,就会给A发一个确认消息(确认号为8),于是A将缓存中1~7全部删除,滑动窗口移动到8。

如果是有丢包的情况,A还是发送1~3 4~7 8~15,但是B收到1~3 8~15,发现中间缺了4~7,他会给A发送确认消息(其中有SACK告诉它中间缺4~7),A移动窗口到4,只发送给B 4~7,而不会发给他8~15。


TCP拥塞控制:

慢开始(刚开始发的少)和拥塞避免(增长速度是指数增长,到慢开始门限(网络拥塞/2)就开始加法增大地增加窗口)

快重传:A发1~4,结果B收到1、2、4,当他收到4他就已经知道3丢了,他会立即开始发送三个重复的确认,然后慢开始门限=网络拥塞/2,又开始重新设置;和之前不同的是,以前到了拥塞时拥塞窗口会立即变成1,但现在有了快恢复,拥塞窗口直接从新的慢开始值进行加法增加。

发送方窗口为拥塞窗口和接收方窗口二者的最小值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值