前言

简单编写一下tcp例子。

正文

我们常说IOS有7层,实际上也只有4层,或者这样说简单的说是4层。

首先是数据链路层,首先这一层解决了什么问题呢?为什么要有这一层呢?

首先要抛开有操作系统的意识,因为它为我们做了太多东西了,摆在你面前的只有两个终端和一根网线。

数据链路层定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。示例:ATM,FDDI等。数据链路层必须具备一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧,帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。

这里最好奇的是封装成帧:

封装成帧(framing):就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。

这样就相当于有切割了,我们一直传输的是0和1,比如我们按照顺序传输的是01101001010101010101010101010。

接收机也的确收到了这个信息了,但是没法知道具体含义啊。这就很尴尬了。

但是我这样传输,如果在前面加标记说是开始,然后加标记结束,这样不就是ok的啊。然后我们都用默认的utf8,这样不就形成了一段话啊。

简直完美极了。这个想法,我自己都能想出来。就像在古代,也有飞行的想法,在人身上装两个翅膀呗。

这就是想法是美好的,但是怎么做呢? 我应该设置什么标志让其知道是开始呢?会不会和我的发送的数据冲突呢?

(1)如何识别帧的开始与结束;(2)在夹杂着重传的数据帧中,接收方在接收到重传的数据帧时是识别成新的数据帧,还是识别成已传帧的重传帧呢?

现在有了想法,那就来解决问题。

首先解决一个这样的问题,那就是SOH和EOT的问题。

那就是设置01(二进制是00000001)和04(二进制是00000100),分别为帧开始的标志和帧结束的标志后。

那么如果我数据中也存在01和04怎么办呢? 这个时候就要转义了。如果出现了01和04那么就要转成别的了。

这个知道转义符的都怎么哈,就不用太多解释了。

解决方法:发送端的数据链路层在数据中出现控制字符”SOH”和”EOT”的前面插入一个转义字符”ESC”(其十六进制编码是1B)。而在接收端的数据链路层在将数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充(byte stuffing)或字符填充(character stuffing)。如果转义字符也出现在数据当中,那么解决方法仍然是在转义字符的前面插入一个转义字符。因此,当接收端收到连续的两个转义字符时,就删除其中前面的一个。

如下图:

然后还有一些帧的问题需要解决了,这里也不可能列举,实际上还有帧的丢失、帧的重复等帧的问题了。

现在假如帧的问题解决了,解决了点与点的问题,那么还有一个问题就是假如一台机器连接了几台机器。

那么我要向起一台机器发送消息怎么办呢? 这个时候就有一下协议产生了,比较著名的是以太网协议了。

它就是说在相连接的机器,每个都发送消息,检查mac是否相等,就收到,不是就丢弃。

这都是有历史的,总之呢,现在相邻的机器可以互相发送消息了。

但是后来电脑越来越多,然后呢,如果要向每台电脑发送信息的话,那是不是有点问题啊,这样层层发送下去,就很不方便。

也就有了网络层了,之所以叫网络层就是电脑越来越多,像网状结构一样,ip协议也就是为了解决这样的问题的。

那就是因为以太网这种协议不适合互联网了。所以说,网络层解决了目的主机和源主机的通信。

好了,现在每两台机器之间可以通信了,那么是不是就ok了呢?

为什么tcp这样的传输层协议出现呢? 目的主机和源主机能够通信了这很好。

但是就是有这样的需求,第一条消息必须比第二条信息后到。我要传输大数据啊,你这不行啊,ip协议发包是有限制的啊。

后面就有很多公司有自己的协议了。比较出名的就是tcp了,解决了传输大数据的问题,按照顺序传输,我给你组装呗。

这一层解决了,数据制定了数据传输的规则,所以叫做传输层呗。

理论上你要大数据有数据了,传输规则你也定了,理论上数据传输是没有问题的呀,数据传输得到了保障啊。

你有啥问题,你可以提的嘛。这时候随着软件的发展哈,还就真的有新的问题了。

软件行业就有问题哈,你这个数据能到是没有问题了。但是这个数据格式有问题啊。

一开始你传123给我,我传456给你,大家都玩得比较开心的。

后来软件越来越复杂了,就有了很多格式了,后来不同格式多了就有了协议了。举个例子,比如http。

因为是解决应用的问题,所以叫做应用层。

总之,如果向学习哪一层,就看哪一层是做什么的,解决什么问题。下一章就是具体的例子了。

计算机网络再次整理————tcp例子前奏[三]的更多相关文章

  1. 计算机网络再次整理————tcp例子第二前奏[四]

    前言 前文我们介绍了网络协议的各层,同时也介绍了一下我们在编写代码时候的服务端的accept.bind.listen.connect.send做了什么. 可以说是从宏观的角度,或者代码开发的角度来说的 ...

  2. 计算机网络再次整理————tcp例子[五]

    前言 本文介绍一些tcp的例子,然后不断完善一下. 正文 服务端: // See https://aka.ms/new-console-template for more information us ...

  3. 计算机网络再次整理————tcp周边[八]

    前言 tcp的包的格式可以看我以前的计算机网络整理,下面这些周边只是为了开发时候我们能用到一些理论知识. 正文 首先要介绍的就是域名,为啥有域名这东西呢?单纯站在网络的角度上讲这属于应用层的东西了. ...

  4. 计算机网络再次整理————tcp的关闭[七]

    前言 tcp的关闭不是简单粗暴的,相对而言是友好优雅的,好聚好散吧. 那么友好的关闭方式是这样的: 假设这里是客户端请求关闭的,服务端倒过来. 客户端:我要请求关闭 服务端:我接收到你的请求了,等我把 ...

  5. 计算机网络再次整理————tcp[二]

    前言 本文不会去介绍tcp的具体协议,因为这个tcp 应该不能说是单纯的连接和传输数据这么简单,里面还有很多机制. 正文 首先介绍一下什么是协议族(protocal Family),举个例子PF_IN ...

  6. 计算机网络再次整理————UDP例子[六]

    前言 简单的说,UDP 没有 TCP 用的广泛,但是还有很多是基于UDP的程序的,故而简单介绍一下. 正文 秉承节约脑容量的问题,只做简单的介绍和例子,因为自己几乎也没怎么用过UDP. 只是了解和知晓 ...

  7. 计算机网络再次整理————socket[一]

    前言 以前也整理过吧,写了几篇之后,感觉没啥整理的必要了然后就放弃了,最近又想整理一下. 正文 这篇对应的是:https://www.cnblogs.com/aoximin/p/12235333.ht ...

  8. TCP协议的三次握手和四次分手

    HTTP连接 HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用. ...

  9. tcp为什么要三次握手,而不能二次握手?

    谢希仁版<计算机网络>中的例子是这样的,"已失效的连接请求报文段"的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞 ...

随机推荐

  1. 【LeetCode】623. Add One Row to Tree 解题报告(Python)

    [LeetCode]623. Add One Row to Tree 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problem ...

  2. 【LeetCode】416. Partition Equal Subset Sum 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 动态规划 日期 题目地址:https://l ...

  3. 【操作系统】bat文件 系统找不到文件路径

    我直接使用bat文件发现我要删除的文件夹还在 在bat文件最后添加pause指令查看发现报错:系统找不到文件路径 原因:路径包括中文,显示乱码(因为txt另存为bat时用量utf-8编码) 解决方法: ...

  4. 第十九个知识点:Shamir密钥交换场景

    第十九个知识点:Shamir密钥交换场景 Shamir密钥交换场景是一个被Adi Shamir提出的算法.算法允许多方分割一个密码,例如一个密钥.当足够多的秘密结合起来,整个密钥就被计算出来了. 正式 ...

  5. kafka2.x常用命令笔记(一)创建topic,查看topic列表、分区、副本详情,删除topic,测试topic发送与消费

    接触kafka开发已经两年多,也看过关于kafka的一些书,但一直没有怎么对它做总结,借着最近正好在看<Apache Kafka实战>一书,同时自己又搭建了三台kafka服务器,正好可以做 ...

  6. iGPT and ViT

    目录 概 主要内容 iGPT ViT 代码 Chen M., Radford A., Child R., Wu J., Jun H., Dhariwal P., Luan D., Sutskever ...

  7. Obfuscated Gradients Give a False Sense of Security: Circumventing Defenses to Adversarial Examples

    目录 概 主要内容 Obfuscated Gradients BPDA 特例 一般情形 EOT Reparameterization 具体的案例 Thermometer encoding Input ...

  8. Electron 使用 Tray设置图标的路径问题

    问题报错信息如图 上面的代码在dev模式下不报错,但是在build后,安装后,运行会提示错误,错误信息的大意是参数错误,原因应该是安装后的图片文件路径有问题,这块没有详细研究解决上面的问题的方法,是使 ...

  9. 解决opencv:AttributeError: 'NoneType' object has no attribute 'copy'

    情况一: 路径中有中文,更改即可 情况二:可以运行代码,在运行结束时显示 AttributeError: 'NoneType' object has no attribute 'copy' 因为如果是 ...

  10. 编写Java程序,应用客户端和服务端通过 Eclipse 控制台的输入和显示实现简易的聊天功能

    查看本章节 查看作业目录 需求说明: 应用客户端和服务端通过 Eclipse 控制台的输入和显示实现简易的聊天功能 实现思路: 创建 Java 项目,在项目中创建服务端类 ChatServerThre ...