计算机网络学习小结

网络分层

计算机网络主要就是讲计算机协议

网络模型有7层也有5层 一般来说都是讲5层

在这里插入图片描述

socket一般由四元组组成

源Ip 端口号  目的ip 端口号

同一个socket里有很多流   例如一个http长连接中有多次http请求 每次请求是一个流  一个http长连接底层也是靠socket连接

操作命令

ifconfig 用于显示和配置网络接口的信息,如 IP 地址、子网掩码、MAC 地址等

telnet 测试目标端口是否开放 telnet 192.168.1.2 8080

netstat 用于显示网络连接、路由表、网络接口统计等信息 

  • 显示所有 TCP 连接:netstat -tulnp
  • 显示路由表:netstat -r

ping 用于测试与目标主机之间的网络连通性,通过发送 ICMP 回显请求包并等待响应来判断网络是否可达 ping www.baidu.com /127.0.0.1/localhost/192.168.1.1

这里说下127.0.0.1和localhost     localhost是域名 通过查询配置会转换成127.0.0.1

127.0.0.1是回环地址 当网线断开 ping127.0.0.1也是连通 以为在网络层会判断是本机就不走真网卡了

ping 192.168.1.2这个是局域网ip地址 当网线断开时 无法连通

本地局域网 IP(如 192.168.1.2)是主机通过物理网卡(如 Ethernet 或 Wi-Fi)连接到局域网时分配的地址。它依赖物理网络接口与其他设备通信,与回环地址(127.0.0.1)有本质区别。

还有一个0.0.0.0 或者本机的局域网ip

  • 含义0.0.0.0 是一个特殊的 IP 地址,它表示监听主机上的所有可用网络接口。无论客户端是通过本地回环接口(127.0.0.1),还是通过主机的局域网 IP 地址(如 192.168.1.100)、公网 IP 地址来连接,只要端口号正确,都可以连接到监听该地址的服务。

监听 127.0.0.1 时,只有本地客户端可以连接

应用层

应用层就是进程与进程间通信 并且定义了相应的格式  用tcp协议实现的协议还处理了粘包拆包的问题

常见协议 http https ftp telnet dns ssh kcp

http 超文本传输协议

请求头部信息

在这里插入图片描述

方法有

get获取资源 一般从服务器上获取资源 请求参数在url之后 查询一般用get

post 传输实体主体  向服务器提交请求字段 请求提交的数据封装到请求体中

put修改指定url资源

patch局部修改url所在资源的数据

delete删除指定Url资源

head获取相应报文的头部

options询问服务器支持哪些方法

trace追踪路径

url就是请求路径

版本协议 http有1.0 1.1 2.0协议

1.0协议是短连接的  一次请求和回复后就断开连接

1.1版本的特点就是长连接 多个请求可以串行的用这个tcp连接

问题就是队头阻塞

1.1 有还有管道机制 同一个TCP连接里面,客户端可以同时发送多个请求 服务器还是顺序执行 还是有头部阻塞 默认不开启

2.0是多路复用二进制分帧 同一个连接并发处理多个请求  同个请求服务器可以分多次回复 但还是要客户端发请求 服务器可以对一个客户端请求发送多个响应 服务器向客户端推送资源无需客户端明确的请求

多个请求可以在一个tcp上同时发送    每个请求是同个stream   每个stream可以拆成多个frame

3.0使用了quic协议

http是无状态的连接 为了处理这个问题 每个请求都是独立的互不相关

session和cookie

引进了session和cookie

cookie和session都是保存用户的信息实现有状态

最大的区别是cookie保存在浏览器中 请求时发送整个cookie  session是在服务器中的缓存 发送sessionId到浏览器中 请求时以cookie的形式发送给服务器

cookie最大允许4kb 一个站点最多20个 

另外有一个token 令牌

是为了解决分布式 是用于验证身份 相当于把Session信息让客户端来保管而且无法伪造

用户登录进行身份认证,认证成功后服务器端生成Token返回给客户端;客户端接收到Token后保存在客户端(可保存在Cookie、LocalStorage、SessionStorage中);客户端再次请求服务器端时,将Token作为请求头放入Headers中;服务器端接收请求头中的Token,将用户参数按照既定规则再进行一次签名,两次签名若一致则认为成功,反之数据存在篡改请求失败。

cookie把账号密码一起发给服务器  token第一次发了账号密码 后面收到token后只发账号和token

session第一次发了账号密码 后续只发seesionid

响应头部信息

在这里插入图片描述

协议版本

状态码

在这里插入图片描述

200ok

204成功但没有资源返回

301永久性转移

302暂时重定向

304已缓存

400参数错误

401未授权

403没有权限

404没找到资源

405不支持该请求方法

500服务器内部错误

503服务器不可用

https是加密的http协议

HTTPS协议==HTTP协议+SSL/TLS协议,在HTTPS数据传输的过程中,需要用SSL/TLS对数据进行加密和解密

https在建立链接时是非对称加密,建立链接后是对称加密

1对称加密:加密解密用同一个密钥,被黑客拦截不安全

2非对称加密:公钥加密,私钥解密;公钥可以公开给别人进行加密,私钥永远在自己手里,非常安全,黑客拦截也没用

为了保证服务器给客户端的公钥是可靠的,服务器向第三方认证的机构CA申请证书,然后服务器再将公钥附在证书上传给客户端。客户端收到证书后,首先判断域名是否为目标域名,然后比对数字签名和使用摘要算法得出的信息是否正确(即验签

操作系统上有ca证书的公钥,是被操作系统信任,所以无需传输,因此也不会被劫取。这意味着中间人是没有这个公钥的

1客户端生成第一随机数发送给服务器

2服务器收到后生成第二个随机数 并且将公钥发给ca  ca用密钥对摘要加密 将证书发给服务器 

服务器将证书和随机数发给客户端

3客户端用ca证书的公钥解密 得到服务器的公钥 并且生成第三随机数 用服务器的公钥加密发送给服务器 自己将三个随机数生成密钥 之后就用密钥传输

4服务器收到后 用私钥解密 得到第三随机数 将三个随机数生成密钥 用密钥传送

非对称加密原理

有两个关键因素 公钥和私钥   公钥是多人都可以拥有并且公开    私钥只有一个人拥有不公开的

假如用公钥加密 那么只有拥有私钥的人才能解密 保证了数据的加密

假如用私钥加密 拥有公钥的人都能解密 数据不加密 但保证了数据就是来自拥有私钥的人发送的 用来确认身份的(前提是公钥是真的情况下)

websocket

持久化 基于tcp 双向通信协议

WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的    先用 HTTP 先进行三次握手,再向服务器请求升级为websocket 协议

.http存在的问题
http是一种无状态协议,每当一次会话完成后,服务端都不知道下一次的客户端是谁,需要每次知道对方是谁,才进行相应的响应,因此本身对于实时通讯就是一种极大的障碍
http协议采用一次请求,一次响应,每次请求和响应就携带有大量的header头,对于实时通讯来说,解析请求头也是需要一定的时间,因此,效率也更低下
最重要的是,需要客户端主动发,服务端被动发,也就是一次请求,一次响应,不能实现主动发送
 

实现了全双工 服务器也可以主动推消息 不用客户端请求

kcp

一般传输层用udp 

相比于TCP,KCP以浪费10%20%的带宽代价,换取比TCP快30%40%的传输速度,并且最大延迟降低三倍的效果。

KCP为纯算法实现,不负责底层协议的收发,需要使用者自己定义下层数据包的发送方式,以callback的方式提供给KCP。KCP内部不会有任何的系统调用,就连时钟都需要外部传递进来

在这里插入图片描述

 可靠传输一般都是靠确认机制 重传机制 序号重排 窗口

conv:会话编号,通信双方必须一致。
cmd:报文类型
IKCP_CMD_ACK 确认命令
IKCP_CMD_PUSH 数据推送命令
IKCP_CMD_WASK 接收窗口询问大小命令
IKCP_CMD_WINS 接收窗口大小告知命令
wnd: 己方可用接收窗口大小,接收窗口大小 - 接收队列大小
frg:segmen t分片。0,最后一个分片。3 2 1 0
sn:segment 报文的序列号。
ts:发送时间戳,用于计算RTO和RTT
una:待接收的序列号,其实确认号,表示该序列号之前的所有报文都收到了,可以删除
len:数据长度,DATA的长度
DATA: 用户数据

https://zhuanlan.zhihu.com/p/669460695

1 RTO(Retransmission TimeOut),重传超时时间。tcp x 2,kcp x 1.5,提高传输速度

2 TCP丢包时会全部重传从该包开始以后的数据,而KCP选择性重传,只重传真正丢失的数据包。

quic

一般传输层用udp 

 QUIC 协议中的三个核心特性:0-RTT 连接建立、无队头阻塞的多路复用、无歧义重传

快速UDP网络连接之QUIC协议介绍-优快云博客

kcp和quic和tcp

kcp和quic的传输层都是用udp    quic更多是用到web的http3.0中

但是都是模仿tcp保证了数据的可靠性

都是有会话id 包确认机制 包重传 重传都是选择性重传 只重传丢失的包 都有滑动窗口(quic每个流一个滑动窗口)

超时重传中kcp是1.5倍

ssh

SSH是英文Secure Shell的简写形式。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度

SSH提供两种认证方式:

  1. password认证:客户端向服务器发出 password认证请求,将用户名和密码加密后发送给服务器;服务器将该信息解密后得到用户名和密码的明文,与设备上保存的用户名和密码进行比较,并返回认证成功或失败的消息。

  2. publickey 认证:采用数字签名的方法来认证客户端。目前,设备上可以利用RSA和 DSA两种公共密钥算法实现数字签名。客户端发送包含用户名、公共密钥和公共密钥算法的 publickey 认证请求给服务器端。服务器对公钥进行合法性检查,如果不合法,则直接发送失败消息;否则,服务器利用数字签名对客户端进行认证,并返回认证成功或失败的消息

ftp

FTP 英文全称 File Transfer Protocol,中文全称 文件传输协议。提供交互式访问,基于TCP完成数据的传输

 FTP采用C/S模型完成服务,一个FTP服务器可以为多个客户端提供服务。工作步骤如下:
        1、服务器启动,等待接收客户端的请求,一般默认端口为tcp的21;
        2、客户端与服务器建立控制tcp连接,该tcp连接用于后续交互ftp相关信息;
        3、服务器与客户端建立连接,处理相应请求
 

socket 

套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合

一般是4元组 源ip 端口号 目的ip 端口号  或者5元组 加多一个协议

序列化协议

  • 序列化:将对象转换为字节序列的过程称为对象的序列化;
  • 反序列化:将字节序列恢复为对象的过程称为对象的反序列化

protobuf json xml 

xml是一种通用和轻量级的数据交换格式语言,是指可扩展标记语言(extensible  markup language),以文本结构进行存储

Json是一种通用和轻量级的数据交换格式,也是以文本的结构进行存储,是一种简单的消息格式,全称为JavaScript Object Notation。Json作为数据包格式传输时具有更高的效率,这是因为Json不像xml那样需要有严格的闭合标签,这就让有效数据量与总数据包比有着显著的提升,从而减少同等数据流量的情况下网络的传输压力
 

Protobuf是Google开发的一种独立和轻量级的数据交换格式,以二进制结构进行存储,用于不同服务之间序列化数据。全称为Protocol Buffers,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者序列化,可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式
 

tag记录编号和类型  当类型为0时 用可变长结构存储字段

优点    
(1)二进制结构存储,效率高,序列化体积比Json和xml更小、更加灵活;

(2)格式规范,支持RPC;

(3)易于使用,开发人员可以按照一定的语法定义结构化的消息格式,然后送给命令行工具,工具将自动生成相关的类,可以支持JAVA、C++、Go等语言环境。通过这类类包含在项目当中,可以很轻松的调用相关方法来完成业务消息的序列化与反序列工作;
 

网络攻击

SQL注入



SQL 注入漏洞(SQL Injection)是 Web 开发中最常见的一种安全漏洞。SQL注入漏洞就是通过SQL参数替换形成特殊SQL操作。可以用它来从数据库获取敏感信息,或者利用数据库的特性执行添加用户,导出文件等一系列恶意操作,甚至有可能获取数据库乃至系统用户最高权限。

SQL防御方式
1.使用预处理 PreparedStatement。
2.使用正则表达式过滤掉字符中的特殊字符。
3.目前许多数据访问层框架,如IBatis,Hibernate等,都实现SQL预编译和参数绑定,攻击者的恶意SQL会被当做SQL的参数,而不是SQL命令被执行。
 

DoS攻击


DoS 是 Denial of Service 的简称,即拒绝服务,造成 DoS 的攻击行为被称为 DoS 攻击,其目的是使计算机或网络无法提供正常的服务。

DoS防御方式
1.验证码 暴力防御方式,用户体验差
2.限制请求频率 Yahoo算法,根据IP地址和Cookie等信息,可以计算客户端的请求频率并进行拦截
 

DDOS攻击

DDOS攻击全称为分布式拒绝服务攻击,DDOS是DOS攻击中的一种方法。是指击者利用大量机器对攻击目标发动大量的正常或非正常请求、耗尽目标主机资源或网络资源,从而使被攻击的主机不能为合法用户提供服务。

DDOS防御方式
防御方式与DOS类似

传输层

实现网络上主机进程之间的通信   有可靠和不可靠传输

协议有tcp和udp

由于以太网EthernetII最大的数据帧是1518Bytes这样,刨去以太网帧的帧头(DMAC目的MAC地址48bits=6Bytes+SMAC源MAC地址48bits=6Bytes+Type域2Bytes)14Bytes和帧尾CRC校验部分4Bytes那么剩下承载上层协议的地方也就是Data域最大就只能有1500Bytes这个值我们就把它称之为MTU。

  链路层帧的大小  1500(不包括帧头、帧尾)

  UDP 包的大小就应该是 1500 - IP头(20) - UDP头(8) = 1472(Bytes)
  TCP 包的大小就应该是 1500 - IP头(20) - TCP头(20) = 1460 (Bytes)

TCP

tcp是面向字节流的 基本单位是报文段 可靠传输 首部开销20个字节 有拥塞控制和流量控制 支持点对点通信 全双工 

在这里插入图片描述

 URG 表明有紧急数据不用再缓存中排队

ACK 确认号有效 连接建立后所有传送的报文段ACK都是1

PSH 直接发送给应用进程 不用等缓存区填满

RST 释放连接重新建立

SYN 连接请求

FIN 释放连接

窗口大小 控制发送端的滑动窗口大小

tcp建立连接需要三次握手 断开连接需要四次挥手

三次握手

在这里插入图片描述

 第一次  syn为1 seq为随机第一个字节的序号  客户端进入syn_sent状态

第二次 服务器如果再listen状态下就能收到确认信息  同时发送 syn为1 ACK为1  seq为随机第一个字节的序号  ack表示希望下一个数据的第一个字节希望是a+1 服务器进入syn_recd状态

第三次 客户端收到后 发送ack为1 seq=a+1 ack=b+1 客户端进入established状态

服务器收到后也进入established状态

三次握手是为了保证客户端和服务器都确认 对方和自己的接收和发送都是每问题的

第一次 客户端知道自己的发送没问题   第二次服务器知道客户端的发送 自己的接收 自己的发送没问题  第三次客户端知道自己的接收 服务器的接收 发送没问题  然后服务器也知道客户端的接收没问题

挥手过程中 第三次可以携带数据

四次挥手

在这里插入图片描述

第一次 客户端发送fin为1 后进入fin_wait_1的状态 客户端本身就不继续发送正常的数据了

第二次 服务器发送ack为1后进入 close_wait 服务器就确认客户端不能继续发送正常的数据了

同时服务器还可以继续发送数据    客户端进入fin_wait_2的状态

第三次服务器发送fin为1 进入last_ack状态 服务器本身就不再发送数据了 

第四次 客户端收到fin后 进入time_wait状态 发送ack为1的确认报文段  time_wait状态经历2msl后进入closed    服务器收到确认后也进入closed

time_wait是为了防止ack报文丢失 导致服务器一直无法关闭

MSL是Maximum Segment Lifetime的英文缩写,可译为“最长报文段寿命”,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。

tcp有粘包和拆包的现象

因为流协议是没有界限的一串数据 根据tcp缓冲区的大小分包

在这里插入图片描述

解决办法

固定数据的大小  不够能用空位补全

加特殊分割符

加消息头 消息头大小固定 表明内容的大小

tcp保证可靠性传输

应答机制和累计确认 数据包校验 超时重传 重排序 流量控制和拥塞控制

应答机制和数据包校验 

就是每个包都有一个编号 收到之后发送ack确认收到这个包 

累计确认

发送确认收到了5  那么说明 1234包都已经收到了    如果多次收到某个包的确认则说明下一个包丢失了

超时重传

每个包发送都会有定时 超时一定时间没有收到确认就是重传  重传会把丢失的包重传

超时时间rto

和后面的包都重传 如果开启了sack 则重传丢失的包

快速重传

发了3次ack某个包 就要重传这个包了 

一般来说重传这个包和后面的包都重传 如果开启了sack 则重传丢失的包

流量控制

是双方都有缓存空间防止数据过多溢出 

拥塞控制

是网络中是否拥塞

流量控制和拥塞控制都是通过滑动窗口的大小来调整    滑动窗口大小就是一次性能发送数据的大小

 在这里插入图片描述

拥塞控制四种算法

慢开始

拥塞避免

快重传

快恢复

在这里插入图片描述

一个关键的值 ssthresh

传输轮次就是收到ack包的次数

慢开始

窗口大小按2的倍数指数变大 一开始从1开始

拥塞避免

进入到ssthresh时 窗口大小加1增大

发生超时重传时 sshthresh变成此时窗口大小的2分之一 重新慢开始 

快重传

发生重新确认包时(3次)迅速重传丢失的包

快恢复

sshthresh变成此时窗口大小的2分之一 从窗口大小的2分之一开始拥塞避免

UDP 

udp是面向报文的  无连接的 不可靠的 支持一对一、一对多、多对一和多对多的交互通信

tcp和udp的区别

网络层

协议有 ip arp rarp dhcp  nat icmp 

arp实现ip地址获取mac地址的协议

rarp实现硬件地址到ip地址的转换

dhcp可以使客户机自动获得服务器分配的ip地址和子网掩码

icmp控制报文协议 把错误信息封包传回主机   差错报告报文和询问报文

nat 内网ip转外网ip

IP

实现网络主机之间通信 实现网络地址和物理地址的转换 路由算法选择最设当的路径

IPv4协议头

子网掩码

子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。

子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
网络地址的划分

物理设备有路由器 路由器是更高交换机,作用在网络层,能识别ip地址 网关 当两个主机的网段不同时,之间的信息传输就要先经过对方的网关  一般由路由器作为网关 路由器一段可以是公网ip 另一端是内网ip

 DNS解析

ARP协议

RARP协议

DHCP

NAT

ICMP

IGMP

数据链路层

实现相邻结点与结点之间的传输 通过差错控制 流量控制使有差错的物理线路变成无差错的数据链路

封装成帧 把网络层数据报加头和尾 帧头有源mac和目的mac

透明传输

差错控制 有差错就丢弃

流量控制 

物理设备 交换机

交换机连接的主机可以在同个网段或者不在同个网段,但都在同个内网,交换机每个端口是一个冲突域,即每个端口可以同时发数据,由交换机缓存转发,作用在链路层 只能识别mac地址

物理层

实现计算机结点之间比特流的透明传输 是物理传输介质和物理设备的级别

物理设备有中继器(扩大信号) 集线器

中继器,集线器作用在物理层,集线器下连接的主机都是在同个网段下的,全部主机都在同个冲突域下

网络io模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值