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. K8S 中的 CRI、OCI、CRI shim、containerd

    哈喽大家好,我是咸鱼. 好久没发文了,最近这段时间都在学 K8S.不知道大家是不是和咸鱼一样,刚开始学 K8S.Docker 的时候,往往被 CRI.OCI.CRI shim.containerd 这 ...

  2. 【漏洞分析】DoughFina 攻击事件分析:不做任何参数检查的去杠杆合约

    背景介绍 2024 年 7 月 12 日,DoughFina 协议遭受了黑客攻击,造成本次攻击的主要原因是 ConnectorDeleverageParaswap 合约没有对输入参数进行检查,且该合约 ...

  3. oeasy教您玩转vim - 12 - # 词头词尾

    词头词尾 回忆上节课内容 我们这次学了向前一个单词 w 意思是 word 还学习了向后一个单词 b 意思是 backward 这俩命令都落在单词的第一个字母 还有什么好玩的命令吗? 动手练习 我们可以 ...

  4. JavaScript小面试~宏任务和微任务

    首先,我们要知道JavaScript是单线程调用,在程序启动的时候,会把不同的代码段分派到不同的调用栈,同步任务在同步栈中直接执行,宏任务分派到宏任务栈,微任务会分配到微任务栈,分配好之后,调用栈会被 ...

  5. vue codemirro 文件对比 sql编辑器

    效果图: 安装及引用同上一篇文章,请移步:https://www.cnblogs.com/Lu-Lu/p/16265815.html HTML: <el-dialog class="d ...

  6. NIO操作文件读写

    第一章 第一节,Buffuer 案例一  从buffur 读出数据, 创建了一个 FileInputStream 对象,并通过调用 getChannel() 方法获取了与之关联的 FileChanne ...

  7. M1安装Anaconda遇到的问题

    1. 安装时报错:"Anaconda3 is already installed in /opt/anaconda3. Use 'conda update anaconda3' to upd ...

  8. 将txt转化为csv的方法和遇到问题

    一.无法修改扩展名步骤如下 二.转换之后所有数据都挤在第一列 win10系统修改文件扩展名只需4部,打开我的电脑->查看->选择->查看->取消勾选(已知隐藏文件的扩展名)-& ...

  9. 【Windows】Win10 20H2版本 管理员身份问题

    问题描述: 从之前的1909版本升级过来的,在一开始就是管理员身份,升级之后还是管理员身份没错 但是打开一些软件又会开始提示是否安全,还有C盘访问权限警告. 解决办法: 参考方案地址 http://w ...

  10. 【OracleDB】 07 分组查询 & 分组函数

    分组函数 分组函数作用于一组数据,并对一组数据返回一个值. Oracle中分组函数的种类: - 求平均值 AVG - 计数记录数 COUNT - 求最大值 MAX - 求最小值 MIN - 求和 SU ...