前言

简单编写一下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】860. Lemonade Change 解题报告(Python)

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

  2. 【LeetCode】824. Goat Latin 解题报告(Python)

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

  3. Docker 与 K8S学习笔记(五)—— 容器的操作(下篇)

    上一篇我们学习了容器的启动和常用的进入容器的方式,今天我们来看看如何控制容器起停以及容器删除操作. 一.stop.kill.start和restart stop.kill命令都可以停止运行的容器,二者 ...

  4. ROC and AUC

    目录 概 TPR, FPR ROC and AUC 代码 ROC-wiki 概 AUC常常在文章中作为评价一个分类器优劣的指标, 却总是忘记其原由, 索性记上一笔. TPR, FPR 首先理解TP, ...

  5. linux中网络存储与考试系统搭建(实现多用户可以共享文件)

    上期内容回顾 1.数据备份的方式有哪些 全量和增量 2.数据备份的命令有哪些 都有哪些优点缺点 cp : 本地复制,全量复制 scp : 远程复制,全量复制 rsync : 远程复制,增量复制 3.r ...

  6. Capstone CS5265规格书|CS5265参数|TYPEC转HDMI音视频转换拓展坞芯片

    一.CS5265总概 Capstone CS5265 USB Type-C到HDMI转换器结合了USB Type-C输入接口和数字高清多媒体接口(HDMI)输出.嵌入式微控制器(MCU)基于工业标准8 ...

  7. linux 之 命令提示符设置

    linux 命令提示符设置实际就是设置环境变量PS1的值. 参数说明 \d 显示时间,星期 月 日 \h 显示简写主机名,如默认主机名 localhost \t 显示24小时制时间, HH:MM:SS ...

  8. Django_通用视图(五)

    参考官网的投票系统,按照综合案例的流程创建应用polls,主要模块代码如下: test1/polls/models.py import datetime from django.db import m ...

  9. spring controller获取web前端post数据乱码解决

    web.xml文件加上如下代码<!-- post请求乱码拦截器 --><filter> <filter-name>CharacterEncodingFilter&l ...

  10. java 多态 总结

    1.前言 引用教科书解释: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 通俗来说: 总结:多态的抽象类与接口有点相似: 父类不需要具体实现方 ...