解读《TCP/IP详解》(卷1):01章:概述

    我们都知道电脑由于好多种操作系统,例如:微软的windows,开源系统linux,苹果的mac等。这些系统千差万别,应用软件也互不兼容,但是他们之间都可以通过网络来进行通信。比如windows版本的qq完全可以和mac上的qq进行聊天。促成这一大同局面的就是各种网络协议(Protocol)。所谓的协议,顾名思义,就是双方(或多方)都要遵守的一种规范,一种格式。打个比方,sos。你在野外遇到危险呼救的时候可以找几根树枝摆一个sos的形状,那么有人看见了就会救你。不管你是在中国或是非洲,这是因为大家都遵守这么一个共识,sos代表着求救。同样的,协议在网络世界中也是这样的作用。

    各种协议中最有名的的就是TCP和IP了。注意TCP/IP协议族 指的就不仅仅是这两个协议了,而是基于这两种协议的一套协议。

1.分层

    首先理解一下分层,最早有一个OSI/ISO的七层模型的。但是只是理论层面的,最终也未能推广,只有在教科书上经常看到了,而这本TCP/IP协议详解上,我并没有看到有这个七层模型的介绍,呵呵。

    

我们从下往上看

1)数据链路层(网络接口层)包括操作系统和计算机中对应的网卡,甚至包含电缆等其他传输媒介的物理接口细节。

2)网络层(互联网层)处理分组在网络中的活动,例如分组的选路。包含的协议有IP 协议,ICMP协议,IGMP 协议

3)运输层提供两台主机间端到端的通信。包含两个重要的协议:TCP和UDP。简单讲是一个连接可靠,一个不可靠。

4)应用层 就很好理解了,我们的各种联网的应用程序大都是在这一层上。在这一层有如下几个通用协议。

*Telent 远程登录协议

*FTP 文件传输协议

*SMTP 简单邮件传输协议

*SNMP 简单网络管理协议

说到这里已经出现了好多协议了,这些都是用简化的大写字母代表的协议,同时记忆起来比较困难。其实抓住几个主要字母就差不多了。

比如:

P :protocol 协议的意思

C:control 控制

T:transfer 传输

S:simple 简单

F:file 文件

M:mabagment管理/mail邮件

G:group 分组

 1.2 IP 地址

    我相信每一位网友都会听过ip地址这个词。= =#有时候大家喜欢简称为ip。。其实这个叫法是不准确的,ip只是协议而已。。IP地址呢,就是一串数字,好比邮政编码一样,我们可以通过邮政编码那六位数字来确定寄信人或收信人的地址位置。ip地址同样可以。ip地址分为五类:看图(图片来自网络)
这些地址共有32位,每一位对应一个二进制位。通常使用一种“点分十进制”的标志方法。即每八位为一组转化为十进制数。所以这样ip地址变成了4段。
类型 起始地址 终止地址
A类 0.0.0.0 127.255.255.255
B类 128.0.0.0 191.255.255.255
C类 192.0.0.0 223.255.255.255
D类 224.0.0.0 239.255.255.255
E类 240.0.0.0 247.255.255.255
特别指出的是有的主机是多接口主机(当然不是PC机了),其中每一个接口对应一个IP地址。
另外,当前的网络中有三种通讯模式:单播(目的为单个主机)、广播(目的端为给定网络上的所有主机)、多播(目的端为同一组内的所有主机)。

1.3 域名系统

    当你上网的时候,如果叫你每次访问一个网站都去输入网站服务器的ip地址,你一定会疯掉。所以呢,域名就应运而生了。域名又称主机名。在TCP/IP领域中,域名系统(DNS)是一个分布式数据库,它提供了主机名与ip地址之间的映射关系。也就是说当你在浏览器地址栏输入www.baidu.com的时候。DNS会查询到百度的服务器主机名然后请求连接。你或许遇到过能上QQ却打不开网页的情况。那么有可能就是DNS出现的错误。也就是所当你输入网址的时候,无法通过DNS查找到正确的ip地址,当然就无法访问这个网页的网页了。能上qq的原因,很简单因为你的qq客户端去连接服务器不通过域名查找,而是直接就通过ip地址来连接的啊。

    当然了,IP地址到具体的网络主机之间还有一层映射。这个映射是ip地址与主机网卡的物理地址(MAC地址)之间的映射。用到的协议是RAP协议,而RARP协议是提供的反方向的映射。

1.4 封装与分用

    当我们通过TCP协议来传输数据的时候,数据被送入协议栈中,然后每通过一层都会给这个数据首部加点东西,有时也会在尾部加点。最后作为比特流发送出去。TCP传递给IP的称为TCP 段(TCP segment)。IP传给网络接口层的称为IP 数据报(IP datagram),最后通过以太网传输的比特流叫做帧(Frame)。

    以太网数据帧的物理特性是其长度必须在46~1500字节之间。IP与网络接口层之间的数据传递是以分组(package)为单位进行的。分组可以是一个IP数据报也可以说是一个数据报的片(fragment)。

    UDP与TCP基本一致,不同的是UDP传递给IP的信息单元称为UDP 数据报(UDP datagram),而且UDP的首部为8个字节。

    IP的首部中存在一个长度为8位的数值,称作协议域,用以表示数据是由那种协议传递而来。其中:

1

ICMP协议

2

IGMP协议

6

TCP协议

7

UDP协议

    TCP或UDP传递数据的时候,都会用一个16位的端口号来表示不同的应用程序。2^16=65536。所以可用的端口号为0~65535.其中0~1023为保留的。比如,FTP服务器的TCP端口号是21,Telnet是23,TFTP是69。这些也被称作知名端口号。所以你编程序的时候不要指定0~1023以内的端口号哦。有些端口号只在用户的某个程序运行时才存在,这时的端口号称为临时端口号。大多数TCP/IP实现临时端口分配1024~50000之间的端口号,大于5000的端口号是为其他服务器预留的(Intent上并不常用的服务)。

    也许你会发现这些知名端口号都是奇数。这是有其历史原因的,因为这些端口号都是从NCP(网络控制协议,TCP前身)端口号派生出来的。NCP是单工的,不是全双工的,因此每个应用程序都需要两个连接,需要预留一对奇数和偶数端口号,当TCP和UDP称为标准运输协议的时候,每个应用程序只需要一个端口号,而奇数端口号就被保留下来。关于单工,双工。如果你拿java写过简单的C/S的通信实例,比如使用socket进行连接。如果你想这两个程序间互相对话,就是有来有往的话呢,那么须建立两个socket连接,两个程序互为服务器,也互为客户机。这就需要两个端口了。

     在以太网的首部同样有一个16位的帧类型域用以表示网络接口要发送和接受的是IP,ARP或者是RARP数据。

    上面讲的是把数据发出去的过程,下面说一下接受的过程。目的主机接受到以太网帧数据以后,就开始从协议栈中由底向上,去掉各种报文首部,并依据首部中的协议标识,确定上层接收数据的协议,这个过程成为分用(Demultiplexing)。

   

    最后,书中关于标注化和发展的历史什么的,我就不说了。再谈一下,internet和Internet。注意一个开头字母的大小写可是两个概念,internet的意思是用一个共同的协议族把多个网络连接在一起。而Internet就是指的我们现在使用最广的,通过TCP/IP互相通信的所有主机的集合,也就是说是一个专有名词。Internet是一个internet,而internet却不等于Internet。咦,是不是有种白马非马的感觉呢?

posted on 2014-01-17 21:22  果冻虾仁  阅读(173)  评论(0编辑  收藏  举报

导航