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. shell脚本中$参数的介绍

    $$Shell本身的PID(ProcessID)$!Shell最后运行的后台Process的PID$?最后运行的命令的结束代码(返回值)$-使用Set命令设定的Flag一览$*所有参数列表.如&quo ...

  2. GPU编程-Thread Hierarchy(3)

    1. 如果处理的数据是二维的或者三维的,应该怎么办呢? 针对的,我们可以按照二维或者三维的方式,组织线程.老规矩,先代码.后解释 // Kernel definition __global__ voi ...

  3. CentOS7安装PostgreSQL9.4

    这次选择的数据库安装的是run 文件,更容易掌握.这次数据库全是默认安装,如果有需求的可以自行修改一下的. 这是我的第一篇博客,各位观众老爷,如果觉得哪里有什么不好的,可以留言一起探讨,探讨.有什么问 ...

  4. java控件之树形结构JTree

    import javax.swing.JFrame; import javax.swing.JTree; import javax.swing.event.TreeSelectionEvent; im ...

  5. javascript 生成 uuid

    全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) . GUID是一种由算法生成的二进制长度 ...

  6. Perl正则表达式例子

    Perl正则表达式 一.介绍 正则表达式各语言都有自己的规范,但是基本都差不多,都是由元字符的组合来进行匹配:由于Nmap内嵌的服务与版本探测是使用的Perl正则规范,因此此篇博客记录一下Perl正则 ...

  7. WPF: 实现 ScrollViewer 滚动到指定控件处

    在前端 UI 开发中,有时,我们会遇到这样的需求:在一个 ScrollViewer 中有很多内容,而我们需要实现在执行某个操作后能够定位到其中指定的控件处:这很像在 HTML 页面中点击一个链接后定位 ...

  8. jquery让页面滚动到底部

    function scrollToEnd(){//滚动到底部 var h = $(document).height()-$(window).height(); $(document).scrollTo ...

  9. docker 初识之二(简单发布ASP.NET Core 网站)

    在发布ASP.NET Core网站以前,先介绍一下DaoCloud 一个免费的docker云容器服务平台.登陆官方网站,创建一台docker主机,这台主机有120分钟的使用时间,对于鄙人学习使用正好合 ...

  10. 无法为具有固定名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“MySql.Data.MySqlClient.MySqlProviderServices,MySql.Data.Entity.EF6”

    "System.InvalidOperationException"类型的未经处理的异常在 mscorlib.dll 中发生 其他信息: 无法为具有固定名称"MySql. ...