首页 > 技术文章 > HTTP协议—— 简单认识TCP/IP协议

csguo 2017-09-18 17:25 原文

大学没读计算机专业,所以很多的专业知识都不知道。既然已经从事了IT这个行业,就势必要去了解下网络底层,虽然实际工作中这些东西用不到。高楼大厦,起于平川。不积跬步,无以至千里,不积小流,无以成江海。我现在的知识结构,就如同空中楼阁。稍微遇到高层次的问题,可能就理解不了了。一棵大树如果不在刚开始的时候深深的扎根,把所有的力量用到生长叶子开花上面。等到了大风来袭,互联网低潮的时候,一切来自不易的生活,就轻而易举的被倾覆。

我的理想是成为一个拥有渊博知识的人,拥有丰富的专业知识,足以应对工作中的难题。工作之余,博览群书,提升气质谈吐。

---------------------------------------------------

 

1、什么是TCP/IP 

      如果要了解一个人,可以从他归属的集体聊起来。我们的HTTP协议就属于TCP/IP协议家族中的一员,了解HTTP协议再整个网络流程中的地位,也能更加充分的理解HTTP协议。

      要想了解什么是TCP/IP协议,就要知道为什么有这个协议。中国人和中国人说话,要遵循汉语的的语法结构,使用汉语的发音。当我们和外国人交流时,就要适用外国的语言了,遵循外国的语法机构和发音。其实这就是一种协议,只不过我们称之为语言。计算机再这方面体现的更为直观,两台机器之间该如何通信呢,就需要制定各种各样的协议了。例如:文件传输适用TCP协议。域名系统适用DNS协议。有了些协议的存在,各种数据流按照规则传输,计算机之间得意通信。

       TCP/IP协议是一个协议集合。大家叫的时候方便说,所以统称为TCP/IP。TCP/IP协议族中有一个重要的概念是分层,TCP/IP协议按照层次分为以下四层。应用层、传输层、网络层、数据链路层。为什么要分层?这就如同*1978年的大包干,责任到人。一个层只负责一个层次的问题,如果出问题了,和其他的层次无关,只要维护这个层次也就好了。其实编程语言里也能体现这个分层理论,即封转性、隔离。这里不再延伸细谈。下面我是制作的一个简图。

       (a)网际协议IP:负责在主机和网络之间的路径寻址和数据包路由。

  (b)地址解析协议ARP:获得同一物理网络中的主机硬件地址。

  (c)网际控制消息协议ICMP:发送消息,并报告有关数据包的传送错误。

  (d)互联组管理协议IGMP:用来实现本地多路广播路由器报告。

 

2、分层 


(1). 链路层 :设备驱动程序、网络接口卡,对应物理细节。 
(2). 网络层 :IP协议、ICMP协议、IGMP协议。提供的是一种不可靠的服务,它只是尽可能快的把分组从源节点送到目的节点,但是不提供任何可靠性保证。 
(3). 运输层 :提供端到端的通信。两个传输协议:TCP、UDP。特点:可靠,弥补网络层上不可靠特点。TCP采用超时重传、发送和接收端到端的确认分组机制。 
(4). 应用层 :负责处理特定的应用程序细节。 应用层关心的是应用程序的细节,而不是数据在网络中的传输活动。下三层对应用程序一无所知,但它们要处理所有的通信细节。

一个互联网就是通过一组相同协议族互连在一起的网络。 


路由器:为不同类型的物理网络提供连接:以太网、令牌环网、点对点的链接、FDDI(光纤分布式数据接口)。 
网桥:在链路层上对网络进行互连。路由器是在网络层上对网络进行互连。 

 

下面是从网络上找到的TCP/IP通信数据流

 

[补充]互联网的地址 :
(1)互联网地址分为五大类: 
A类 0 7位网络号+24位主机号 0.0.0.0到127.255.255.255 
B类 10 14位网络号+16位主机号 128.0.0.0到191.255.255.255 
C类 110 21位网络号+8位主机号 192.0.0.0到223.255.255.255 
D类 1110 28位多播组号 224.0.0.0到239.255.255.255 
E类 11110 27位留待后用 240.0.0.0到255.255.255.255 

(2). 封装 
当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当做一串比特流送入网络。其中每一层对收到的1数据都要增加一些首部信息。 
TCP传给IP的数据单元称为TCP报文段;IP传送给网络接口层的数据单元称为IP数据报。通过以太网传输的比特流称作帧。UDP传给IP的信息单元称为UDP数据报。 
IP在首部存入一个长度为8bit的数值,称为协议域。1表示ICMP协议,2表示IGMP协议,6表示TCP协议,17表示UDP协议。 


(3). 分用 

当目的主机收到一个以太数据帧是,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。 

(4). 客户—服务器模型 
重复型、并发型 

(5). 端口号 
任何TCP/IP实现所提供的服务都是用知名的1~1023之间的端口号。客户端端口号即临时端口号,只是在用户运行该客户端是才存在。而服务器只要主机开着,其服务就运行。临时端口号分配在1024~5000之间。大于5000的端口号是为其他服务留着的。 
端口号文件在/eetc/services文件中,查询某特定服务端口号:

这里写图片描述

 

3、HTTP 关系密切的协议 : IP、TCP 和 DNS

    IP协议:IP(Internet protocol),这里的IP不是值得我们通常所说的192.168.1.1.这个IP指的是一种协议,而后面的数字值得是IP地址。IP协议的作用在于把各种数据包准确无误的传递给对方,其中两个重要的条件是IP地址,和MAC地址(Media Access Control Address)。由于IP地址是稀有资源,不可能每个人都拥有一个IP地址,所以我们通常的IP地址是路由器给我们生成的IP地址,路由器里面会记录我们的MAC地址。而MAC地址是全球唯一的,除去人为因素外不可能重复。举一个现实生活中的例子,IP地址就如同是我们居住小区的地址,而MAC地址就是我们住的那栋楼那个房间那个人。关于MAC地址,如果我没讲清楚,可点击连接,查看百度。以下内容摘抄自《图解HTTP》

   使用 ARP 协议凭借 MAC 地址进行通信

   IP 间的通信依赖 MAC 地址。在网络上,通信的双方在同一局域网(LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转才能连接到对方。而在进行中转时,会利用下一站中转设备的 MAC 地址来搜索下一个中转目标。这时,会采用 ARP 协议(Address Resolution Protocol)。ARP 是一种用以解析地址的协议,根据通信方的 IP 地址就可以反查出对应的 MAC 地址

    感兴趣的可以参考ARP协议(Address Resolution Protocol),题外话,从文档上来看,百度百科要比维基百科介绍的好的多。

 你向另外一台电脑发送一条信息,怎么再茫茫人海中瞬间找到对方,以下是图示:

TCP协议:如果说IP协议是找到对方的详细地址。那么TCP协议就是把安全的把东西带给对方。各有分工,互不冲突。

      按层次分,TCP属于传输层,提供可靠的字节流服务。什么叫字节流服务呢?这个名字听起来让人不知所以然,下面听下我通俗的解释。所谓的字节流,其实就类似于信息切割。比如你是一个卖自行车的,你要去送货。安装好的自行车,太过庞大,又不稳定,容易损伤。不如直接把自行车拆开来,每个零件上都贴上收货人的姓名。最后送到后按照把属于同一个人的自行车再组装起来,这个拆解、运输、拼装的过程其实就是TCP字节流的过程。

     我们看下严谨的学术表达是怎样的:

     所谓的字节流服务(Byte Stream Service)是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传给对方。一言以蔽之,TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方。

     为了确保信息能够确保准确无误的到达,TCP采用了著名的三次握手策略(three-way handshaking).下面我写一段对话来模拟下这三次握手。

 

DNS:DNS(Domain names System) 和HTTP协议一样是处于应用层的服务,提供域名到IP地址之间的解析服务。

互联网之间是通过IP地址通信的,但是IP地址并不符合认得记忆习惯,人喜欢记忆有意义的字词。所以DNS服务就为了解决这个问题而生了。其实很好理解,形如我们电脑中host文件。

192.168.1.11       roverliang.com  

当我们访问roverliang.com 的时候,电脑便不会去外网服务器上查询了,直接去访问192.168.1.111。这是一个简单的域名劫持,足以说明DNS的涵义了。

下面是我们访问一个网页,各种协议在里面起的作用。

 

 

1. IP路由选择 
一般简单机制: 
如果目的主机与源主机直接相连(如点对点链路)或都在一个共享网络上(以太网或令牌环网),那么IP数据报就直接送到目的主机上。否则把数据报发往一默认路由上,由路由器来转发该数据报。 
主机从不把数据报从一个借口转发到另一个借口,而路由器则要转发数据报。内含路由器功能的主机应该从不转发数据报,除非它被设置成那样。 
一般体制中,IP可以从TCP、UDP、ICMP、IGMP接收数据报并进行发送,或者从一个网络接口接收数据报并进行发送。IP层在内存中有一个路由表,当收到一份数据报并进行发送时,它都要对该表进行搜索一次。当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的IP地址之一或者广播地址。如果是,数据报就被送到由IP首部协议字段所指定的协议模块进行处理。如果不是这些地址,那么(1)如果IP层被设置为路由器的功能,那么就对数据报进行转发;否则(2)数据报被丢弃。 
路由表的每一项都包含以下信息: 
(1) 目的IP地址 
(2) 下一站路由器的IP地址 
(3) 标志 
(4) 为数据报的传输指定网络接口 
IP路由选择主要完成以下功能: 
(1) 搜索路由表,寻找能与目的IP地址完全匹配的表目。 
(2) 搜索路由表,寻找能与目的网络相匹配的表目。 
(3) 搜索路由表,寻找表位默认的表木。 
如果上面这些步骤都没有成功,那么该数据报就不能被发送。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或“网络不可达”错误。 
为一个网络指定一个路由器,而不必为每个主机指定一个路由器。 
下面是数据报从主机bsdi到sun的传送过程: 
这里写图片描述

双方都在一个以太网上。当IP从某个上层收到这份数据报后,它搜索路由表,发现目的IP地址(140.252.13.0)。于是,在表中找到匹配网络地址。数据报被送到以太网驱动程序后,然后作为一个以太网数据帧被送到sun主机上。IP的数据报中的目的地址是sun的IP地址(140.252.13.33),而在链路层首部中的目的地址是48bit的sun主机的以太网接口地址。这个48bit的以太网地址是用ARP协议获得的。 
2. 子网寻址 
子网对于子网内部的路由器是不透明的,子网的划分所见了路由表的规模。 
3. 子网掩码 
这里写图片描述 
上图中子网掩码分别为255.255.255.0,255.255.255.192。 
给的IP地址和子网掩码以后,主机就可以确定IP数据报的目的是:本子网的主机;本网络中其他主机;其他网络上的主机。 
知道本机IP地址,就可以知道它是A类、B类或C类,也就知道网络号和子网号之间的分界线。如果知道子网掩码,那就可以知道子网号与主机号的分界线。 

 

推荐阅读