计算机网络知识点
image.png
- 在浏览器输入http://www.baidu.com在网络中发生了什么
1.询问dns获取百度服务器的ip地址
2.发送http请求(浏览器调用socket api发送请求)
3.建立连接(tcp三次握手)
4.发送http请求报文(http的请求报文会被封装在多个tcp的段中,tcp建立连接之后,就会不断的发送tcp段,直到左右的tcp段被发送完,也就是完成了一个http请求报文的发送)
5.返回http响应报文(配合tcp发送的请求段返回tcp响应段)
过程补充:一开始会根据我们输入的域名去找dns服务器,dns服务器告诉这个域名对应的ip地址(同时会在本地生成一张域名ip映射表),然后计算机找到这个ip地址对应的mac地址(会在本地生成ip/mac路由表),最终是根据mac地址发送到对方 - 为什么要建立三次握手,2次不可以吗
主要目的是防止server端一直等待,浪费资源;假设客户端发出的第一个请求连接因为网络的延迟,在连
接释放后的某个时间才到达server(按理来讲这个连接对于客户端来讲是一个失效连接),但在server收到这
个失效连接后,误认为时客户端再次发送的一个连接请求,于是server发出确认。客户端这个时候并没有
想要去建立连接的意思,于是将会抛弃这个确认,对于服务端来讲,服务端将会因为得不到客户端的确认
一直处于等待状态,如果是三次的话,服务端将会因为在一定时间内没有收到客户端的确认知道客户端这
这个时候没有建立连接的想法从而关闭连接,如果第三次握手失败了且服务端处于同步接收状态,服务端
会多次发送syn+ack包都收不到来自客户端的ack的换,会发送rst包强制关闭连接
image.png - 为什么要四次挥手:tcp是全双工的,需要确认双方都没有数据发送了
如果两次挥手后客户端这边马上释放了,但是由于网路原因导致服务端这边没有收到客户端的ack,server就
会多次重发fin包,这时后客户端因为已经释放连接将不会在搭理服务端发送过来的包,服务端会处于多次
发送fin等待状态,客户端有一个新的应用分配了这个端口号,新的应用程序收到fin后马上开始执行断开连
接操作,本来可能这个新的应用是需要建立连接的 - 192.168.0.255/23 是可以给客户端的 192.168.1.255/23 是不可以给客户端的因为他的九位主机号位全为1 ,是广播地址
- 为什么要在传输层去拆数据包而不是放在网络层拆解呢
网络层和数据链路层都没有重传机制,网络层和数据链路层就是将上层传来的数据打包传输,客户端的传
输层在一定时间发现还缺少一个包的情况下,会给服务器连着发送三个相同的seq确认(seq = 1,ack = 2),
这个时候服务端传输层会重传丢失的段(seq = 2, ack =1),如果在传输层不分段,在网络层分段,一旦数
据出现丢失,整个数据将会从传输层开始重新在网络层拆分重传,而在传输层分段,就只需要重传丢失的
数据段就可以了,提高传输性能、 image.png
image.png
-
计算机之间的连接方式(都不具有ip,只是数据的中转站)
通过arp广播获取自己要请求ip对应的mac地址,此时目标ip被设置为全F(FFFF.FFFF.FFFF),同一个网络段都会接收,但只有和请求ip是同一个ip的设备才会有回应
1.同轴电缆(物理层):同轴电缆没有智商,及时知道对方的mac地址,也需要走分叉分支
image.png
2.集线器(物理层):和同轴电缆一样没有智商,需要发送给所有分支
image.png
3.网桥(数据链路层):只有两个接口,它会记录这两个接口所连接的物理设备,分成左右两边,两个冲突域是全双工,冲突域内是半双工,可以隔离冲突域
image.png
4.交换机(数据链路层):接口更多的网桥,也是局域网的最终解决方案,经过一次广播之后,它知道每个接口对应的mac地址,更加安全,因为它学习完之后,将不会把包发给所有个分支,全球使用交换机会出现ip地址不够用情况
image.png
5.路由器(网络层):可以跨网段,首先在路由器的端口配置ip(这个ip就是客户端的网关),同一个网段的客户端需要把网关设置成路由器的端口ip,第一次发送arp拿到路由器端口对应的mac地址,然后将数据发送给路由器,路由器在重新封装数据,将路由的ip和mac封装成源ip+源mac,在这个过程中目标ip是一只不变的,改变的是源ip+源mac+目标mac,客户端会拿到对方的ip地址与自己的子网掩码按位与来判断对方是否和自己是同一个网段
image.png
image.png
动态路由协议:rip自己学习需要转发的网段和下一跳地址生成路由表
静态路由协议:自己手动配置吓一跳地址
image.png
补充:
1.主机在发送数据之前,首先会判断目标主机的ip是否和自己是同一网段- 同一网段:arp、通过交换机、集线器传递数据
- 不同网段:路过路由器转发数据
2.猫:调制解调器(数据链路层)它要在把数据交给网络中路由器之前进行信号做个转变,或者在接收来自网络中路由器的数据之后进行信号转变
-
上网方式
1.电话线入户
image.png-
光纤入户
image.png
3.网线入户(学校网孔)
image.png
4.家用无线路由器的逻辑结构
image.png
5.无线网络
image.png
image.png
image.png
image.png
-
-
数据链路层(csma/cd、ppp)
1.将ip数据包封装成帧
2.透明传输:将中间数据又结束符或者开始符的位置进行转义
3.差错检验:将数据封装成帧的额时候会将验算规则和验算结果一起封装,对方拿到数据之后会根据这个规则将数据进行验算并与封装的验算结果比较,不同则将数据进行丢弃
补充:集线器的数据链路遵守的是csma/cd协议,载波侦听多路访问/冲突检测,路由器遵守的是ppp点对点协议 -
网络层
-
ip地址组成
image.png
A类地址
image.png
B类地址
image.png
C类地址
image.png
image.png
image.png
3.nat:私网ip转为公网ip,internet上的路由器只识别公网ip,如果现在又两台电脑分别设置为不同的网络段,把它们通过一个路由器连接,它们是可以ping通的,因为他们没有接入internet,如果把这个路由器接入到internet之后,就不可以ping通了,因为internet上的路由器只到达公网ip,内网穿透原理里利用的就是nat将映射到公网的路由器的端口号固定
image.png
image.png
4.icmp、ip、arp
image.png -
-
传输层(可靠传输【建立连接和释放连接】、流量控制【点对点控制传输窗口大小】、拥塞控制【全局的,大家都遵守一个准则】)tcp、udp协议
image.png
1.tcp建立连接
image.png-
seq1.在建立连接的时候,seq是初始化自己的开始序列号,同时也告诉对方你发送给我的数据需要从我这个序列号后面接着发送,2.当开始进行数据传输的时候,seq变成了遵守对方的规则,从对方的ack开始发
ack:表示我收到了ack-1个数据,告诉对方需要从ack开始发,也就是对方下一次需要发送过来的seq
+紫色是客户端、蓝色是服务端
image.png
image.png
image.png
2.释放连接
image.png
image.png
time-wait 客户端收到对方的fin和确认的时候,客户端会等待一段时间在关闭大概等待4分钟
image.png
补充:传输层在建立连接之后,及时很长时间没有数据传输,服务端也会依然等待,可从应用层来解决这个问题,设置15秒去监听一次客户端发来的数据,发现客户端有请求发送过来将重置时间,如果超过15秒没有请求在断开连接
3.流量控制
image.png
4.拥塞控制
image.png
-
拥塞控制的几个方法(慢开始、拥塞避免、快速重传、快速恢复)
*滑动窗口:接收窗口和发送窗口,这个是根据接收方指定的,原因是由于接收方的缓存区不够,发送方还在一直发送数据会导致接收方直接将数据丢弃,从而造成网路资源浪费
*拥塞窗口:这个是发送发自己调控的,为了避免造成链路拥堵
*发送方最多可以发送取决于滑动窗口和拥塞窗口的最小字节 transmittable bytes = min(cwnd, rwnd)
image.png
image.png
-
应用层
1.http
短连接:一次会话之后就断开连接
长连接:建立连接之后不断开,后续的http请求都基于这个连接,适用于经常频繁发送数据,比如实时交互
image.png
image.png
image.png
image.png
image.png
前后端分离的情况下,服务器没有必要给我们返回302,而是根据服务器的结果前端自己决定跳转
application/x-www-form-urlencode name=haha&&age=18
multipart/form-data 用于文件上传
我们现在大多使用application/json
image.png
image.png
image.png
跨域的时候。浏览器请求数据到后端,后端给出响应返回后,浏览器会检查响应头是否有Access-control-Allow-origin:xxx字段,如果有则将这个字段的内容匹配自己的origin,匹配成功则放行数据,否则将数据进行拦截并报跨域错误,标签不受跨域影响
http请求是无状态请求,它的每次请求都是独立的,上一次请求和这一次并没有联系(即使在共用同一个tcp连接)
image.png
image.png
image.png
缓存:内存缓存 + 硬盘缓存
image.png
image.png
2.代理服务器
image.png
image.png
image.png
3.DNS服务器
image.png
4.DHCP服务器
image.png
image.png
image.png
5.CDN(内容分发网络)
利用给最靠近用户的服务器,更快更可靠的将音乐、图片、视频等资源文件(一般是静态资源)交给用户
image.png
image.png
6.VPN(保护公司内部数据,隐藏客户端身份,提高上网安全性)
image.png