网络协议相关知识

原文链接:https://javaguide.cn/cs-basics/network

OSI七层模型

  1. 应用层
  2. 表示层
  3. 会话层
  4. 传输层
  5. 网络层
  6. 数据链路层
  7. 物理层

TCP/IP 四层模型

  1. 应用层(HTTP,DNS,SSH)
  2. 传输层(TCP,UDP)
  3. 网络层(IP,NAT,ARP)
  4. 网络接口层(MAC,以太网)
OSI七层模型和TCP/IP四层模型对比

HTTP协议(应用层)

  • 位于应用层,基于传输层的TCP协议,主要是为 Web 浏览器与 Web 服务器之间的通信而设计的。
  • 无状态的协议,使用Cookie,Session等记住用户的状态。
HTTP1.0
  • 最早出现于1996年
HTTP1.1
  • 缓存处理, 提供了更多的缓存头用来控制缓存策略;
  • 引入range头域,允许只请求资源的一部分,支持了断点续传;
  • 引入更多错误状态码
  • 引入Host头域,可以访问同一IP地址的不同域名
  • 支持长连接,不用每次都要三次握手
HTTP2.0
  • 二进制分帧,所有的帧都采用二进制编码
  • 多路复用,每个数据流都可以拆分成很多互不依赖的帧,这些帧可以独立发送,接收端再组合起来。HTTP2.0的连接都是持久化的,每个域名一个连接。
  • 请求优先级,帧可以设置优先级
  • header压缩,HTTP1.1的header带有大量信息,且每次都要重复发送,HTTP2.0对此进行了压缩
  • 服务端推送,服务端可以对一个请求发送多个响应

TCP协议(传输层)

面向连接,可靠,基于字节流
基于字节流是指,TCP只处理二进制数据,是无法区分数据之间的关系的,为此,HTTP协议在每个数据头标记了数据的长度,以此区分不同的数据。

三次握手

为了确认两件事情,一是客户端的发送与接受功能是否正常;二是服务端的发送与接受能力是否正常。

  • 第一次握手,客户端发出消息,服务端接受到消息后,服务端确认了客户端的发送功能和服务端的接受功能正常;
  • 第二次握手,服务端发送消息,客户端接受到消息后,客户端确认了客户端的发送接受功能和服务端的发送接受功能正常;
  • 第三次握手,客户端发送消息,服务端接受消息后,服务端确认了客户端的接受功能和服务端的发送功能正常。
四次挥手

TCP是全双工通信,可以双向传输数据。

  • 第一次挥手,客户端发出FIN消息,服务端接受到消息后,确认客户端没有消息发出了;
  • 第二次挥手,服务端发出ACK消息,客户端接收到消息后,确认服务端知道了客户端不再发送消息的事实;
  • 第三次挥手,服务端发出FIN消息,客户端接收到消息后,确认服务端没有消息发出了;
  • 第四次挥手,客户端发出ACK消息,服务端接受到消息后,确认客户端知道了服务端不再发送消息的事实。
如何保证数据传输的可靠性
  1. 基于数据块传输 :应用数据被分割成 TCP 认为最适合发送的数据块,再传输给网络层,数据块被称为报文段或段。
  2. 对失序数据包重新排序以及去重:TCP 为了保证不发生丢包,就给每个包一个序列号,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据就可以实现数据包去重。
  3. 校验和 : TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
  4. 超时重传 : 当发送方发送数据之后,它启动一个定时器,等待目的端确认收到这个报文段。接收端实体对已成功收到的包发回一个相应的确认信息(ACK)。如果发送端实体在合理的往返时延(RTT)内未收到确认消息,那么对应的数据包就被假设为已丢失并进行重传。
  5. 流量控制 : TCP 连接的每一方都有固定大小的缓冲空间,TCP 的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议(TCP 利用滑动窗口实现流量控制)。
  6. 拥塞控制 : 当网络拥塞时,减少数据的发送。
流量控制

TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。
TCP协议会将待发送的数据拆分成数据包一个一个发送,并通过一个滑动窗口来控制发送的速率。这个窗口保证同一时刻内只有特定数量的数据包处于待发送状态,包含已经发送但未收到确认消息的数据包和即将发送的数据包。


发送窗口

接受窗口
拥塞控制
  • 流量控制是端到端的,而拥塞控制是全局性的,涉及到所有的路由器和网络。
  • TCP发送方会让自己的发送窗口取拥塞窗口和接收方接受窗口中较小的一个。
  • TCP的拥塞控制采取了四种算法,慢开始、拥塞避免、快重传和快恢复。

RPC(应用层)

RPC(Remote Procedure Call)又叫做 远程过程调用,它本身并不是一个具体的协议,而是一种调用方式 。
不同的RPC实现要么直接基于TCP,要么基于HTTP协议,总之,都是应用层的协议。核心功能有:

  1. 客户端:调用远程方法的一端
  2. 客户端Stub(桩):代理类,将你调用方法,类,参数等信息传递到服务端
  3. 网络传输:将信息传输到服务端
  4. 服务端Stub(桩):接受到请求后,指定对应的方法然后返回结果的类
  5. 服务端:提供远程方法的一端
Dubbo框架

Dubbo3提供了从服务定义、服务发现、服务通信到流量管控等几乎所有的服务治理能力,支持Triple协议(基于HTTP/2之上定义的下一代RPC通信协议)。

gRPC框架

Google开源的一个高性能、通用的开源RPC框架,基于HTTP/2协议设计,基于ProtoBuf序列化协议开发。

HTTP协议和RPC的区别
  • RPC是C/S架构,HTTP是B/S架构。RPC协议可能每家都不一样,而HTTP协议是一个通用的协议,是个浏览器就支持。
  • 服务发现,HTTP通过DNS服务查找服务器的IP地址和端口,RPC协议使用专门的中间服务来获取IP地址和端口。
  • 底层连接方式,HTTP协议再建立了底层TCP连接后一般会复用该连接,RPC协议会维护一个TCP连接池,用完再放回去,无太大区别。
  • 传输内容,一般包含消息头和消息体。HTTP协议传输的内容以字符串或json格式为主,RPC可以使用Protobuf序列化格式保存二进制数据,信息密度更高。
Protobuf序列化协议

采用Tag-Length-Value将每个字段编码成二进制数据,然后拼接成一个二进制字节流,信息密度十分紧凑。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容