计算机网络基础

计算机网络

http和https

  • http运行在TCP之上,明文传输,客户端与服务器都无法验证对方身份(不安全)。
  • https是身披SSL外壳的http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的http。
  • 端口不同,http用80端口,https443端口
  • 资源消耗:https要加密解密,更消耗cpu和内存
  • 开销:https通信需要证书,而证书需要像认证机构购买
  • https的加密机制是共享密钥加密和公开密钥加密并用的混合加密机制

  1. Http是应用层协议
  2. 是无状态的,也就是说每一次http请求之间相互独立,没有联系,服务端1不知道客户端具体状态
  3. 一次http请求基本流程是:在建立TCP连接后,客户端向服务端发起一次请求request,而服务端收到以后返回给客户端一个响应response,所以我们看到http请求一般分为请求和响应两个部分
  4. http承载与tcp之上,有时也承载与TLS和SSL之上,这个时候,就是https
  5. http请求由三部分:
    • 请求行:请求行一般包括请求方法,url,协议版本
    • 请求报头:包括普通报头,请求报头,响应报头
      • host:请求资源的域名,主机号,端口号
      • accept:可接受数据格式
      • cookie
      • accept-encoding
    • 请求正文
  6. Http响应也是三部分:
    • 状态行:由http协议1版本号,状态码,状态消息
    • 响应报头
      • allow:服务器支持哪些方法
      • date
      • set-cookie
    • 报文主体

Cookie和Session

  • 用于跟踪用户会话,cookie通过在客户端记录信息确认用户身份,session通过在服务端记录信息确认用户身份
    cookie
  • 当客户端请求服务器时,服务器就用response向客户端浏览器版发一个cookie,客户端浏览器会把cookie保存起来
  • 当浏览器再次请求该网站时,浏览器就把请求的网址连同cookie一起提交给服务器,服务器检查cookie,以此来辨认用户状态
  • cookie的安全性:http时无状态的,不安全的,使用http协议传送cookie容易被截获,可以设置cookie的secure属性为true,浏览器只会在https和ssl协议中传输cookie
  • 缺点:
    • 数量和长度有限制
    • 安全性问题,被拦截
    • 有些状态不能保存在客户端,比如为了防止重复提交订单,需要在服务器端保存一个计数器

session

  • 客户端访问浏览器的时候,服务端把客户端的信息以某种形式记录在服务器上。当再次访问的时候只需从该session中查找用户状态
  • 如果说cookie机制是检查客户身上的“通行证”来确认客户身份的话,那么session机制就是通过检查服务器上的“客户明细表”来确认客户身份,session相当于在服务器上建立了一份客户档案
  • session有一个超时时间,为了防止溢出,服务器会把长时间没有活跃的session从内存中删除

两者区别

  • cookie存放在客户端浏览器,session存放在服务器端
  • cookie不是很安全,考虑到安全的话用session
  • session会在一定时间保存在服务器,考虑到减轻服务器性能,应当使用cookie
  • 单个cookie保存的数据不超过4K,很多浏览器都限制一个站点最多保存20个cookie

session依赖cookie使用

  1. 通过cookie储存一个session_id,然后具体数据保存在session中,下次请求的时候,会把这个session-id携带上,服务器根据session-id在session库中获取用户的session数据

对称加密和非对称加密

  • 对称加密:加密解密使用同一个密钥,存在的问题是密钥的发送,如何安全的把密钥发给对方。
  • 非对称加密一对公私钥,公钥在网上发布。发送密文时用对方的公钥进行加密,然后接受方用私钥进行解密。
  • 非对称加密比较慢,所以一般信息用对称加密,对称加密使用的密钥用非对称加密发送。

TCP的三次握手

  • 1.我要和你建立连接;2.你真的要和我建立连接吗;3.我真的要和你建立连接
  • 第一次:client将标志位SYN置为1,随机产生一个seq=j,然后发送给Server,Client进入SYN_SENT状态。
  • 第二次:Server收到数据包后,检查标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=j+1,随机产生一个seq=k,然后SYN=1,ACK=1,ack=j+1,seq=k发送给Client
  • 第三次:收到确认后,检查ack是否为j+1,ACK是否为1。都符合后把这数据包发给Server,Server检查ack是否为k+1,ACK是否为1。正确就建立连接
  • seq是序号,ack是确认序号(值为上一个seq+1)
  • 检查第一次的SYN,检查第二次的ACK,ack。检查第三次的ACK,ack。
  • 为什么三次握手:为了防止已失效的连接请求报文又突然传递服务器。A给B的请求由于网络延时凉了,很久时候B收到了就向A发送确认连接。但A已经不想传输了就不管他。B就傻傻的等,浪费了时间资源。(如果是两次握手,服务器收到已经失效的连接请求就进入了established状态,但此时客户端早就进入了closed状态,服务端会一直等下去,浪费服务端资源)
    方便记忆
  • SYN建立连接,seq顺序号码,ACK确认,ack确认号码
  • 第一次第二次都有请求建立连接,所以传了SYN和seq
  • 第二次和第三次都有确认连接,所以传了ACK和ack来确认上一个连接
  • ack是用来检查上一个seq是否正确的

SYN攻击
攻击客户端在短时间内伪造大量IP,向服务器端发送SYN请求连接,服务器就一直不断重发,这些伪造的SYN包长时间占用未连接队列,正常的SYN请求被丢弃
image

TCP四次挥手

  • 我要和你断开;好吧断吧;我也要和你断开;好吧断吧
  • 第一次:Client发送FIN=M,用来关闭Client到Server的数据传输,Client进入FIN-WAIT1状态
  • 第二次:Server收到FIN,发送一个ack=M+1。此时tcp处于半关闭
  • 第三次:Server发送一个FIN给Client,用来关闭Server到Client的传输
  • 第四次:CLient收到FIN后,发送ack=N+1
    image
  • 为什么最后TIME_WAIT有一个2MSL才返回CLOSE状态:网络可能会有延迟,最后一个ack可能丢失,TIME_WAIT状态是用来重发可能丢失的ack报文

TCP和UDP

  • tcp面向连接,必须双方建立可靠连接才会收发数据。udp不建立可靠连接,无需维护连接状态,即不可靠。
  • TCP信息包头20字节,UDP8字节
  • TCP面向字节流的,UDP面向报文的
  • TCP只能一对一传输,UDP可以一对一,一对多,多对一,多对多。
  • TCP有流量控制,拥塞控制。UDP不关注网络状况。
  • TCP通过流模式传输数据。UDP通过数据报模式传输数据
  • TCP保证数据的正确性,不丢包,不重复。UDP只保证最大交付,不保证可靠性。
  • TCP适合网络负担不大(他需要好网),可靠性要求高的场景。UDP适合网络负担相应高,可靠性要求不高的场景。
TCPUDP
可靠连接,三次握手不可靠连接
数据准确。慢,效率低不准确,快
应用场景:HTTP,FTP,SMTP,POP3,Telnet,SSHqq语音,qq视频,DNS,RIP表的更新
全双工的可靠信道不可靠信道
  • 单工:只支持数据在一个方向的传输,例如电视,广播。
  • 半双工:允许在两个方向传输,但是某一时刻只允许数据在一个方向传输,比如对讲机
  • 全双工:允许数据同时在两个方向传输(两个单工的结合),比如电话。
  • 全双工,半双工,单工是面向连接才有的说法

TCP十一种状态

三次握手中的状态

在这里插入图片描述
LISTEN
服务端状态,应用程序打开监听端口,处理来自客户端TCP端口的连接
SYN_SENT
客户端状态,客户端发送SYN标记主动建立连接,此时处于SYN_SENT
SYN_RECV
服务端状态,服务端收到SYN后会发送SYN和ack确认到客户端,此时状态为SYN_RECV,如果发现有很多SYN_RECV状态,可能是受到了SYN Flood的Dos攻击
ESTABLISHED
客户端回复正确的ack后,就建立了连接,客户端和服务端都进入ESTABLISHED状态。

四次挥手中的状态

在这里插入图片描述
FIN_WAIT1
客户端状态,客户端调用close(),TCP发出FIN标记主动关闭连接,然后进入FIN_WAIT1等待远程TCP连接中断或者确认
CLOSE_WAIT
服务端状态,被动关闭状态,服务器接收到FIN后,就发送ack回应客户端
FIN_WAIT2
半关闭状态,客户端接收ack确认后,进入FIN_WAIT2
LAST_ACK
服务器发送FIN关闭,然后进入LAST_WAIT
TIME_WAIT
客户端接受到服务器端发送的FIN后,就发送ACK,并进入TIME_WAIT状态,之后主动进入CLOSED状态
CLOSED
服务器端接收到客户端传过来的ack后,进入CLOSED状态。

TCP如何保证传输可靠性

  • 数据包校验:目的是检测数据在传输的过程中的任何变化,若校验包出错,则丢失报文,这时TCP发送端超时后重发数据
  • 对失序数据包重新排序:TCP报文段作为IP数据报来传输,IP数据报可能会失序,此时TCP对失序数据重新排序
  • 丢弃重复数据
  • 应答机制:当TCP收到来自TCP连接另一端的数据,他将发送一个确认
  • 超时重发:TCP发出数据好,他启动一个定时器,等待目的端确认收到报文。如果不能及时收到一个确认,将重发这个报文段
  • 流量控制:TCP连接每一方都有固定大小的缓冲空间,TCP接收方只允许另一端发送接收缓冲区所能接纳的数据。(这可以防止快的主机导致慢的主机缓冲区溢出)。TCP的流量控制协议是可变大小的滑动窗口协议

拥塞控制

  • 拥塞控制是一个全局性的过程,流量控制指点对点通信量的控制
  • 主要方法
    • 慢启动,不要一开始就发送大量的数据,先探测一下网络的拥塞程度,由小到大的逐渐增加拥塞窗口的大小
    • 拥塞避免:让拥塞窗口缓慢增加,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,这样拥塞窗口按线性缓慢增长
    • 快重传:接收方在收到失序的报文后就立即发出重复确认,而不是等到自己发送数据的时候捎带确认
    • 快恢复:当发送方连续收到三个重复确认,就执行乘法减小

DOS攻击和DDOS攻击

  • DOS拒绝服务,攻击者向被攻击者发送大量虚假的IP请求,被攻击者收到请求后返回确认信息,等待攻击者确认。由于攻击者的请求是虚假的,所以服务器接收不到返回的确认信息,在一段时间服务器处于等待状态,等待超时后,攻击者再次请求。这样最终服务器资源耗尽。
  • DDOS分布式拒接服务攻击:攻击者控制多个主机发起DOS攻击
  • DDOS预防(无法根治,除非不使用TCP)
    • 限制同时打开SYN半连接的数目
    • 缩短SYN半连接的Time Out时间
    • 关闭不必要的服务

Get和Post

  • GET一般用来从服务器获取数据,POST用来更新服务器数据
  • Get使用URL和Cookie传参,Post将数据放在request body中
  • GET的数据长度有限制(RL有长度限制),而POST没有
  • POST安全,因为GET的数据以明文显示在URL上
  • GET只能进行URL编码,POST能进行多种编码
  • GET效率高

URL编码

  • 问号前边的部分叫URL,问号后面的部分叫queryString查询字符串,
  • URL三部分
    • 协议
    • 存有该资源的主机IP地址
    • 主机资源的具体地址,文件目录名
  • 第一部分第二部分用://隔开,第二第三部分用/隔开
  • URL编码:产生歧义的字符用URL编码,一个%加上两个十六进制(一字节)(= &都有歧义)

从输入网址到获取页面

  • 浏览器查询DNS,获取域名对应的IP地址
  • 获取IP地址后,浏览器向服务器请求建立连接,发起三次握手
  • TCP/IP连接建立,浏览器向服务器发送HTTP请求

SQL注入

  • 通过把SQL命令插入web表单中,页面请求的查询字符串中
  • 比如登录页面,输入用户名的时候输入 or 1=1 – ,or后面一定为正确,–是注释
  • 避免:使用正则表达式过滤传入的参数

image

  • 应用层:FTP(文件传输),Telnet(BBS),SMTP(发邮件),HTTP(网页),POP3(收邮件),DNS

  • 传输层:TCP/UDP

  • 网络层:ARP,ICMP(),IP

  • qq网页访问使用的是传输层的UDP

TCP对应的常见应用层协议

  • FTP:文件传输协议,21端口
  • TElnet:远程登录的端口,比如BBS,23端口
  • SMTP:简单邮件传送协议,25端口
  • POP3:和SMTP对应,POP3用于接收邮件,110端口(只要有相应的使用POP3协议的程序 如outlook,就可以不用web登录邮箱,直接用邮件程序就能收到邮件)
  • HTTP:从Web浏览器传输超文本到本地浏览器的传送协议

UDP对应应用层协议

  • DNS:域名解析服务,将域名地址转换为IP地址,53端口
  • SNMP:简单网络管理协议,161端口
  • TFTP:简单文件传输协议,69端口
    image

网络层的ARP协议

  • 完成IP地址与物理地址的映射
  • 每台主机都会在自己的ARP缓冲区建立一个ARP列表,表示IP和MAC地址的对应关系
  • 当源主机需要向目标主机发送数据,会先检查自己的ARP列表是否有该IP对应的MAC地址,如果有就直接发向这个MAC地址
  • 如果没有,就向本地网段发起ARP请求广播包,查询这个目的主机对应的MAC地址(广播包里包括源主机IP,源主机MAC,目标主机IP),网络中的所有主机收到ARP请求后就检查自己的IP是否和请求包里的IP一致,一致就吧源主机的两个地址更新到自己的ARP列表中,并向源主机发送响应数据包
  • 然后源主机拿到响应数据包后也更新自己的ARP列表

ping和ICMP

  • ping用来探测主机到主机之间时候可以通信,ping使用的是ICMP协议
  • ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间收到应答,则认为可达
  • ICMP是网络层协议,通过IP协议发送

IP地址分类

  • A类地址:
    • 1字节网络地址+3字节主机地址,网络地址最高位是0
    • 范围1.0.0.0-127.255.255.255.255 (127是01111111,八个1是255)
    • 子网掩码 255.0.0.0
  • B类地址
    • 2字节网络地址+2字节主机地址,网络地址最高位为10
    • 范围128.0.0.0-191.255.255.255
    • 子网掩码255.255.0.0
  • C类地址
    • 3字节网络地址+1字节主机地址,网络地址最高位110
    • 范围192.0.0.0-223.255.255.255
    • 子网掩码255.255.255.0
  • D类地址
    • 最高位是1110
    • 范围224.0.0.0-239.255.255.255
  • 127是011111111;128是10000000;
  • 191是10111111;192是11000000;
  • IP地址和物理地址:网络层和以上使用IP地址;数据链路层和物理层使用物理地址

常见响应短语

  • 1**:请求处理中,请求已被接受正在处理
  • 2**:请求成功,被成功处理
    • 200 OK
  • 3**:重定向,要完成请求必须进一步处理
    • 301永久性转移
    • 302暂时性转移
    • 304已缓存
  • 4**:客户端错误,请求不合法
    • 400,bad Request请求有语法错误
    • 403,拒绝请求
    • 404,客户端访问的页面不存在
  • 5**:服务器端错误,服务器不能处理合法请求
    • 500,服务器内部错误
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值