TCP/IP协议

简介

首先TCP/IP协议不只是表示TCP协议和IP协议两种协议,而是一个协议簇。协议簇是什么并不难理解,就是字面意思,一个由多个协议组合而成的集合体,其中最有代表性的就是TCP和IP这两个协议,除了这两个还有我们熟知的FTP、UDP等协议。当然我们下面主要介绍的还是这两位主角TCP和IP协议。

网络分层

网络分层是我们网络传输的一个框架,每个层级之间相互合作达到了我们相对迅速、安全的网络传输,我们这里介绍一下ISO组织推出的OSI分层模型。

  • 物理层:该层定义了物理传输的接口介质等,用于物理节点之间的传输

  • 数据链路层:这一层是交换机的工作层级,用来将从物理层接收到的数据进行MAC地址的封装与解封

    MAC地址就是我们网络的物理地址,是网卡层级的地址,每个网卡都有自己的MAC地址

  • 网络层:这一层是路由器的工作层级,该层用来通过IP协议进行封装或解封数据包

  • 传输层:该层定义了我们传输数据用的协议以及端口号,将我们的数据包进行分段和传输,到目的地地址之后再进行重组,TCP和UDP协议就是在这层发挥作用的

  • 会话层:用来通过传输层建立的传输通路进行发起或者接收会话请求

  • 表示层:用来将接受的数据转化成我们用户能够识别的东西,反之就是将我们能识别的东西转化为计算机数据

  • 应用层:该层主要为用户提供终端网络服务,比如我们进行的网页浏览或者邮件传输等,该层是HTTP、FTP等协议发挥作用的地方

IP协议

IP指网际互连协议,Internet Protocol的缩写,从我们的网络层级上来看,属于网络层,作用是将我们的数据通过IP协议封装成数据包的形式或者将数据包拆解提供给数据链路层帮助数据传输。

现如今我们的网络环境是非常复杂的,网络结构也是百花齐放,每个厂家产的网络设备、系统等可能就会有协议上的差别,因此IP协议强调了适应性、简洁性和可操作性,并且在可靠性上做出了一定的让步,IP不保证可靠性,所传送分组有可能出现丢失、重复、延迟或乱序等问题。

IP分片

IP包在进行传输的过程中,可能会经历不同的物理网络,受限于网络数据帧的最大传输单元,当IP数据包过大时就会将其分组拆分为多个满足传输单元条件的片段,传输完毕到达目标主机的时候再进行重组。

IP传输主要就是解决两个问题,一个是分解重组,一个是传输,具体细节大家可以再深层次研究研究,此处不过多赘述。

TCP协议

TCP是“Transmission Control Protocol”的简称,翻译过来的意思是“传输控制协议”。我们通过上面的介绍可以看出,如果我们直接拿着IP数据包去进行传输显然是非常不可靠的,稍微地一个网络动荡就会导致我接收不到数据包,并且发送方还不知道。那咋办呢?

TCP提供的端到端的字节流传输,他为我们的数据创建了一个通道,将数据包以流的形式在他创建的通道中进行传输,使得端与端之间的数据传输变得可靠起来。那么他是如何建立与终止这个通道的呢?

三次握手

如图所示为三次握手的大致流程,三次报文传输,三次状态更新,少一步都会导致连接失败。三次握手完毕之后就可以进行数据传输了。

我们不剖析SYN与ACK的原理,我们看一下括号里的内容,不难看出,每次数据传输其实是基于收到的数据进行一个约定好的处理然后再发送,就相当于我们对诗,你一句(白日依山尽)我一句(黄河入海流),只有按照约定好的规则去返回我们传输的内容才会正常建立连接,所以这种连接方式确实是可靠的。

四次挥手

如图为四次挥手的大致流程,四次报文传输,两端分别都发送和接收了一次ACK与FIN报文。FIN报文的意思就是终止传输的请求报文,当客户端申请终止传输时,现向服务端发送一个终止确认,意思就是数据传输完毕,请求终止连接,然后服务端收到之后会发送一个ACK意思是剩余数据传输中,待传输结束之后发送FIN意思是服务端数据发送完毕申请终止连接,最终客户端回应一个ACK响应给服务端,说明该连接已关闭。

滑动窗口

TCP滑动窗口是用来控制网络传输时的流量的一种协议,该协议支持发送方在停止并等待确认前发送多个数据分组,来提高网络吞吐量、数据传输效率。

大概意思就是,发送方要发送数据,接收方给发送方一个窗口大小,然后发送方通过接收方给的窗口大小,对自己的数据流进行分组,按照接收方指定的大小一段一段的发送,这样做的好处就是接收方可以通过控制窗口大小的方式来管理发送方发送数据的大小,从而避免了发送方直接将大量数据发送进来造成的网络拥堵。

发送方发送数据时可以不必发送一批将窗口填满的数据包,发送方在慢启动模式下可以从一个数据包开始,一个一个递增直到接收方窗口大小的数据包量。

超时重传

超时重传机制是TCP可靠性的重要一环,此机制可以将接收方超过一定时间没收到但是发送方已发送的数据进行重发,保证了接收方能更有机会接收到数据。

TCP协议要求发送方每发送一个报文段的时候就启动一个定时器并且等待回应消息,如果超时就会对该段报文重组并重传。此机制最难的实现点就是重传超时时间(RTO)的确认,过大过小都会导致问题出现,太大会导致等待确认时间过长影响吞吐量,而太小会导致频繁重传浪费网络资源。所以说RTO的动态确认是很困难的,此处不过多赘述(其实是实力不够硬T_T)。

总结

TCP/IP协议簇是一个非常巧妙的协议集合,他们分布在不同的网络层级帮助我们约定、对接、传输各种报文、数据包等形式组成的数据。也有不同场景的不同应对协议,比如TCP与UDP的取舍,各有各的好处与使用场景。本篇文章仅仅通过我主观的理解去介绍了IP与TCP协议的大致情况。更深层次的东西如果有精力的话我们可以一起继续往深了挖。

感谢各位大佬的光临,本文重在介绍,若有不对的地方还请麻烦各位大佬指教,感谢。

计算机网络之TCP/IP协议简介的更多相关文章

  1. TCP/IP协议简介

    计算机网络是什么? 简单地理解,计算机网络的任务就是传输数据.为了完成这一复杂的任务,国际标准化组织ISO提供了OSI参考模型,这种模型把互联网网络氛围7层,分别是物理层.数据链路层.网络层.传输层. ...

  2. 网络编程的基本概念,TCP/IP协议简介

    8.1.1 网络基础知识 计算机网络形式多样,内容繁杂.网络上的计算机要互相通信,必须遵循一定的协议.目前使用最广泛的网络协议是Internet上所使用的TCP/IP协议. 网络编程的目的就是指直接或 ...

  3. 计算机网络之tcp/ip协议族

    TCP/IP协议族是一个四层协议系统: 1. 数据链路层   1.1 作用  (1) 实现网卡接口的网络驱动,以处理数据在以太网线等物理媒介上的传输  (2) 网络驱动程序隐藏了不同物理网络的不同电气 ...

  4. 【原创】技术往事:改变世界的TCP/IP协议(珍贵多图、手机慎点)

    1.前言 作为应用层开发人员,接触最多的网络协议通常都是传输层的TCP(与之同处一层的另一个重要协议是UDP协议),但对于IP协议,对于应用程序员来说更多的印象还是IP地址这个东西,再往深一点也就很难 ...

  5. 技术往事:改变世界的TCP/IP协议(珍贵多图、手机慎点)

    1.前言 作为应用层开发人员,接触最多的网络协议通常都是传输层的TCP(与之同处一层的另一个重要协议是UDP协议),但对于IP协议,对于应用程序员来说更多的印象还是IP地址这个东西,再往深一点也就很难 ...

  6. Python复习笔记(十一)TCP/IP协议

    1. TCP/IP协议简介 帧头: mac地址, 网卡上的序列号 2. wireshark使用 分析一个数据是否发送, 是否是网络问题 ip.dst == 192.168.0.137 and udp ...

  7. [转]技术往事:改变世界的TCP/IP协议

    原文链接 : http://www.52im.net/thread-520-1-1.html 1.前言 作为应用层开发人员,接触最多的网络协议通常都是传输层的TCP(与之同处一层的另一个重要协议是UD ...

  8. 计算机网络通信TCP/IP协议浅析 网络发展简介(二)

    本文对计算机网络通信的原理进行简单的介绍 首先从网络协议分层的概念进行介绍,然后对TCP.IP协议族进行了概念讲解,然后对操作系统关于通信抽象模型进行了简单介绍,最后简单描述了socket   分层的 ...

  9. 计算机网络三:域名、IP地址和TCP/IP协议

    一.域名        域名(Domain Name),简称域名.网域,是由一串用点分隔的字符型标志名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时 ...

  10. 计算机网络 0.初识Internet与TCP/IP协议

    互联网,即因特网,Internet.互联网是一个世界范围的计算机网络.连接了世界上无数的计算设备,这些计算设备为PC.基于Linux的工作站,serverservers等等. 这些设备依据其作用不同可 ...

随机推荐

  1. 使用gzexe加密shell脚本

    使用 gzexe 加密 shell 脚本是一个相对简单的过程.以下是具体的步骤: 编写你的 shell 脚本:首先,你需要有一个 shell 脚本文件,比如 myscript.sh. 确保脚本可执行: ...

  2. 欧拉系统初体验与编译安装FFmpeg的过程记录

    目录 源起 1. 系统下载 2. 系统安装 2.1 磁盘分区 2.2 软件数量 2.3 安装完毕 3.进入系统 4.安装FFmpeg 4.1 下载FFmpeg 4.2 解压程序 4.3 检查环境 4. ...

  3. sed 进阶使用

    sed 进阶使用 工作原理 sed 维护两个数据缓冲区: 活动模式空间 和 辅助保持空间 两者最初都是空的 sed 通过对每一行输入执行以下循环进行操作 从输入流中读取一行,删除任何尾随的换行符,并将 ...

  4. lambda表达式用法

    (参数列表)->{代码块}; (int a,int b)->{return a+b;}; 本质为匿名函数 参数的类型可以省略: (a,b)->{return a+b;} 当参数只有一 ...

  5. Linux 备份命令 fsarchiver 基础使用教程

    1 安装配置 fsarchiver 使用yum安装[二者选一个即可,我使用的是下面那个]: yum install https://dl.fedoraproject.org/pub/epel/epel ...

  6. 6、SpringMVC之视图

    注意:本文环境搭建请参考5.2节 6.1.视图概述 视图的作用是渲染数据,将模型Model中的数据展示给用户: SpringMVC视图的种类很多,默认有转发视图和重定向视图: SpringMVC中的视 ...

  7. 【郝斌C ST】01

    自学视频<郝斌C语言自学教程> 01 -  09: https://www.bilibili.com/video/BV1os411h77o 1.为什么学习C语言? - C的起源和发展 第一 ...

  8. python数据分析与可视化基础

    一.数据分析介绍:1.数据分析含义:数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总和理解并消化,以求最大化地开发数据的功能,发挥数据的作用.数据分析是为了提取有用信息和形成 ...

  9. ( Ubuntu环境下 )Vim插件推荐-Python自动补齐Vim插件jedi-vim的安装(使用插件管理器vundle进行安装)

    Ubuntu系统下,为 Vim 安装python自动补齐的插件   jedi-vim   . 1.   jedi-vim安装依赖 首先,jedi-vim插件需要当前Vim版本支持python,在终端输 ...

  10. Jax计算框架的MPI通讯的扩展库 —— mpi4jax

    地址: https://github.com/mpi4jax/mpi4jax PS. 关于这个library的性能表现并不是很清楚,没有亲自手动安装并测试过.这里只作为链接收藏之用,毕竟这个属于比较小 ...