基础教材系列:计算机网络——韩立刚网课笔记

B站韩立刚老师的视频真的是一绝。

问题:计算机除了计算,还能彼此间通信,它们是如何通信的呢?是网络。

大纲:1、OSI七层参考模型;2、TCP/UDP传输协议;3、常见的应用层协议
 
一、网络体系架构
1、协议
协议是指计算机通信网络中,两台计算机进行通信,所必须遵循的规定或规则。计算机网络中有各种各样的协议,比如TCP协议、IP协议、HTTP协议、FTP协议等。像这样把与互联网相关联的协议集合起来,就称为TCP/IP协议族。
OSI/RM协议是由ISO(国际标准化组织)制定的,它有三个基本的功能:提供给开发者一个必须的、通用的概念以便开发完善、可以用来解释连接不同系统的框架。
2、多层架构
OSI七层:
  应用层:能够产生网络流量,能和用户交互的应用程序
  表示层:加密、压缩、开发人员
  会话层:服务和客户端建立的会话,如netstat -nb 可以查木马
  
  传输层:可靠传输建立会话、不可靠传输、流量控制
  网络层:IP地址编址、选择最佳路径
  数据链路层:输入如何封装、添加物理层地址、MAC
  物理层:电压、接口标准
 
网络排错:从底层到高层。
网络安全和OSI参考模型:
  物理层安全
  数据链路层安全:ADSL、AP密码
  网络层安全
  应用层安全:SQL注入漏洞、上传漏洞
前三层开发工程师关心,中间三层网络工程师关心,物理层搞硬件的关心。用分层的思想,去解决问题。
其他分层:
TCP/IP协议族的分层管理
  1. 应用层:处理特定应用程序,如FTP、DNS、HTTP、Telnet(远程控制)
  2. 传输层:提供数据传输,该层有俩协议TCP和UDP
  3. 网络层:处理网络上流动的数据包,该层协议有IP、ICMP、IGMP
  4. 数据链路层:处理连接网络的硬件部分,包括操作系统、硬件设备驱动、网卡等
IP协议:Internet Protocol,网际协议,位于网络层。作用:把各种数据包传送给对方。如果要保证确定传送到对方那里,则需要满足各类条件,其中最重要的两个条件是IP地址和MAC地址。IP地址:指明了节点被分配到的地址(可以改变);MAC地址:是指网卡所属的固定地址(基本不改变);IP地址和MAC地址相互匹配。;ARP协议,用于解析地址,可以根据IP地址反查出对应的MAC地址。
TCP协议:Transmission Control Protocol,传输控制协议,位于传输层。作用:提供可靠的字节流服务。TCP通过三次握手策略提供可靠的服务
DNS:Domain Name System,域名系统,位于应用层。作用:提供域名到IP地址之间的解析服务
此图关系就是:客户端——应用层——传输层——网络层——传输层——应用层——服务器
 
 
二、各层次详解
自下而上,每一层都要为它上面那层提供服务。
1、物理层:
        1)定义了网络设备的机械特性(如接口标准)、电器特性(如电压工作范围)、功能特性、过程特性
        2)数据通信常识:数字信号、模拟信号
        3)如何利用传输介质的带宽:频分多路复用、时分多路复用
2、数据链路层:
        1)要解决的三个问题:
                1.1)把要传输的数据封装成帧
                1.2)发送端和接收端要对转移字符进行加、去,这叫透明封装
                1.3)无差错接受(即差错检验)
        2)点到点线路的数据链路层(使用PPP协议)
        3)广播信道的数据链路层(CSMA/CD协议)
        3)什么是以太网,以太网如何检测冲突、避免冲突
                3.1)以太网的设备:集线器、网桥、交换机
                3.2)百兆、千兆、万兆以太网
3、网络层
        只负责在不同的网络之间尽力转发数据包, 如果丢了,不负责重传以及顺序。
        路由器是三层设备,它顶多看到网络层的数据。
物理层、数据链路层和网络层封装到一起。
所以不管物理层、链路层多乱,网络层只要看把数据传到哪个ip就行,其他不用管。
比如排查问题时,只要能ping通ip,说明下面三层没问题,就是上面两层的事。
 
    1)自己如何配公司网络?
设备:几台电脑,一个交换机,一个路由器
公司内部用的是局域网,自己的ip随便定,
公司跟外部连接是广域网,ip就是公网ip,运营商分配的
局域网和广域网要想联通,通过路由器,他也充当一个网关作用,
路由器要设置两个地址,一个是网关,就是个门,公司的电脑都走这个门出去,(跨域通信必配网关)
另一个就是运营商分配的ip了,这个ip是运营商每隔一段时间随机分配的,会变。
几台电脑,设置ip,子网掩码(掩码就是用来确定ip从第几位开始是一样的),和网关(约定俗成就是ip的第一个地址)
这样就行了。
此时,如果一个电脑,要访问对方公司局域网的一台电脑,需要在自己路由器里,用命令修改路由表,让路由器知道一输入那个局域网地址,就知道该扔给哪个公网ip。
 
    2)网络层如何准备数据
发送端:
  1.应用程序准备要传输的文件
  2.传输层:将文件分段,并编号
  3.网络层:添加目标IP地址源IP地址
  4.数据链路层:两种情况
      使用自己的子网掩码,判断自己在哪个网段
      使用自己的子网掩码,判断目标地址在哪个网段
      如果是同一个网段,arp协议广播解析目标IP地址的MAC
    3)网络层的各种协议
        3.1)arp协议:一个电脑要向另一台电脑发送数据,需要通过发广播,问对应ip的mac地址,拿到mac地址才能给对方发数据。这个广播只能在本网段进行,跨不了路由器。
                arp欺骗,是指给人家广播时,返回错误的mac地址。这样可以限制通信、也可以截取数据。
                可以通过指定arp -s指定静态mac地址。比如安全软件的arp防火墙
      网络执法官
      arp -s 192.168.80.1 00-0C-29-53-48-C3
      arp -a 
      本地连接 修复
                
        3.2)ICMP协议:测试网络
        3.3)IGMP协议:它在路由器上,检测本网段中,谁绑定了多播地址,就去请求人家的数据包
        3.4)IP协议: 
        路由器转发数据包时,需要按照路由表,这个表由管理员告诉它,就叫静态路由;由它自己根据协议学习,就叫动态路由,这些协议如RIP、OSPF,都属于IP协议,它能让路由器能自动学习路由表。
        如果路由器多,管理员一个个配置会累死的,多用ip协议,如果企业内部,变化不大的,可以用静态。
静态路由:需要管理员告诉路由器所有没有直连的网络下一跳给谁
        静态路由的缺点:适合于小规模网络,不能够自动调整路由
动态路由:RIP 周期性广播路由表 跳数 30秒更新一下路由信息 最大跳数 15跳
 
        3.5)网络畅通的条件:看数据包是否有去有回。去不了,说明其中有个路由器的路由表,没记下一步转发给哪个路由器,这叫请求不可到达。去了,没回来,说明有个路由器的表,存了咋去,但没存回来该转发给谁,这叫请求超时。
 
 
4、传输层

 

 

这张图肯定是要背会的
        4.1)TCP、UDP
qq的聊天就是UDP,发送失败就提示发送失败,但qq的文件传输却是TCP。
netstat -nb 查看当前电脑,有哪些程序跟外界建立了联系,可以用来排查木马,及查看对方程序ip
 
 
服务和应用层协议之间关系:
  服务使用 TCP或UDP的端口侦听客户端请求
  客户端使用IP地址定位服务器  使用目标端口  定位服务
  可以在服务器网卡上设置只开放必要的端口 实现服务器网络安全
 
网络安全:通过设置网卡的端口限制,来拒绝其他请求。现在理解阿里云的安全组的原理了,就是通过限制网卡端口完成的。

 

 

使用端口扫描工具,和telnet命令,来猜测对方开了哪些服务,然后可以进行恰当的攻击。比如有80端口,就用web服务的攻击方式,开了3389,就直接远程链接它,然后猜测密码等等
面对这种情况,可以修改端口迷惑敌人。比如在注册表把3389改成4000,这时再远程链接,会默认访问3389,就连不上,必须在访问的ip地址后面加上端口4000才行。这样就达到了一定的安全效果
 
    4.2)传输层与网络层的区别

 

 

    4.3)UDP
 
    4.4) TCP
 
        报文格式
tcp首部的部分字段:
urg:标志比较急、要插队的数据,标记为1,不排队
psh:跟psh配合,urg是在发送端,插队到自己的缓存里,psh是数据送到服务端了,在人家的缓存里插队到前面,标记为1,不排队
ack:0,确认号无效,1,确认号有效,这个和syn配合用
syn:同步,意思是请求要建立连接了,1,表示想建立连接,如下图,第一次握手,syn1、ack0,第二次握手,syn1、ack1,这时就能客户端就能进行第三次握手,但客户端憋着不发,服务端就一直等,就造成DDOS攻击了,这也是下面记得笔记里为啥tcp要三次握手的原因,没三次握手前,全是DDOS哈哈。
这种syn+ack的ddos攻击是在第二次握手时的,还有种第一次握手就搞的,就是客户端第一次握手时,把自己ip改成随机的,让服务端进行确认时(第二次握手),找不着这ip,或者找到别人的ip上,这样消耗服务端资源。
syn攻击:通过伪造请求的ip,建立tcp连接,导致受害机器一直找那个要回应的ip,占用资源直到死机。这让我想起了著名的DDOS攻击
rst:中断的标志,1表示中断连接了,比如在浏览器里,正在请求页面,点了红色的小叉中断请求,就会发rst为1的tcp过去
fin:结束标志,传完了,这个值就变为1,代表我tcp的数据传完啦
 
        4.4.1)TCP如何实现可靠传输
    TCP连接的是两个端点,端点是IP地址+端口,这个端点学名叫——套接字

1 socket笼统的来说,属于进程,多个线程可以共用一个socket,程序只是进程执行的代码(指令)
2 怎么区分开的就看你怎么管理,用于listen是服务器类型(serversocket),其接收一个客户端连接就会创建一个socket,你可以把这些socket放到集合去管理
3 服务器端只有一个端口监听,所以不管有多少客户端跟服务器连,服务器只用同一个端口跟客户端通信,每个客户端会自动开启一个端口跟服务器连接,至于你要发给哪个socket,你自己可以指定,或者从集合里遍历全部都发送

举个例子,S是服务器,C是客户端,C跟S连接,S会创建一个socket对象和C通信,对于C来说端口是随机分配的(一旦分配好,也就相当于变成固定了),对于S来说端口是固定的(就是监听端口),S通过固定端口和C的分配好的端口互相发送/接收数据

jmeter并发http请求是线程开启socket。

 

2023补充:

tcp是一对一的,http是tcp+80端口,那么多个客户端同时和tcp+80保持连接如何实现?

server,监听80端口,有10个client访问这个网站,都和这个网站的80端口建立TCP连接,server是怎么区分这10个client呢?
首先我们是用{本地ip,本地端口,目的ip,目的端口,协议}这个五元组来唯一区别一个连接的。所以回到上面的问题,多个客户端访问服务器,虽然server的ip和端口是一样的,但是client的ip和端口不一样,他们仍然是不同的TCP连接(也叫socket)。假设有个web
同一个程序能够保持多条socket。当收到数据包时,操作系统根据端口号将数据包交给相应的程序。程序再根据数据包中的本地ip和端口交给不同的socket。
(引用 https://blog.csdn.net/yrk0556/article/details/105276914/)

五元组就是 socket文件描述符,因此答案关键就是:多个socket有不同的客户端ip端口,相同的服务端ip端口
(引用 https://zhuanlan.zhihu.com/p/520700507)

扩展到netty框架的实现:
NIO整体调用流程就是java调用操作系统的内核函数创建,获取到socket文件描述符,再创建selector,对应系统的epoll描述符(NIO底层在jdk1.4版本是用Linux内核函数select和poll来实现的,但是会轮询所有的客户端socketChannel,jdk1.5开始引入epoll基于事件响应机制来优化NIO),将获取到的socket连接的文件描述符的事件绑定到selector对应的epoll文件描述符,进行事件的异步通知,这样就使用了一条线程,不需要太多的遍历,将事件的处理交给了操作系统内核中断程序实现,提高了效率。
(引用 https://blog.csdn.net/James201904/article/details/122243821)

 

    TCP可靠,归根结底一句话:你没确认,那我当你没收到,我再发
 
    TCP通过以字节为单位的滑动窗口技术实现可靠传输。(传数据时,被分割的数据块放到缓存了,窗口滑动,一些已传过的数据就从缓存释放了)
 
        4.4.2)TCP如何实现流量控制
    通过接收端,告诉发送端,接收窗口有多大,来实现的。
        4.4.3)TCP如何避免网络拥塞
    课程缺失,点我补上1点我补上2  
        4.5)TCP为啥要进行第三次握手,两次不就够了么?
                因为,请求走不同的路由器,有的路长,有的路短,路长的客户端会重新请求,这会导致服务端以为是新请求就重复确认,但客户端却只认一次,于是服务端就一直等,造成资源浪费。
下面是三次握手详细图解

 

 

 

 
5、应用层
应用层的各种协议,可以看作是tcp+端口组成的服务。
5.1 域名DNS服务器:nslookup 查看目前是哪台DNS服务器给我们提供了域名解析服务。输入网站域名可以查看其对应ip地址,这个也可以实现负载均衡。
5.2 DHCP:可以动态分配ip,与dns一样,都可以在计算机上配置这个服务使自己电脑提供dns或dhcp服务。
dhcp是一个逆向的arp,arp是在网络层发广播,问这个ip对应的mac地址是多少,而dhcp是发广播,问我这个mac地址应该被分配一个什么ip。
5.3 FTP :如果连不上,要看它是什么模式,如果被动模式访问不了,就是对方限制了端口,这时客户端成主动模式即可
FTP协议
  主动模式:ftp客户端告诉ftp服务器使用什么端口侦听
       ftp服务器和ftp客户端的这个端口建立连接  源端口20
  被动模式:ftp服务器打开一个新端口,等待ftp客户端的连接
  ftp服务器端,如果有防火墙,需要在防火墙开21和20端口,使用主动模式进行数据连接
 
通过window组件,可以添加ftp服务,将自己电脑设置为ftp服务器,此时别人连接我时,netstats -n查看,没有20端口,就是被动模式。上传下载文件还是tcp进行的传输,每个文件的传输都建立一个新的会话
5.4 telnet: 可以远程调试如路由器、交换机等网络设备;还可以测试端口是否打开
5.5 rdf:远程桌面,跟telnet对应,它是终端命令行,这是桌面,只要网络畅通,在哪都能连上。这个用的是tcp的3389端口
mstsc
在任务管理器-用户,可以控制当前链接的人。
windows Server最多两个人连一台电脑。
telnet和rdf都需要本机设置有密码才能用。
远程连接其他电脑时,可以直接设置将本地磁盘映射过去,这样就可以直接传文件了。
5.6 http视频有问题,然后就教了如何搭建windows上的网站,感觉跟看毛骗里的做假网站似的。然后又讲了邮箱服务器smtp的搭建,也是在windows上搭建的,随便看看把
关于http,看了《计算机网络自顶向下》,提到了http不保存客户任何信息,所以它是无状态的,
http分为非持续连接、持续连接,即短连接、长连接。http1.1默认长连接,短链接就是连一次就新发http请求,每次的tcp不同,长连接则相同。详情点我参考
请求方式:get,post,head(对方只响应,不返对象),put(上传文件),delete(删服务器的内容)
用户与服务器交互:cookie,
但我们可以用cookie保存客户信息,客户首次请求,服务器可以给它个id并返回给客户端,下次再请求,浏览器会在其请求报文中继续放入首部行cookie:id,这样就可以根据此用户访问过的网页,给他推送相关产品了。
 
5.6.2web缓存服务器:http老请求服务器太慢,比如局域网网速100M,连外网10M,就可以买个缓存服务器,请求的图片、视频,都缓存到缓存服务器上,这样对http的请求响应就快了。比如CDN(内容分发网络),就是干的这件事,cdn公司买很多服务器,根据你的请求,dns服务器给你一个就近的cdn服务器域名,然后返回这个cdn缓存服务器的地址。
而ngnix,是针对服务器端而言的,主要用来分散服务器端的请求压力。
 
5.6.3 缓存服务器的内容,无法保持与真实服务器实时同步怎么办?http自带条件get方法,通过if-modified-since,来实现更新。
条件get的使用时机是:客户端之前访问过某网站,打算再此访问。(刚才想知道条件get是怎么触发的,结果百度半天搜不到,一谷歌,直接就是我想要的答案,百度有时不太好用)
 
 
6、网络安全
找肉鸡,可以找各种有漏洞的网站(比如各种没什么人访问的公司官网等僵尸网站),发指令给他们让他们去ping 一个大数据包给某个ip,然后占用他的带宽,使其页面无法访问。
具体操作是,先找些僵尸网站,拿到域名,导入到类似php small末日帝国等攻击软件,然后扫描这些域名,看谁有漏洞,然后输入要攻击的ip、端口,就可以了
 
木马程序:
  1.查看会话 netstat -n 是否有可疑会话
  2.运行msconfig服务,隐藏微软服务
  3.安装杀毒软件
 
6.1)加密技术
        对称加密:双方约定一个密钥,传输时加密。缺点是密钥也要在网上传输,不安全,且维护密钥麻烦
        非对称加密:每个人有个密钥对,把公钥给大家,私钥自己留着,以后别人发东西用公钥加密,自己接收到用私钥解。
    非对称加密慢但安全,对称密钥快但不安全,所以,要传文件,可以先对称加密要传输的文件,然后用非对称密钥,将对称密钥的密钥key加密,然后将加密后的文件和加密后的key都传过去。这样就结合了两种加密技术的优点。
6.2)数字签名:传输内容时,防止抵赖,确保不能更改
如何实现:传的文件不加密,但给文件算个hash值,再将此值用私钥加密(非对称加密),然后把文件、加密后的hash值(叫摘要)、公钥发给对方,对方拿到这三个东西,也给文件hash一下,然后用公钥发来的公钥解密发来的摘要,看解密后的这个hash值与自己算出来的是否一样。这样就实现了数字签名。
6.3)证书机构ca:颁发公钥私钥的。公司向ca申请,ca给他个证书、公钥私钥,他把文件发给其他人,对方会用ca的公钥先验证其ca证书是否合法,合法之后,再用其公司的公钥解密。
 
证书颁发机构作用:为企业和用户颁发数字证书,确认这些企业和个人的身份
            发布证书吊销列表
         企业和个人信任证书颁发机构
 
windows组件有ca服务,可以将本机设置为证书机构,然后访问这个机器的ca地址,就能进行申请了。同时internet的选项里也有很多著名的ca机构可供选择。
6.4)ssl:应用层和传输层之间的加密
 
posted @ 2020-06-06 15:08  zhaot1993  阅读(1097)  评论(0编辑  收藏  举报