1,互联网的实现,分成好几层。每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持。把互联网分成五层,容易让人理解。

2,对这五层的理解(唐唐讲故事):

实体层:目的就是把计算机连接起来,用电气信号传输0,1

链路层:指定一套规则或方法来解析0和1。他包含一些规定,比如几个01凑一组,这一组01代表什么意思。--》最初基本上每家公司都有自己的分组方式,太乱了,这样就好比一个不懂英文的而中国人和老外对话。完全不在一个频道。这个时候一个类似语言协会的人出来了,说国际语言一英语问标准。这就是以太网。

网路层(以太网协议):把一组一组的01分组方式给规范化了。一组01构成一个数据报(帧)。每个帧都有一个头和数据  》》》》》 |head|data|

    head:里面装了一些东西,比如你是谁的,那里来的,是人是妖,到哪去。(西游记里面常说的:你是谁,是人是妖,你从哪里来,要到哪里去。我是唐三藏,从东土大唐来,到西天拜佛求经,当然他肯定是人)

    data:里面就是一写01,就好比唐三藏自己。

    这里又的说说,唐三藏说的大唐来,西天去。这里包含了一个东西,在网络里叫地址。唐三藏这个数据包要么走。这必须要让唐三藏自己带一些信息,要去西天,好的,佛祖给了经书,唐三藏就得回去,这时就得从西天回去大唐。这里的西天,大唐就是我们常常说的MAC地址。以太网规定,帧必须从一块网卡发到另一块。而地址是唯一(全世界哦48位)的,ps:所以假西天其实就是一些人常做的事情,欺骗唐唐,吃掉唐唐。

    MAC:网卡地址,用来标明数据的发送和接收地址;当然有了地址也没用,因为还需要一个大嘴巴回答妖怪,那些问题,所以唐唐的嘴巴就想个扩音器,把自己信息到处对别人说,但是并不是所有人都喜欢唐唐,因为他老说去西天,留不住,所以只有西天接收他。唐唐大嘴巴就是广播。

    广播:把自己的地址和要去的地方说明。告诉同一个子网中的计算机,我要去哪里。这里我们又不得不说,唐唐路上打妖怪,他不是那么简单就到西天的,但是他又三个徒弟啊。所以网络也有,他又ARP协议。可能有些人问,既然根据MaC地址用广播的方式进行数据传输,那为什么还要一个路由的东西(其实不要也可以,我们是可以吧两台不管位在地球哪里的两台计算机用广播的方式连接起来)。我想,这可能就有要回到唐唐了,唐唐在西游记里面对别人说西天,女儿国留他当老公,可是对每个人都说,我要去西天。烦都烦死了,类似的,如果把所有计算机都放在一个网络(除去子),那么你发个数据包,得想全世界计算机说一遍,贫僧要去西天。这要比对,还不累死,所以广播的方式只适合相对短距离构成的子网中进行。这时,路由器大神出现,把一个一个子网连接在一起。所以,数据帧发送有两种方式:广播和路由传输

    PS:MAC地址和网络地址不是一个概念,他们没啥关系。MAC地址是网卡地址,也可以说是网卡的身份证号。而网络地址是管理员随意分配给你的一个地址,我们称他为IP地址。这个你会发现,连接不同的网络IP地址会改变。身份证作用可以告诉大家我是哪个村的(IP地址也类似,标明所属子网)。

    既然身份证能够地位你是哪个村的,其实本来他就是一串数字,他是怎么做到的。原来,身份证有在公安系统做了规定,哪几位代表省份,哪几位代表市。。。。。这个就好比我们的IP地址也遵循一个规定叫IP协议。IP协议规定,ip地址由两部分组成,一个是前X位表示所属网络,后面的32-X为主机部分。处于同一个子网络的电脑,它们IP地址的网络部分必定是相同的,也就是说172.16.254.2应该与172.16.254.1处在同一个子网。但是IP地址都是32位啊,谁知道你前几位表示的是子网,哪几位代表主机。这时,某个天才程序猿就想,我找个东西和他做一些操作,男女搭配,干活不累。所以,子网掩码出现了。子网掩码用来标识IP地址前几位表示的是子网,哪几位代表主机。他的原理是:用二进制的And运算。例如:172.16.254.2 子网掩码 255.255.255.0  先把IP地址化成32位2进制,然后把子网化成二进制。进行AND运算,结果是172.16.254.0。这前24位为子网地址、后8位为主机地址。

    根据IP协议发送的数据,就叫做IP数据包。不难想象,其中必定包括IP地址信息。但是前面说过,以太网数据包只包含MAC地址,并没有IP地址的栏位。那么是否需要修改数据定义,再添加一个栏位呢?回答是不需要,我们可以把IP数据包直接放进以太网数据包的"数据"部分,因此完全不用修改以太网的规格。这就是互联网分层结构的好处:上层的变动完全不涉及下层的结构。具体来说,IP数据包也分为head和data两个部分。

    head::部分主要包括版本、长度、IP地址等信息,"数据"部分则是IP数据包的具体内容。它放进以太网数据包后,以太网数据包就变成了下面这样。IP数据包的head部分的长度为20到60字节,整个数据包的总长度最大为65,535字节。因此,理论上,一个IP数据包的data部分,最长为65,515字节。以太网数据包的data部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。

  

学习过程参考了:阮大神的<tcp简介>

        <五层协议详解>  

    如果有错,希望大家指出。

    

tcp入门(唐唐的故事)的更多相关文章

  1. modbus tcp 入门详解

    Modbus tcp 格式说明 通讯机制 附C#测试工具用于学习,测试   前言: 之前的博客介绍了如何用C#来读写modbus tcp服务器的数据,文章:http://www.cnblogs.com ...

  2. TCP入门与实例讲解

    内容简介 TCP是TCP/IP协议栈的核心组成之一,对开发者来说,学习.掌握TCP非常重要. 本文主要内容包括:什么是TCP,为什么要学习TCP,TCP协议格式,通过实例讲解TCP的生命周期(建立连接 ...

  3. QT编写TCP入门+简单的实际项目(附源程序)

    我个人感觉学习QT不需要那么深入的了解,因为我就是编写一下界面来实现理想的功能而已,我不是靠这个吃饭,当然以后要是从事这个方向那就好好深入底层好好学了. 学习QT的TCP:第一步:去百度看看TCP的介 ...

  4. 超详细的TCP、Sokcket和SuperSocket与TCP入门指导

    前言 本文主要介绍TCP.Sokcket和SuperSocket的基础使用. 创建实例模式的SuperSocket服务 首先创建控制台项目,然后Nuget添加引用SuperSocket.Engine. ...

  5. 027.掌握Service-Ingress使用

    一 Ingress简介 1.1 Ingress 通常Service的表现形式为IP:Port,即工作在TCP/IP层. 对于基于HTTP的服务来说,不同的URL地址经常对应到不同的后端服务(RS)或者 ...

  6. TCP/IP、Http、Socket、XMPP-从入门到深入

    TCP/IP.Http.Socket.XMPP-从入门到深入 终极iOS程序猿 2016-12-29 18:27 为了便于大家理解和记忆,我们先对这几个概念进行的介绍,然后分析他们的不同,再进行详细的 ...

  7. 【Java】Java网络编程菜鸟进阶:TCP和套接字入门

    Java网络编程菜鸟进阶:TCP和套接字入门 JDK 提供了对 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protoco ...

  8. 浅谈TCP IP协议栈(一)入门知识【转】

    说来惭愧,打算写关于网络方面的知识很久了,结果到今天才正式动笔,好了,废话不多说,写一些自己能看懂的入门知识,对自己来说是一种知识的总结,也希望能帮到一些想了解网络知识的童鞋. 万事开头难,然后中间难 ...

  9. 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

    .引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方 ...

随机推荐

  1. 3D图片变换

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  2. 用NIO实现http协议

    先来看一下本篇博文的目录: 一:简介Nio 二:Nio的好处 三:关于http协议 四:代码实现 五:总结 一:简介Nio 我们都知道io流,那么NIO是什么呢?本篇博文将会带你一探NIO,NIO的全 ...

  3. 3.Node.js 自定义微信菜单

    文章目录:         1.Node.js 接入微信公众平台开发         2.Node.js access_token的获取.存储及更新         3.Node.js 自定义微信菜单 ...

  4. nodejs - 守护进程 supervisor

    1. 安装   npm -g install supervisor   2. 如果使用了expres框架   需要修改启动方式 到 package.json中的   "scripts&quo ...

  5. (cljs/run-at (->JSVM :browser) "语言基础")

    前言  两年多前知道cljs的存在时十分兴奋,但因为工作中根本用不上,国内也没有专门的职位于是搁置了对其的探索.而近一两年来又刮起了函数式编程的风潮,恰逢有幸主理新项目的前端架构,于是引入Ramda. ...

  6. Perl格式化输出

    Perl格式化输出 问题阐述 有时我们需要大量的重复数据,使用手工易于出错及比较繁琐.抓取特征,可以使用Perl脚本轻松搞定. 输出数据格式 主要特点 随机数生成 格式化输出 序列递增 Perl脚本 ...

  7. vue组件大集合 component

    vue组件分为全局组件.局部组件和父子组件,其中局部组件只能在el定义的范围内使用, 全局组件可以在随意地方使用,父子组件之间的传值问题等. Vue.extend 创建一个组件构造器 template ...

  8. angularJS插入html及更换iframe的src

    html: ng-bind-html <div class="tabs_content" ng-bind-html="specialHtml">&l ...

  9. 用awk写递归

    看到自己很多年前写的一篇帖子,觉得有些意义,转录过来,稍加修改. awk是一种脚本语言,语法接近C语言,我比较喜欢用,gawk甚至可以支持tcp/ip,用起来非常方便. awk也支持递归,只是awk不 ...

  10. 高效率遍历Map以及在循环过程中移除 remove指定key

    //高效率遍历Map以及在循环过程中移除 remove指定key //使用iter循环的时候 可以在循环中移除key,for在循环的过程中移除会报错哦 //本方法效率高 Iterator iter = ...