文档章节

协议简史:如何学习网络协议?

Java干货分享
 Java干货分享
发布于 01/19 22:14
字数 1291
阅读 34
收藏 0

大学时,学到网络协议的7层模型时,老师教了大家一个顺口溜:物数网传会表应。并说这是重点,年年必考,5分的题目摆在这里,你们爱背不背。

考试的时候,果然遇到这个问题,搜索枯肠,只能想到这7个字的第一个字,因为这5分,差点挂科。

后来工作面试,面试官也是很喜欢七层模型,三次握手之类的问题,但是遇到这些问题时,总是觉得很心虚。

1. 协议分层

四层网络协议模型中,应用层以下一般都是交给操作系统来处理。应用层对于四层模型来说,仅仅是冰山一角。海面下巨复杂的三层协议,都被操作系统给隐藏起来了,一般我们在页面上发起一个ajax请求,看见了network面板多了一个http请求,至于底层是如何实现的,我们并不关心。

应⽤层
运输层
网络层
链路层

下面重点讲一下运输层和网络层

1.1. 运输层的两兄弟

运输层有两个比较重要的协议。tcp和udp。

大哥tcp是比较 严谨认真、温柔体贴、慢热内向 的协议,发出去的消息,总是一个一个认真检查,等待对方回复和确认,如果一段时间内,对方没有回复确认消息,还会再次发送消息,如果对方回复说你发的太快了,tcp还会体贴的把发送消息的速度降低。

弟弟udp则比较可爱呆萌、调皮好动、不负责任的协议。哥哥tcp所具有的特点,弟弟udp一个也没有。但是 有的人说不清哪里好 但就是谁都替代不了 ,udp没有tcp那些复杂的校验和重传等复杂的步骤,所以它发送消息非常快,而且并不保证对方一定收到。如果对方收不到消息,那么udp就会呆萌的看着你,笑着对你说: 我已经尽力了 。一般语音而视频数据都是用udp协议传输的,因为音频或者视频卡了一下并不影响整体的质量,而对实时性的要求会更高。

1.2. 运输层和网络层的区别

运输层关注的是端到端层面
网络层关注两点之间的层面
网络层并不保证消息可靠性

从下图tcp, udp, ip协议中,可以发现

  • 传输层的tcp和udp都是有源端口和目的端口,但是没有ip字段
  • 源ip和目的ip只在ip数据报中
  • 理解各个协议,关键在于理解报文的各个字段的含义

1.3. ip和端口号的真正含义

上个章节讲到运输层和网络层的区别,其中端口号被封装在运输层,ip被封装到网络成,

那么端口号和ip地址到底有什么区别呢?

  • ip用来用来标记主机的位置
  • 端口号用来标记该数据应该被目标主机上的哪个应用程序去处理

1.4. 数据在协议栈的流动 封装与分用

  • 当发送消息时,数据在向下传递时,经过不同层次的协议处理,打上各种头部信息
  • 当接受消息时,数据在向上传递,通过不同的头部信息字段,才知道要交给上层的那个模块来处理。比如一个ip包,如果没有头部信息,那么这个消息究竟是交给tcp协议来处理,还是udp来处理,就不得而知了

想免费学习Java工程化、分布式架构、高并发、高性能、深入浅出、微服务架构、Spring,MyBatis,Netty源码分析等技术的朋友,可以加群:479499375,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家,欢迎进群一起深入交流学习。

2. 深入阅读,好书推荐

有人说这本书太厚,偷偷告诉你,其实这本书并厚,因为这本书的后面的30%部分都是附录,这本书的精华是前50%的部分
这两本图解的书,知识点讲的都是比较通俗易懂的,适合入门
这本书,让你知其然,更知其所以然
这两本书,会让你从不同角度思考协议
如果你看了很多书,却从来没有试过网络抓包,那你只是懂纸上谈兵罢了。你永远无法理解tcp三次握手的怦然

© 著作权归作者所有

共有 人打赏支持
Java干货分享
粉丝 195
博文 112
码字总数 337895
作品 0
深圳
私信 提问
00-《趣谈网络协议》之开篇词学习笔记

出于个人兴趣,本人在极客时间购买了网易研究院云计算技术部的首席架构师刘超老师关于计算机网络的专栏之《趣谈网络协议》,由于知识版权原因,不能直接分享刘超老师的原文,所以,我会在每次...

飞鱼说编程
2018/07/18
0
2
用进化的观点学习网络协议

一般而言,我们比较习惯于用分层的观点来学习网络协议,这也是大学的教学方法。然而这种方式在前期如果有个地方理解不了只有死记硬背了。如果我们带着问题,并且试图去解决这些问题,最终恍然...

晨曦之光
2012/04/10
53
0
180529 简书互联网优质内容推荐日报

【微信研究】 微信发展简史:微信成功的必然和偶然 作者:行者慎思 微信是如何一步步变成今天这个样子的? 微信在上线433天的时候,用户数达到1亿,上线2年的时间,用户数达到3亿,这是非常可...

简书大婶
2018/05/29
0
0
01-《趣谈网络协议》之为什么要学习网络协议?

一、协议 1.协议的定义 简单说协议就是一个规则,保证沟通交流双方可以互相听懂、理解或者可以双方合作可以顺利进行的一个约定和规则。 2.生活中例子 (1)有一种叫“程序猿”的物种,敲着一种...

飞鱼说编程
2018/07/21
0
0
TCP/IP网络协议的通俗理解,socket,http,soap

前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑。主要是因为对网络协议不太熟悉,对一些概念也没弄清楚。后来我花了一些时间去了解这些网络协议,...

superuser
2012/11/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

学习设计模式之路

https://java-design-patterns.com/patterns/ https://www.oodesign.com/ https://www.programering.com/a/MTNxAzMwATY.html https://design-patterns.readthedocs.io/zh_CN/latest/ https:/......

晨猫
今天
1
0
JDK1.8 jar包说明

JDK 1.8 lib:access-bridge-64.jarcharsets.jarcldrdata.jardeploy.jardnsns.jarjaccess.jarjavawa.jarjce.jarjfr.jarjfxrt.jarjfxswt.jarjsse.jarlocaledata.jar......

冷基
今天
1
0
判断用户的icloud是否开启【Swift4.2】

使用icloudkit存储用户私人数据时,必须判断用户的icloud是否开启【Swift4.2】 func isICloudContainerAvailable()-> Bool { if FileManager.default.ubiquityIdentityToken != ni......

叶落花开
今天
2
0
今天的学习

1、执行git add *命令就把改动提交到了暂存区,执行git pull命令将远程仓库的数据拉到当前分支并合并,执行git checkout [branch-name]切换分支 2、执行git commit -m '说明' 命令就把改动提...

墨冥
昨天
0
0
Android4.4 及以下TextView,Button等控件使用矢量图报错

1 问题描述 最近项目开发中,图标资源我尽量使用了矢量图,然而配置了基本的兼容设置,程序在低版本中运行还是出现了问题。 xml布局文件中,在TextView中使用矢量图,比如android:drawableS...

newtrek
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部