计算机网络

计算机网络

OSI模型TCP/IP模型
应用层(DNS、HTTP、SMTP、POP、TELNET、FTP..) 应用层
表示层     
会话层   
传输层(TCP、UDP..)传输层
网络层(IP、ARP、RAR、ICMP..)网际层
链路层(PPP)网络接口层
物理层   

 

物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)

数据链路层:将比特组装成**帧**和点到点的传递(帧Frame)。点对点的协议PPP。三个基本问题:封装成帧、透明传输、差错检测。

网络层:负责数据包从源到宿的传递和网际互连(包PackeT)

传输层:提供端到端的可靠报文传递和错误恢复(段Segment)

会话层:建立、管理和终止会话(会话协议数据单元SPDU)

表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)

应用层:允许访问OSI环境的手段(应用协议数据单元APDU)

网络层

 IP地址

由网络号+主机号构成:

IPv4类别网络号    网络范围主机号IP地址范围  
A类8位,第一位固定为00-127    24bit1.0.0.0-127.255.255.255
B类16位,前两位固定为10  128.0-191.25516bit128.0.0.0-191.255.255.255 
C类24位,前三位固定为110      192.0.0-223.255.2558bit192.0.0.0-255.255.255.255
*D类**前四位固定为1110,后面为多播地址*  
*E类**前五位固定为11110,后面保留为以后使用*

 

10.0.0.0—10.255.255.255, 172.16.0.0—172.31.255.255, 192.168.0.0—192.168.255.255。(Internet上保留地址用于内部)

子网掩码:是一个32位二进制的值,可以将IP地址分离出网络地址和主机地址。

IP数据报

 

 

 ARP地址解析协议

1、首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系

2、当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址。

3:当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。

4:源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

广播发送ARP请求,单播发送ARP响应。

 ICMP网际控制报文协议

它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息,有两种:差错控制报文询问报文ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少八字节)和ICMP报文(属于ICMP报文的数据部分)。当IP报头中的协议字段值为1时,就说明这是一个ICMP报文(应用Ping)。

传输层

TCP

TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。

TCP如何保证可靠传输?

  • 确认和超时重传
  • 数据合理分片和排序
  • 流量控制
  • 拥塞控制
  • 数据校验

TCP报文格式

 

三次握手

客户端发送tcp报文,标记位syn为1表示请求建立连接,序号seq为x;

服务器端接收到,返回报文标志位syn ack为1,序号seq为y,确认号ack为x+1;

客户端接收到确认报文,返回报文标志位ack1,序号seq为x+1,确认号为服务器数据序号y+1.

为什么不能两次?

会超时重传,由于延迟之前发送的连接请求再次达到服务器端,服务器同意建立连接,浪费资源。

四次挥手

客户端发送报文FIN为1,seq为u;fin_wait_1

服务器端收到报文返回报文标记位ACK1,序号seq为v,确认号ack为u+1;close_wait

服务器发完数据,发FIN为1ACK为1,seq为w,确认号ack为u+1;fin_wait_2 last_ack

客户端收到发送报文返回ACK标记位1,序号seq为u+1,确认号ack为w+1。time_wait

等待2msl:服务器端在1MSL内没有收到客户端发出的ACK确认报文,就会再次向客户端发出FIN报文,如果客户端在2MSL内,再次收到了来自服务器端的FIN报文,说明服务器端由于各种原因没有接收到客户端发出的ACK确认报文。客户端再次向服务器端发出ACK确认报文,计时器重置,重新开始2MSL的计时;否则客户端在2MSL内没有再次收到来自服务器端的FIN报文,说明服务器端正常接收了ACK确认报文,客户端可以进入CLOSED阶段,完成“四次挥手”。
使本次连接中的的所有报文段消失,之后新的连接中不会出现旧的请求。


TCP流量控制

利用可变窗口进行流量控制,就是让发送方的发送速率不要太快,要让接收方来得及接收。

拥塞控制的几种方法

慢开始、拥塞避免、快重传(s丢失3收到4,s重发2的确认,b连续3次收到ack后发送3)、快恢复(当发送发连续接收到三个确认时,就执行乘法减小算法,把慢启动开始门限(ssthresh)减半,但是接下来并不执行慢开始算法,执行拥塞避免算法,使拥塞窗口缓慢增大)。

UDP

特征:

  • 无连接
  • 尽最大努力交付
  • 面向报文
  • 没有拥塞控制
  • 支持一对一、一对多、多对多的交互通信
  • 首部开销小

UDP首部(8字节)

源端口 目的端口 长度 校验和

应用层

 http协议

Request

  • 请求行:请求方法(get、head、put、post..)、
    URL请求路径、 
    协议版本
  • 请求头(名/值)
    Host(接受请求的服务器地址)、
    User-Agent(发送请求的应用程序名称)、
    Connection(连接相关的属性如:Keep-Alive)、
    Accept-CharSet(通知服务端可以发送的编码格式)、
    Accept-Encoding(通知服务端可以发送的数据压缩格式)、
    Accept-Language(通知服务端可以发送的语言)、
    Range(正文的字节请求范围,为断点续传和并行下载提供可能,返回状态码是206)  
    请求头部的最后会有一个空行,表示请求头部结束,接下来为请求正文,这一行非常重要,必不可少
  • 请求正文:可选部分,get请求就没有请求正文

Response

  • 状态行:协议版本、
    状态码(为3位数字,2XX表示成功,3XX表示资源重定向,4XX表示客户端请求出错,5XX表示服务端出错)、
    状态码描述
  • 响应头部:
    Server服务器应用程序软件的名称和版本
    Content-Type响应正文的类型(是图片还是二进制字符串) 
    Content-Length响应正文长度
    Content-Charset响应正文使用的编码
    Content-Encoding响应正文使用的数据压缩格式 
    Content-Language响应正文使用的语言 
    Content-Range正文的字节位置范围 
    Accept-Rangesbytes:表明服务器支持Range请求,单位是字节;none:不支持
  • 响应正文:正文的内容可以用gzip等进行压缩,以提升传输速率

请求方法
get方法用来获取已经被uri识别的资源,必要时可将查询字符串参数添加到URL末尾;
post方法用来传输实体的主体
区别:get用于信息获取,post用于修改服务器上的资源
           get请求数据附在url后,post放在报文实体里,post更安全
           get数据量由于url受限制,post大小无限制
head方法和get一样只是不返回报文的主体,用于确认uri的有效性和资源更新时间
put方法用来传输文件,要求在请求报文的主体中包含文件内容,然后保存在uri指定的位置

浏览器输入网址发生了什么
1. DNS域名解析,获取相应的IP地址
2. 浏览器向服务器发起tcp连接,三次握手建立连接
3. 浏览器发送http请求
4. 服务器收到请求,发送响应
5. 浏览器收到响应,读取内容,解析html、渲染得到页面

 

DNS原理
使用UDP
第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域) 的主域名服务器的地址。
第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
第五步:重复第四步,直到找到正确的纪录。
第六步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。

 

具体状态码
 1xx 信息性状态码
 2xx 成功状态码
    200 OK 请求被正常处理并返回
    203 no content 请求得到成功处理但是返回的响应报文中不含实体的主体部分(没有资源可以返回)
    206 patial content 客户端进行了范围请求,服务器成功执行这部分的get请求,响应报文中包含由content-range指定范围的的实体内容
 3xx 重定向
    301 永久重定向,请求的资源被分配了新的URL之后应该使用新的URL
    302 临时性重定向 本次使用新的,可能还要更改
    303 相对于302明确了要用get方法获取
    304 客户端发送附带条件,允许访问但是没有满足条件//? not modified 服务端资源无变化,定向到缓存
    307 和303一样遵从浏览器标准搞方法
 4xx 客户端错误
    400 请求报文存在语法错误
    401 未经许可,需要通过http认证
    403 服务器拒绝该次访问(权限出现问题)
    404 服务器端无法找到请求的资源
 5xx 服务器错误
    500 服务器执行请求时发生了错误,也可能是web应用存在bug或某些临时错误
    503 服务器超负载或在停机维护,无法处理请求
由于http协议是无状态的,所以无法从连接跟踪会话。于是出现cookie和session机制:

Cookie和Session的区别和联系

  • cookie的内容主要包括:名字,值,过期时间,路径和域。cookie数据存放在客户的浏览器上,session数据放在服务器上
  • cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session
  • session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE
  • 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie
  • Session不能区分路径,同一个用户在访问一个网站期间,所有session在任何一个地方都能访问到
  • 而cookie如果设置了路径参数,同一网站不同路径下的cookie互相是访问不到的,只能子路径访问父路径的cookie
cookie                                      session
存在客户端 存在服务器端
两种类型:有生命周期、无生命周期两种实现方式:依赖于cookie、url重写
父路径不能访问子路径的cookie  同一个session的窗口共享一个session
不可靠  可靠

http缺点

  • 通信使用明文,内容可能会被窃听 —— 加密通信线路
  • 不验证通信方,可能遭遇伪装 —— 证书
  • 无法验证报文的完整性,可能已被篡改 —— 数字签名

Http+加密+认证+完整性保护=Https

Https就是身披SSL(Secure Socket Layer,安全套接层)协议这层外壳的Http。当使用了SSL之后,Http先和SSL通信,SSL再和TCP通信。

https通信过程

1. 浏览器将自己支持的一套加密规则发送给网站
2. 网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。(证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息)
3. 浏览器获得网站证书之后,验证证书的合法性、使用约定好的算法计算握手消息并使用生成的随机数对消息进行加密,发给网站
4. 网站接受到后用私钥取出密码解密并验证HASH是否一致,使用密码加密一段消息发给浏览器
5. 浏览器解密并验证HASH一致则握手结束,之后数据都用随机密码和算法加密

https和http区别

  • https协议需要到ca申请证书,一般免费证书很少,需要交费。
  • http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
  • http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
  • http的连接很简单,是无状态的 。
  •  HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议, 要比http协议安全

RPC
what?
rpc即远程过程调用,两台服务器之间的应用提供的方法不在一个内存空间中不能直接调用,通过rpc让不同服务器的应用方法可以互相调用。

how?
rpc可以给予http协议实现,也可以在tcp协议上实现
三大角色:
1. Server:暴露服务的服务提供方
2. Client: 调用远程服务的服务消费方
3. Registry:服务注册与发现的注册中心

完整流程:
1. 消费方以本地调用方式调用服务->
2. client stub接收到调用后负责将方法参数组装成能够网络传输的消息体
3. client stub找到服务地址将消息发送到服务端
4. server stub收到消息后解码
5. server stub根据解码结果调用本地服务
6. 本地服务执行并将结果返回给serverstub
7. serverstub将返回结果打包成消息发送至消费方
8. clientstub收到消息进行解码
9. 服务消费方得到最终结果

使用到的技术:
动态代理生成client stub 和server stub
序列化将对象转为网络传输内容
NIO技术(netty框架)
https://blog.csdn.net/cdlwhm1217096231/article/details/90760282

https://www.jianshu.com/p/99a348440e79

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值