TCP/IP网络协议初识
目录
一、什么是协议?
协议就是两个或多个对象之间为了某个或多个需求而设置的约定,即在什么时间,遇到什么情况该做什么。
举例: 小强和小明约定周末一起去玩小霸王游戏机,但是如果遇上停电就去掏鸟窝。
二、什么是TCP/IP协议?
TCP/IP 协议就是为了满足世界上成千上万的网络设备的各种通信需求而设计的一套约定。
举例: 你要从某网站下载一部电影,如何实现呢?
首先网站服务器和你的电脑互相识别,需要 IP协议;
为了跨越几千公里的互联网找到一条通往你电脑的路径,需要路由协议;
为了片子数据传输不丢失乱序重复,需要 TCP协议;
另外你可以用FTP协议接收电影。单个协议就是单个约定,以TCP为例,
约定了通信时超时怎么办?
数据丢失怎么办?
乱序怎么办?
网络拥塞了怎么办? 等等。
三、TCP/IP为什么这么多协议?
不是协议多,而是需求多,每个协议都是从具体的实际需求中产生的。需求多了,问题就多,为了解决一个个的问题,而出现了一个个的协议。
举例:支付页面一般是https,因为安全需求;
组播协议出现是因为网络点播需求;
IP over AOS 出现是因为宇航员方便上网的需求等等。
四、TCP/IP协议为什么分层?
“分层”的思想可以应用到很多领域,它是复杂问题简单化的有效方法。
协议分层好处: 协议只需关注本层问题,直接利用下层提供的服务,同时向上层提供服务,并且每层的更改不会影响其他层。
举例:
经典四层模型: 应用层—>传输层—>网络层—>物理层(链路层)
五、TCP/IP协议如何入门?
要点1: 谨记“网络协议因需求而产生,以解决实际问题为目的”,因此学习某个协议一定要了解它的应用场景和提出目的。
要点2: 选一本好的入门教程。本人极力推荐谢希仁教授的《计算机网络》,本书概念清晰,思路明确,既不肤浅又不是很深入且面面俱到,现在已经出到第六版,本书阅读不得低于3遍。
要点3: 针对某个协议,深入理解其报文格式是学习的关键。协议程序化后就是“数据结构+算法”,报文格式就是“数据结构”。
要点4: 一定要动手实验,这可以加深对协议理解。比如可以用网络抓包(如wireshark)学习某个协议的算法,如ARP的发现过程,TCP的握手协议,TFTP的文件传输原理。还可以网络编程,如简单的网络攻击软件制作等。
六、TCP/IP 的分层:

七、各协议层打包和拆包过程:
在浏览器发送信息到服务的时候,在通信协议的过程中,会分为四层:
首先,是应用层(http协议),封装一些要传递的信息。
其次,到传输层(tcp协议), tcp协议对应用层数据进行打包。
然后,到网络层(ip协议),通过ip找到对应的服务器。
最后,到链路层(通过物理的介质传输数据)。
每一层都会对上一层进行打包。

八、浏览器访问网页的整个流程:

九、举例:网上购物的请求流程
1.各层间的走向
客户端(浏览器) —> 应用层 (http,https,DNS)—> 传输层(TCP, UDP) —> 网络层 (IP)—>物理层—> 服务器
—> 物理层—>网络层 —> 传输层 —> 应用层 —>具体的应用处理
2.具体的请求过程
你先在浏览器里面输入 https://www.kaola.com ,这是一个URL。浏览器只知道名字
是“www.kaola.com”,接着它打开地址簿去查找(DNS),查找到对应的 IP(106.114.138.24) 地址,
知道了具体的 IP 地址后,浏览器开始打包请求(HTTP):

经过应用层封装后,浏览器会将应用层的包交给下一层去完成,通过 socket 编程来实现。下一层是传输层(TCP, UDP),TCP 协议里面会有两个端口,一个是浏览器监听的端口,一个是电商的服务器监听的端口。操作系统往往通过端口来判断,它得到的包应该给哪个进程。

传输层封装完毕后,浏览器会将包交给操作系统的网络层。网络层的协议是 IP 协议。在 IP 协议
里面会有源 IP 地址,即浏览器所在机器的 IP 地址和目标 IP 地址,也即电商网站所在服务器的
IP 地址。

于是操作系统将 IP 包交给了下一层,也就是MAC 层。网卡再将包发出去。由于这个包里面是
有 MAC 地址的,因而它能够到达网关。
网关收到包之后,会根据自己的知识,判断下一步应该怎么走。网关往往是一个路由器,到某个
IP 地址应该怎么走,这个叫作路由表。

走到最后一个网关后,通过 IP 找到具体的机器,通过端口找到对应的应用进行处理该笔请求。
3.服务器端处理流程

参考资料:
①书籍《图解HTTP》
②极客时间|趣谈网络协议 --刘超
TCP/IP网络协议初识的更多相关文章
- 对TCP/IP网络协议的深入浅出归纳
前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没弄清楚.后来 我花了一些时间去了解这些网络协议,现在对TCP/IP网 ...
- 转:对TCP/IP网络协议的深入浅出归纳
转自:http://blog.jobbole.com/74795/ 前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没 ...
- 对TCP/IP网络协议的深入浅出归纳(转)
前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没弄清楚.后来 我花了一些时间去了解这些网络协议,现在对TCP/IP网 ...
- TCP/IP网络协议的通俗理解,SOCKET,HTTP,SOAP
TCP/IP,HTTP,SOAP等协议之区别 术语TCP/IP代表传输控制协议/网际协议,指的是一系列协议.“IP”代表网际协议,TCP和UDP使用该协议从一个网络传送数据包到另一个网络.把IP想 ...
- Linux学习(1)- TCP/IP网络协议基础
Linux学习(1)- TCP/IP网络协议基础 一.TCP/IP 简介 学习内容 TCP/IP(Transmission Control Protocol/Internet Protocol)是传输 ...
- TCP/IP网络协议基础
实验楼学习网络协议传送门 一.TCP/IP简介 TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议和网络协议的简称,它定义了电 ...
- TCP/IP网络协议
OSI七层模型 OSI采用了分层的结构化技术,共分七层,物理层.数据链路层.网络层.传输层.会话层.表示层.应用层. TCP/IP模型 OSI模型比较复杂且学术化,所以我们实际使用的TCP/IP模型, ...
- 初探计算机网络之TCP/IP网络协议
网络协议 在计算机诞生以来,从最原始的单机模式到现在多台计算机协同工作,形成计算机网络,从前很难想象的信息共享.多机合作.大规模计算在今天也早已成了现实.在早期,计算机网络需要解决的痛点,就是怎样 ...
- TCP/IP网络协议基础知识集锦[转]
引言 本篇属于TCP/IP协议的基础知识,重点介绍了TCP/IP协议簇的内容.作用以及TCP.UDP.IP三种常见网络协议相关的基础知识. 内容 TCP/IP协议簇是由OSI七层模型发展而来的,之所以 ...
随机推荐
- java 反射借助 asm 获取参数名称最优雅简单的方式
背景说明 最近写反射相关的代码,想获取对应的参数名称,却发现没有特别好的方式. jdk7 及其以前,是无法通过反射获取参数名称的. jdk8 可以获取,但是要求指定 -parameter 启动参数,限 ...
- [TimLinux] JavaScript 原生AJAX介绍
1. AJAX 异步JavaScript + XML,用于浏览器内部通过前端JavaScript语言操纵,与HTTP服务器进行连接通信的技术. 2. XMLHttpRequest对象 从IE7+,以及 ...
- [TimLinux] django context_processor介绍
1. context django里面 render 函数,HttpResponse,都有一个参数,context={},这个参数用于将视图层处理得到的数据传递到模板层. 2. context_pro ...
- 使用 Python 验证数据集中的体温是否符合正态分布
数据集地址:http://jse.amstat.org/datasets/normtemp.dat.txt 数据集描述:总共只有三列:体温.性别.心率 #代码 from scipy import st ...
- HDU-1595Find the longest of shortest(最短路径的最长路Dijkstra+记录路径)
Marica is very angry with Mirko because he found a new girlfriend and she seeks revenge.Since she do ...
- CapSupport 的使用
CapSupport 是在CAP的操作上做了一些封装 目的是让事务同时执行或者同时回滚 startup services.AddCapSupport((optaion) => { optaion ...
- LR静态存储/动态存储/指针变量脚本说明
在一次教程学习中,看到该知识点并记录了下来,希望与大家共同探讨学习. 一.静态存储与动态存储 静态存储变量通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束.动态存储变量是在程序执行过 ...
- HTML 02
form表单 能够获取用户输入(包括输入, 选择和上传文件) 将用户的输入内容全部发送给后端 参数 action 向何处提交 不写, 默认朝当前页面所在地址提交数据 全写路径 (https://www ...
- Android中实现异步轮询上传文件
前言 前段时间要求项目中需要实现一个刷卡考勤的功能,因为涉及到上传图片文件,为加快考勤的速度,封装了一个异步轮询上传文件的帮助类 效果 先上效果图 设计思路 数据库使用的框架是GreenDao,一个 ...
- 解决oracle11g数据库监听连接不上问题
java连接数据库报错12514,无法识别监听,但是PL客户端可以连接 oracle 监听 添加ip 同时修改tnsnames.ora.listener.ora将这两个文件中HOST后面的主机都修改为 ...