先写写我的心得吧:重新帮我复习了下TCP/IP四层协议,这次我很好理解了下应用层,TCP层— 端口号相关, IP层 — ip地址相关,硬件层— 二进制转为电子信号的。同时,TCP负责了分片的功能。当然 文章前面还介绍了路由,DNS服务。网络整体的架构层级。不过我觉得第四章和第五章有点重复,估计我还没理解透这两章的关系吧。
想想,网络主要是 协议栈,数据包,路由器,DNS,还有很多很多的局域网一起组成的吧。
目录:
1.介绍
2.从Internet地址开始
3.协议栈和包
4.网络基础设施
5.Internet基础设施
6.Internet路由层级
7.域名和地址解析
8.Internet 协议再次回顾
9.应用协议:HTTP和World Wide Web www
10.应用协议:SMTP和电子邮件
11.传输控制协议
12.Internet 协议
13.包裹
14.资源
15.参考文献
1.介绍:
本文介绍了因特网底层的基础设施和技术,不会很深入,但是保护了足够的知识来基础理解涉及到其中的概念。
2.从Internet地址开始
由于Internet是一个全球性的网络联合在一起的,所以必须有一个独一无二的地址。IP的形式是:nnn.nnn.nnn.nnn 而nnn范围是0-255。
目前可以看到图一是这样的,随着后面的解释,Internet部分还会继续改变。
如果你通过ISP(Internet Service Provider 互联网服务提供商)来链接互联网,你可能会短暂的获得一个临时的IP地址在你拨号期间。如果你通过一个局域网LAN(local area network )来链接网络,你可能会有一个固定的IP地址,或者你会有一个通过DHCP(Dynamic Host Configuration Protocol)服务器动态分派的IP。
ping 命令是发送一个ICMP请求到指定的机器,被ping的机器会返回一个回复。这个程序会计算回应的时间。如果你输入了一个域名地址而不是一个IP地址如:www.baidu.com ping将会解析域名名字并且展示计算机的IP地址。
3.协议栈和包
比如你的Ip是 1.2.3.4 需要给你目标机器 5.6.7.8 来发送消息,这些消息需要从文字信息转换为电子信号然后在Internet上传输,最后再从电子信号转换为文字信息。这个过程是由协议栈来完成的。协议栈通常是内建在操作系统中的,经常在网络上用的协议栈被称为TCP/IP因为这两个协议常常被使用。
Protocol Layer |
Comments |
Application Protocols Layer 应用协议层 |
Protocols specific to applications such as WWW, e-mail, FTP, etc. 协议对特定应用比如:WWW,e-mail,FTP |
Transmission Control Protocol Layer 传输控制协议层 |
TCP directs packets to a specific application on a computer using a port number. TCP将数据包根据计算机上特定端口发送到特定的应用中。 |
Internet Protocol Layer 网络协议层 |
IP directs packets to a specific computer using an IP address. IP将特定的包根据IP地址发送到特定的计算机中。 |
Hardware Layer 硬件层 |
Converts binary packet data to network signals and back. (E.g. ethernet network card, modem for phone lines, etc.) 转换二进制数据包到网络信号并且传回。 |
如果我们根据一条信息“你好 电脑 5.6.7.8!”从我们电脑传到另外一台电脑上,流向如下图:
1.消息是从你的计算机最顶层协议栈开始的,然后向下。
2.如果这个消息是很长的,这个消息走过的栈层也许会将这条信息切片为更小的数据块。这是因为数据在互联网中发送是在可控的块的。这些数据块被称为包。— 切块
3.这个数据包会从应用层到TCP层。每一个数据包被标记一个端口号。端口会在后续解释。我们需要知道的事目标端的程序需要监听特定的端口来获得消息。— 标记目标端端口号
4.走过了TCP层后,这些包知道他们的目标IP地址 5.6.7.8 — 获得IP地址
5.现在你的数据包有端口号和IP地址,它们准备好通过Internet来发送了。硬件层将我们文字信息转化为电子信号通过电话线传输。
6.在你的网络提供商的另一端是直接和Internet相联的。ISPs的路由解释了每个包中的目标地址并且决定如何发送它。通常数据包的下一站是另外一个路由。
7最终这些数据包到达了5.6.7.8.这些数据开始从计算机TCP/IP栈往上处理。
8.随着包一层层往上,所有的由发送计算机栈添加的路由信息被从数据包中剥离出来。
9.当数据到达协议栈顶部,这个包已经被重新组装为它原来的形式了“你好 电脑 5.6.7.8!”。
4.网络基础设施
是什么组成了因特网了,让我们来看下图:
现在我们可以看到图片一被重新添加了很多细节。
ISP为她们拨入的用户维护了一个调制解调器池。这个通过某种形式的计算机来管理,通常是控制数据流从调制解调器池到骨干或专用线路路由器。这一步也许被称为端口服务器,因为它服务链接到网络。帐单和使用信息通常收集在这里。
在你的数据包通过了电话网络和你的ISP本地装置后,她们被路由到ISP的主干或者ISP买带宽的主干上。通过这,数据包会经过一些路由器和ISP的主干,专用线路已经其他的网络直到她们到达目的地。有一方法来查看我们的数据包在网络上经过了什么:
Traceroute Program
Traceroute www.baidu.com
上图也只是一个简单的网络结构,网络更加复杂。
可能要看下这些分别是代表了什么。
5.Internet基础设施
Internet的主干是由很多大型网络互相连接而组成。这些大型网络被称为网络服务提供商(Network Service Providers or NSPs)。每个NSP需要连接三个网络接入点或称为NAPs(Network Access Points)。在NAPs中,数据包在一个NSP的主干传输到另外一个NSP的主干。NSPs同样通过城域交换(Metropolitan Area Exchanges or MAEs)。MAEs和NAPs由相同的目的但是是私有的。NAPs是最原始的交换点。MAES和NAPs都被称为互联网交换点或者IXs(Internet Exchange Points)。NSPs也会买带宽给小的网络比如ISPs和小的带宽提供商。
我想查查我们国家的NSP和ISP还有MAE分别有哪些,哪些是买带宽的?
上图只是一个抽象的概念,没有实际的主干架构,我们可以自己去NSP的网站上找着她们的网络架构。
6.Internet路由层级
没有电脑知道其他的计算机所在的地方,同时数据包也不会送给每一个电脑。数据包到达它们的目的地是通过每个路由器中所存储的路由表来获取的。
路由器是分组交换的。一个路由通常是在网络之间来路由数据包的。每一个路由器知道它们的自网络以及那些子网络所用的IP地址。这个路由器通常不知道它上面的IP地址。如下图,黑色的盒子连接主干网络的就是路由器。大型的NSP直接使用NSP来连接的。然后就是一层层来的。
当一个数据包到一个路由器上时,这个路由器检查它由IP层放上的IP地址。这个路由器检查他的路由表,如果包含这个IP地址的网络被找到,那么这个数据包就发送到这个网络上,如果没有找到,那么这个路由器发送数据包到默认的路由上,通常是这个主干层级下的下一个路由,希望它可以找到。如果没有找到,那么这个数据包继续被路由直到找到一个NSP主干上。和NSP相连的主干路由有最大的路由表,在这数据包将会被路由到正确的主干上,然后它将会开始一层层的向更小的网络传输。
7.域名和地址解析
但是如果你不知道你想要连接的计算机的IP地址了?
你怎么通过www.baidu.com 来访问到正确的计算机的?
这些都是因为有域名解析器(DNS Domain Name Service)
DNS 是一个分布式的数据库,保持记录计算机的名字和他对应的在互联网上的IP地址
很多计算机连接到DNS数据库的互联网主机部分同时这个软件运行其他人来访问它。这些计算机被认为是DNS服务器。没有DNS服务器有全部的数据库,他们只有其中的子集。如果一个DNS服务器没有包含被请求的域名,DNS将会将这个请求重定向到另外一台DNS服务器上。
域名服务的架构和IP路由层级有些相同。一些常见的,很久的域名靠近顶端。图片中没有展示的是众多的在世界上的DNS来组成其他的层级。
当一个网络连接建立的时候,一个主要的和多个次要的DNS服务器也会在安装的时候启动。这样任何一个需要域名解析服务的应用才能很好的工作。比如,在你输入一个网络地址在浏览器中时,这个浏览器会首先连接你的主要的DNS来获取IP地址,然后浏览器才会请求你想要的网络页面。
8.Internet 协议再次回顾
就像前面暗示的关于协议栈的信息,有很多协议在路由器上使用。有很通讯的协议被因特网要求来完成功能。这些包括有TCP, IP,路由协议,媒体访问控制协议,应用级协议等。下面章节介绍一些广泛应用的很重要的协议。高层级的协议先被讨论,然后是低层级的协议。
9.应用协议:HTTP和World Wide Web www
一个最普遍用到的服务就是万维网WWW(World Wide Web)。是网页工作的协议是HTTP协议(Hypertext Transfer Protocol )。HTML(Hypertext Markup Language)是超文本标记语言,和她没有什么关系,是用来写网页的。HTTP是网页浏览器和服务器用来沟通的协议。它是一个应用层的协议因为它是在TCP层之上,被一些特定的应用来和其他的机器通讯的。在这个例子中就是网页浏览器和网页服务器了。
HTTP是基于文本的协议连接。客户端发送请求到服务器请求一些网页元素,比如网页或者图片。在这个请求被服务器服务后,这个在客户端和服务器之间的连接就会断开。每次请求都要重新开始一次新的连接。很多协议都是面向连接的。这意味着两个计算机通讯时需要一直开着连接。HTTP并没有。一旦一个客户端开始HTTP请求,一个新的连接就要重新向服务器。
当你输入一个URL到一个web浏览器的时候,发生了下面这些事情:
1.如果URL包含域名,浏览器先连接一个域名服务器,然后获得网络服务的对应的IP地址
2.网页浏览器连接网页服务器然后发送一个HTTP请求(通过协议栈)来获取需要的网页。
3.网页服务器获得请求并且检查需要的页面,如果页面存在,服务器发送它,如果不能找到请求的页面,它会发送一个HTTP 404的错误信息。(404 代表页面不存在。)
4.网页浏览器受到页面并且连接中断。
5.浏览器然后解析页面并切查找其他它需要的页面元素来完整整个页面。这里包括图片,小应用程序等。
6.对每个需要元素,浏览器另外建立连接以及HTTP请求。
7.当浏览器完成了载入图片,小程序等,页面会完全的在浏览器中载入。
使用Telnet客户端来获取一个页面通过HTTP
telnet www.cnblogs.com 80
然后输入
GET / HTTP/1.0
当然,它一般是不会返回有东西的页面的,因为还差些元素没有送。
但是不知道为啥百度的就不能这样了,不知道是不是https的关系。
大部分的因特网协议是由互联网文件RFC(Request For Comments)指定的。HTTP 1.0是由RFC1945所指定的。
10.应用协议:SMTP和电子邮件
另外一个常用的网络服务是电子邮件服务。E-mail使用应用层的SMTP协议。SMTP同样也是基于文本的协议,但是不像HTTP,SMTP是面向连接的。SMTP也比HTTP更加复杂。SMTP有更多的命令和注意事项比起HTTP来。
当你打开你的邮箱客户端来读取你的邮件,下面是通常会发生的:
1.邮箱客户端打开一个连接到它默认的邮箱服务器,这个邮箱服务器的域名或者IP地址通常会在客户端安装的时候安装。
2.邮箱服务器常常传输第一条信息来认证它自己。
3.客户端会发送一个SMTP HELO的命令同时服务器会响应一个250 ok的信息。
4.取决于客户端是否是在检查邮箱,发送邮件等,对应的SMTP命令将会发送给服务器,并且会获得对应的回应。
5.这个请求/回应的事物将会一直继续知道客户端发送一个SMTP QUIT的命令。这个服务器然后会说再见并且这个连接将会关闭。
一个简单的SMTP客户端和服务器的对话如下:R表示服务器发送的信息 S表示客户端发送的信息。
上面的事物是从RFC821获取的,定义SMTP的。
11.传输控制协议
在应用层下是TCP层。当一个应用和另外一个计算机开启一个连接时,它们发送的信息(使用的是特定的应用层协议)会传输到协议栈下一层TCP层。TCP是负责路由应用协议到目的计算机的正确的应用。为了达到这个目的,会使用到端口号。端口可以被考虑为一个独立的频道在每个计算机上。这是因为不同的应用会使用不同的端口号。当一个包到一个电脑的时候,同时通过协议栈,这个TCP层决定哪一个应用接受包通过端口号。
TCP像这样工作:
当TCP层从应用层接受到数据的时候,它分片这些数据,并且分解为可以控制的大小,并且添加特定的TCP信息给每块。TCP头包含的信息包括这些数据需要传送给到对应应用的端口号。
当TCP层收到一个从IP层传上来的数据包是,TCP剥掉TCP头,并且如果需要做一些数据的重构,然后发送数据到正确的应用使用TCP头中的端口号。
TCP不是文本协议。TCP是一个面向连接的,可靠的字节流服务。面向连接意味着两个使用TCP协议的应用必须先建立一个连接在交换数据之前。TCP是可靠的因为每一个数据包收到的时候,一个获得信息将会发送给发送方来确认这次发送。TCP也有一个CheckSum来检查传输的数据是否正确。TCP头数据结构如下:
注意到这里没有任何IP地址信息,因为TCP并不知道任何关于IP地址的信息。TCP是为了可靠的从应用层获取数据传到另外一个应用。
12.Internet 协议 IP协议
不像TCP,IP是一个不可靠的,无连接的协议。IP不在乎一个数据包是否到达目的地。同样IP也不知道连接和端口号。IP的任务是发送和路由数据包到其他的计算机。IP数据包是独立的实体,并且也许会不按照顺序到达。这是TCP的工作来保证数据按照正确的顺序到达。它和TCP相同的地方是它也会增加一个IP头到报文中。
以上我们看到IP地址在IP头中。在之后就将数据传输到网络上了。
13.包裹
现在你知道了互联网是怎么工作的。但是这种形式会保持多久了?目前IPV4只允许2的32次方个地址。目前已经有IPV6了,----话说从我知道有开始到现在感觉还没普及,谁知道会怎么发生。
嗯 这个文章是2002年的,15年了,tcp什么的还是这些。
14.资源
不翻译了,留着我自己想看的时候看下:
http://www.ietf.org/ is the home page of the Internet Engineering Task Force. This body is greatly responsible for the development of Internet protocols and the like.
15.参考文献
TCP和网络的相关书籍:
- TCP/IP Illustrated, Volume 1, The Protocols.
W. Richard Stevens.
Addison-Wesley, Reading, Massachusetts. 1994.
- Encyclopedia of Networking.
Tom Sheldon.
Osbourne McGraw-Hill, New York. 1998
其他比较好的书:
- Firewalls and Internet Security; Repelling the Wiley Hacker.
William R. Cheswick, Steven M. Bellovin.
Addison-Wesley, Reading, Massachusetts. 1994.
- Data Communications, Computer Networks and Open Systems. Fourth Edition.
Fred Halsall.
Addison-Wesley, Harlow, England. 1996.
- Telecommunications: Protocols and Design.
John D. Spragins with Joseph L. Hammond and Krzysztof Pawlikowski.
Addison-Wesley, Reading, Massachusetts. 1992.
题外话,这篇文章太久了,不过现在看来还是介绍的很全。参考资料可以找找最新版的看看。
- 《你必须知道的.NET》读书笔记二:小OO有大原则
此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.单一职责原则 (1)核心思想:一个类最好只做一件事,只有一个引起它变化的原因 (2)常用模式:Fa ...
- spring揭秘 读书笔记 二 BeanFactory的对象注册与依赖绑定
本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,而且IoC Service Pr ...
- ES6读书笔记(二)
前言 前段时间整理了ES6的读书笔记:<ES6读书笔记(一)>,现在为第二篇,本篇内容包括: 一.数组扩展 二.对象扩展 三.函数扩展 四.Set和Map数据结构 五.Reflect 本文 ...
- spring揭秘 读书笔记 二 BeanFactory的对象注冊与依赖绑定
本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,并且IoC Service Pr ...
- 【记】《.net之美》之读书笔记(二) C#中的泛型
前言 上一篇读书笔记,很多小伙伴说这本书很不错,所以趁着国庆假期,继续我的读书之旅,来跟随书中作者一起温习并掌握第二章的内容吧. 一.理解泛型 1.为什么要使用泛型?-----通过使用泛型,可以极大地 ...
- Mastering Web Application Development with AngularJS 读书笔记(二)
第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...
- how tomcat works 读书笔记(二)----------一个简单的servlet容器
app1 (建议读者在看本章之前,先看how tomcat works 读书笔记(一)----------一个简单的web服务器 http://blog.csdn.net/dlf123321/arti ...
- java读书笔记二
这是我的一些读书笔记: 我研究了一下面向对象: 面向对象符合人类看待事物的一般规律,对象的方法的实现细节是包装的,只有对象方法的实现者了解细节 我觉得面向过程是由过程.步骤.函数组成,过程是核心,面向 ...
- Linux 读书笔记 二
一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 若不小心登出后,直接刷新页面即可 2. 环境使用 完成实验后可以点击桌面上方的“实验截图”保存并分 ...
随机推荐
- sublime安装PackageControl提示失败(被墙了)
An error occurred installing Package Control 然后下面又说visit....某网址 如果弹出这个错误的话,就是被墙了.翻个墙或者改hosts就行了 如果是改 ...
- gerapy 实现自动化部署
1 安装 2 在需要部署的目录下运行 gerapy init 会在当前目录下生成一个gerapy目录,并在gerapy目录下有一个projects 目录 3 切换到gerapy 目录 cd gerap ...
- Spring常用注解总结(1)
前言:项目中常用的注解常看常记,总会对自己有些好处,所以在这里分享一下. 使用spring时,可以使用xml配置文件配置相关信息.但是我还是喜欢用注解的方式,因为可以充分利用反射机制获取类结构信息,而 ...
- Linux-Centon7常用命令
查看本机IP # ip addr 进入目录 # cd /xxx/xxx 编辑文件,打开文件后,按“Insert”键,进入输入模式(最下面会显示INSERT),将ONBOOT选项改为yes,然后按“Es ...
- java_28 序列化与反序列化
1.序列化和反序列化 序列化:把对象转换为字节序列的过程称为对象的序列化.(常见的就是存文件) 反序列化:把字节序列恢复为对象的过程称为对象阿德反序列化. 2.序列化和反序列化的使用: java.io ...
- SpringMVC避免IE执行AJAX,返回JSON出现下载文件
- angular使用Md5加密
一.现象 用户登录时需要记住密码的功能,在前端需要对密码进行加密处理,增加安全性 二解决 1.利用npm(如果没有,先自行安装npm)安装ts-md5 npm install ts-md5 --sav ...
- 探索未知种族之osg类生物---渲染遍历之裁剪三
前言 在osgUtil::CullVisitor,我们发现apply函数的重载中,有CullVisitor::apply(Group& node),CullVisitor::apply(Swi ...
- python psycopg2 连接pg 建立连接池
# -*- coding: utf-8 -*-from psycopg2.pool import ThreadedConnectionPool,SimpleConnectionPool,Persist ...
- python第十九天 关于方法,函数
1.先从简单的函数说起 from inspect import isfunction 导入判断是否是function def foo():pass 定义了一个函数 print(foo) <fun ...