浅析TCP/IP协议
浅析TCP/IP协议
0x00 什么是TCP/IP协议?
想一想人与人之间交流需要什么?我们是不是要掌握一种我们都能体会到对方意思的语言。那么计算机与网络设备之间进行通信,是不是不同设备之间是不是也要确定一种让两者能够通信的方法。不同的硬件,不同的操作系统,等等不同的设备,他们想要通信,必须要有一种规则来保证它们之间能够通信。而这种规则就是协议。
很多人都认为TCP/IP协议指的是TCP和IP这两种协议,也有人认为TCP/ IP 是在 IP 协议的通信过程中,使用到的协议族的统称。但我认为其实不是这样,因为TCP(传输控制协议)和IP(传输控制协议)都属于一个协议家族,而他们就是这个家族中最先出生的。同时也是这个协议家族的最核心的协议。所以就用TCP/IP协议来代表这个协议家族。它通称为TCP/IP协议族,简称为TCP/IP。又因为网络通讯协议采用分层的结构,各个层次配合完成工作,和计算机中的堆栈很相似,所以亦被称为TCP/IP协议栈。
## 0x01 TCP/IP参考模型
首先来了解一下OSI模型,OSI模型(开放式系统互联模型), 是一种概念模型,由国际标准化组织提出,一个试图将世界上各种计算机互连为网络的标准框架。共分为七层:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。如下图所示。

下面来看 TCP/IP参考模型,它是一个抽象的分层模型,在这个模型中,所有的TCP/IP系列网络协议都被归类到4个抽象的“层”中(分别是:应用层,传输层,网络互连层,网络访问(链接)层)。每一抽象层创建在低一层提供的服务上,并且为高一层提供服务。 完成某些特定的任务需要众多的协议协同工作,这些协议分布在模型的不同层。 TCP/IP参考模型为TCP/IP协议栈制作。其中IP协议只关心如何使得数据能够跨越本地网络边界的问题,而不关心如何利用传输媒体,数据如何传输(当作黑盒处理)。整个TCP/IP协议栈则负责解决数据如何通过许许多多个点对点通路(一个点对点通路,也称为一“跳”, 1 hop)顺利传输,由此不同的网络成员能够在许多“跳”的基础上创建相互的数据通路。

把TCP/IP协议族中的协议对照OSI七层模型,如下图示,


而通常人们认为OSI模型的最上面三层(应用层、表示层和会话层)在TCP/IP组中是一个应用层。 网络传输协议能够大致匹配到一些厂商喜欢使用的固定7层的OSI模型。然而这些层并非都能够很好地与基于IP的网络对应。

不难看出,OSI更加抽象,注重功能,而TCP/IP则更加注重与功能的实现。
0x02 TCP/IP的分层管理
把 TCP/IP 层次化是很有必要的。比如说,如果只有一个协议,当某个地方需要改变设计时,那我们就必须把所有部分替换掉。而分层之后呢,我们的协议分为几个层面,让每个层面有专门的协议去负责,这样们既可以做到详细和完整,又可减轻工作量,如我们要修改协议,我们不需要将所以的协议都改,只需要修改我们需要的部分。
TCP/IP 协议族各层的作用如下。
应用层
该层包括所有和应用程序协同工作,利用基础网络交换应用程序专用的数据的协议。
应用层是大多数普通与网络相关的程序为了通过网络与其他程序通信所使用的层。
数据从网络相关的程序以这种应用内部使用的格式进行传送,然后被编码成标准协议的格式。一旦从应用程序来的数据被编码成一个标准的应用层协议,它将被传送到IP栈的下一层。
TCP/IP 协议族内预存了各类通用的应用服务。
在应用层上有一些特定的程序。它们提供直接支持用户应用的服务。如:HTTP(万维网服务)、FTP(文件传输)、SMTP(电子邮件)、SSH(安全远程登陆)、DNS(名称<-> IP地址寻找)等
传输层
- 传输层(transport layer)的协议,能够解决诸如端到端可靠性(“数据是否已经到达目的地?”)和保证数据按照正确的顺序到达这样的问题。
- 传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。
- 在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据报协议)。
- TCP协议是一个面向连接的、可靠的协议。它将一台主机发出的字节流无差错地发往互联网上的其他主机。在发送端,它负责把上层传送下来的字节流分成报文段并传递给下层。在接收端,它负责把收到的报文进行重组后递交给上层。TCP协议还要处理端到端的流量控制,以避免缓慢接收的接收方没有足够的缓冲区接收发送方发送的大量数据。
- UDP协议是一个不可靠的、无连接协议,主要适用于不需要对报文进行排序和流量控制的场合。
网络层(又名网络互连层)
- 网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。
- 与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。
- 为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。
网络互连层定义了分组格式和协议,即IP协议(Internet Protocol)。网络互连层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。除此之外,网络互连层还需要完成拥塞控制的功能。
链路层(又名数据链路层,网络接口层)
- 网络访问(链接)层实际上并不是因特网协议组中的一部分,但是它是数据包从一个设备的网络层传输到另外一个设备的网络层的方法。
- 给其上层-网络互连层一个访问接口,以便在其上传递IP分组。
- 用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。
- 硬件上的范畴均在链路层的作用范围之内
0x03 参考资料
[1] TCP/IP四层模型
[2] TCP/IP协议
[3] 互联网协议套件
[4] 图解HTTP (图灵程序设计丛书) [日]上野 & 宣
浅析TCP/IP协议的更多相关文章
- 浅析TCP/IP 协议
TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族. TCP/IP协议模块关系 从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层.网络层.传输层.应用层 ...
- 计算机网络通信TCP/IP协议浅析 网络发展简介(二)
本文对计算机网络通信的原理进行简单的介绍 首先从网络协议分层的概念进行介绍,然后对TCP.IP协议族进行了概念讲解,然后对操作系统关于通信抽象模型进行了简单介绍,最后简单描述了socket 分层的 ...
- 门面模式的典型应用 Socket 和 Http(post,get)、TCP/IP 协议的关系总结
门面模式的一个典型应用:Socket 套接字(Socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元.它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息: 连接使用的 ...
- OSI七层模型详解 TCP/IP协议
总结 OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 表示层 数据格式化,代码转 ...
- TCP/IP协议(二)tcp/ip基础知识
今天凌晨时候看书,突然想到一个问题:怎样做到持续学习?然后得出这样一个结论:放弃不必要的社交,控制欲望,克服懒惰... 然后又有了新的问题:学习效率时高时低,状态不好怎么解决?这也是我最近在思考的问题 ...
- TCP/IP协议(一)网络基础知识
参考书籍为<图解tcp/ip>-第五版.这篇随笔,主要内容还是TCP/IP所必备的基础知识,包括计算机与网络发展的历史及标准化过程(简述).OSI参考模型.网络概念的本质.网络构建的设备等 ...
- TCP/IP协议三次握手与四次握手流程解析
原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议三次握手与四次握手流程解析 TCP/IP协议的详细信息参看<TCP/IP协议详 ...
- 【原创】技术往事:改变世界的TCP/IP协议(珍贵多图、手机慎点)
1.前言 作为应用层开发人员,接触最多的网络协议通常都是传输层的TCP(与之同处一层的另一个重要协议是UDP协议),但对于IP协议,对于应用程序员来说更多的印象还是IP地址这个东西,再往深一点也就很难 ...
- HTTP协议—— 简单认识TCP/IP协议
大学没读计算机专业,所以很多的专业知识都不知道.既然已经从事了IT这个行业,就势必要去了解下网络底层,虽然实际工作中这些东西用不到.高楼大厦,起于平川.不积跬步,无以至千里,不积小流,无以成江海.我现 ...
随机推荐
- ODT(区间覆盖问题)
解释:先留坑 题目:https://www.cometoj.com/contest/73/problem/D?problem_id=4120 #include<bits/stdc++.h> ...
- 线程中start与run方法的主要区别
区别一: 在于当程序调用start方法一个新线程将会被创建,并且在run方法中的代码将会在新线程上运行, 然而在你直接调用run方法的时候, ...
- Java接口和抽象类区别
1.抽象类 [public] abstract class ClassName { abstract void fun(); } extends 包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有 ...
- 吴裕雄--天生自然PYTHON学习笔记:解决ElementNotInteractableException: Message: element not interactable
submit=self.wait.until(EC.element_to_be_clickable((By.ID,'loginAction'))) 2.永久覆盖element来保证自己的element ...
- MOOC(7)- case依赖、读取json配置文件进行多个接口请求-setup(4)
unittest封装测试类,setup对每个用例都要执行的函数进行初始化[初始化是自己的叫法] import unittest from day_20200208_mooc.base.interfac ...
- openpyxl传入表名时不要使用默认的sheet表名
openpyxl传入表名时不要使用默认的sheet表名,会报错 处理:改一下表名即可
- Java 9 新特性 – 内部类的方块操作符
方块操作符 ( <> ) 在 Java 7 中就引入了,目的是为了使代码更可读. 但是呢,这个操作符一直不能在匿名内部类中使用 Java 9 修正了这个问题,就是可以在匿名内部类中使用方块 ...
- 接口测试-chap4-关联接口测试
关联接口测试指:请求第2个接口之前必须先请求第一个接口 1.请求第2个接口时需要带着第一个请求返回的cookie 2.如果不使用cookie,如何进行关联接口测试:使用session保持连接.可以代替 ...
- SpringBoot多数据源中的分布式事务
虽然现在微服务越来越流行,我们的系统随之也拆分出来好多的模块功能.这样做的目的其实就是为了弥补单体架构中存在的不足.随着微服务的拆分,肯定设计到分库分表,但这之中肯定设计到分布式事务.最典型的例子就是 ...
- Linux上的软件ClamAV
ClamAV是使用广泛且基于GPL License的开源代码的典型杀毒软件,它支持各种平台,如:windows.linux.Unix等操作系统,并被广泛应用于其他应用程序,如:邮件客户端服务器.HTT ...