关键词:应用层、socket、TCP、IP、数据链路层、MAC
互联网是指全球网络与网络之间以一组通用的协议连成的庞大的国际网络,始于1969年美国的阿帕网。
一、ARPANET(阿帕网)及起源
“阿帕”(ARPA,美国高级研究计划署)由美国国防部(DoD)于20世纪60年代为应对苏联第一颗人造地球卫星发射成功而建。DoD认为如果仅有一个集中的军事指挥中心,一旦被原苏联摧毁,后果将不堪设想,需要设计一个分散的指挥系统。于是1967年,时任ARPA信息处理处处长的拉里·罗伯茨着手筹建“分布式网络”,1968年提交了《资源共享的计算机网络》报告,并根据这份报告组建了国防部的“高级研究计划网”,也就是著名的阿帕网。
二、分组交换的发展
电路交换:建立连接->通话->释放连接,通话的时间中,两个用户始终占用端到端的通信资源。实时性好,稳定性高,但线路利用率低。
分组交换:采用存储转发技术,把报文(要发送的整块数据)划分为几个分组。传送数据之前无需建立连接,无需全程占用通信链路,在哪段链路传输就占用哪段的资源。
三、阿帕网的实现
1.连接
阿帕网是建立在“包交换理论”上的分布式网络系统,它有四个节点,采用两类通信处理机:交换处理机(IMP)和终端交换处理机(TIP)。IMP就是路由器的前生,以存储-转发方式进行通信。
2.通信协议
最初不同品牌的电脑相互不兼容,无法通过通信处理机互联。1973年卡恩、瑟夫合作提出了“传输控制协议”(TCP)和“因特网协议”(IP),这一协议族共分为四层:网络接口层、互联网层、传输层、应用层。1984年,DoD将TCP/IP协议作为所有计算机网络的标准。
3.IP地址
TCP/IP先后有四个版本,最后一个版本就是现在使用的YCP/IPv4。1981年Jon Postel 定义了IP地址,是用来给Internet上的电脑的编号。
4.分层的网络结构
相互通信的计算机必须高度协调才能够进行通信,为了处理这种复杂的网络问题,提出了分层的方法。在下面三种分层方式中,TCP/IP是真正使用的协议。
应用层:定义应用进程间通信和交互的规则,交互的数据单元是报文,应用层产生数据。
运输层:定义两台主机之间通信和交互的规则,不针对特定应用,将数据进行封装,添加TCP头部。
网际层:负责为分组交换网上的不同主机提供通信服务,交互的数据单元是分组或包。网络层的另一个任务是选择合适的路由,添加IP头部。
网络接口层:链路层交互的数据单元是帧,物理层交互的是比特。
(三层交换机、二层路由器)
四、现代网络
阿帕网借助于通信处理机以及通信链路,通过TCP/IP协议进行数据传输,形成了现代计算机网络的雏形。
现今的网络互连需要借助于通信链路和路由器,这些网络设备都是需要费用和维护的,于是就催生出来了ISP(互联网服务提供者,如中国电信、中国移动、中国联通),所有的用户主机属于网络的边缘部分,大量的网络和连接网络的路由器构成了互联网的核心部分,ISP就是管理维护这个核心部分。
五、操作系统与网络通信
操作系统负责管理计算机硬件资源,是应用程序与计算机硬件之间的中间层,将应用程序与计算机硬件解耦。操作系统实现了TCP/IP协议,提供了进程间通信的功能,通过ip地址定位到主机,通过端口号定位到进程。
1.进程
应用程序依赖操作系统提供CPU时间片、主存、IP设备等资源。操作系统将运行的程序抽象为“进程”,操作系统中实现的两个进程间网络通信的功能就是按照TCP/IP协议实现的。可以简单理解为两个方法:tcp()用来接收到应用层的数据后,添加相应头部。ip()用来添加ip相关头部。
2.端口
进程号是计算机内部管理应用程序的描述,而且是动态分配的。端口是计算机对外提供通信的接口,例如ftp服务程序的端口是21,ftp服务程序可以在21号这个“窗口”提货。
3.Socket
操作系统提供了网络接口Socket,供应用程序调用来实现网络互连,因此网络编程有时也叫socket编程。socket是应用层和传输层中间的一个层,是对TCP/IP协议的封装。
六、web技术
20世纪90年代之前,因特网的主要使用者还是研究人员和学生,他们主要用来传输文件和收发电子邮件等。1989年CERN(欧洲粒子物理研究所)提交了WWW系统(world wide web,中文名为“万维网”,简称web),使全球的科学家能够利用Internet交流自己的工作文档。
web的核心就是内容的共享。B/S架构是共享超文本文档的方案,浏览器客户端和服务器程序是两个通讯主体,双方通过HTTP协议进行对话,通过URI进行资源定位,消息通过HTML格式化。
1.基本元素
URI(统一资源标识符):用来唯一标识服务器上的一个文件,包含两种形式,URL和URN。URL是统一资源定位符,包括协议、域名或IP地址、文件具体地址三部分。URN是统一资源名称,只命名资源。
HTTP协议:浏览器与web服务器两个应用之间通信的协议,最初就是为了提供一种发布和接收HTML页面的方法。
HTML:超文本标记语言,一种借助于标记符格式化电子文档的语言。
浏览器:发送HTTP请求,解析显示获得的响应数据。
web服务器:接收浏览器客户端发起的请求,并按照HTTP协议的规定响应的软件。
2.web技术发展
最初所有web页面都是静态的。GIF图片第一次为HTML引入了动态元素。
1993年CGI(Common Gateway Interface)出现,定义了web服务器与外部应用程序之间的通信接口标准,web服务器可以通过CGI执行外部程序,让外部程序根据web请求生成动态的内容。
后来人们发现一个HTML页面,只有很少部分数据是动态的,大部分是静态的,于是出现了web编程脚本语言,如PHP,最初就是C语言编写的CGI程序的封装,用于将静态和动态数据分开。
3.企业开发平台
当web开始广泛应用于大型应用构建时,系统的稳定性、安全性和分布式等方面的要求变得更高。在许多企业级应用中,数据库连接、邮件服务、事务处理等都是一些通用企业需求模块,于是一些大公司开发了自己的通用模块服务,这些服务性的软件系列统称为中间件。
J2EE就是使用Java语言,开发企业级web应用的一整套解决方案。
七、从浏览器地址栏敲下回车,直到浏览器呈现信息,这个过程发生了什么?
这一过程涉及宽带接入、浏览器、前端技术,DNS,TCP/IP,操作系统,网卡,驱动程序,传输设备,交换机、路由器,服务器等等网络、通信、web相关的几乎所有技术。
计算机网络传输的核心是TCP/IP协议,分为四层结构:应用层产生需要传输的真正数据;传输层、网际层、网络接口层由操作系统以及网卡驱动程序和物理网卡实现,负责将数据从计算机中发送出去,经过路由器(网际层)等网络设置到达最终的目的地。
1.浏览器发起请求
1)解析URL:浏览器解析URL,确定通信协议以及域名、文件资源路径。
2)HTTP请求:根据通信协议封装报文。如浏览器按照HTTP协议约定的格式,将请求封装为HTTP请求报文。
3)DNS解析:根据域名,操作系统先检查自己本地的hosts文件,如果没有这个域名的映射,则查找本地DNS解析器缓存,如果也没有,则会找TCP/IP参数重设置的DNS服务器,直到获得映射的ip。对于HTTP请求,如果没有url中没有设置则默认是80端口,。
4)socket连接:调用socket接口,与服务器建立连接和通信,此过程分为四步:创建套接字、连接、通信、断开链接。
2.TCP处理
1)TCP报文格式、字段
如果应用层数据过大,会进行分块,每个块添加TCP头部信息。TCP头部包括原端口和目的端口、序号、确认号、确认ack、同步syn、终止fin。
2)TCP三次握手
TCP运输连接有三个阶段:建立连接、数据传送、连接释放。
TCP连接过程有三次握手,连接释放要进行四次挥手。
3.IP层处理
TCP连接的每个步骤都需要委托IP模块间数据封装成包发给通信对象。
1)TCP和IP的分段:对于TCP报文,IP不需要再进行分段了,对于UDP是可能导致IP分段的。
IP分段手部由固定部分和可变部分组成。
2)ip地址和硬件地址:ip地址是网际层及以上使用的,是一种逻辑地址,因为IP地址是用软件实现的。数据经过IP处理封装后交给数据链路层,封装成MAC帧,MAC帧头部中的原地址和目的地址都是硬件地址,也就是网卡地址。IP地址实现高效的路由选择,MAC地址实现相邻链路间的数据传送。目的MAC地址通过路由表实现,先找到下一个中转设备的IP地址,再借助于arp协议,查询MAC地址。
3)路由表:路由选择协议的核心是路由选择算法,互联网被划分了多个自治系统(AS),AS内部使用的路由选择协议称为内部网关协议IGP,主要是RIP和OSPF,外部网关协议EGP,目前主要是BGP-4.
路由表信息:网络目标、网络掩码、网关(下一跳路由器入口的ip)、接口、跃点数。通过路由表可以获得目的地IP和下一跳IP,以及网络接口IP(发送方的IP).
4)下一跳的ip地址:根据下一跳IP地址使用ARP协议可以获得下一个设备的MAC地址
4.链路层处理
计算机与外界局域网的连接时通过通信适配器进行的,也就是网卡。适配器和局域网之间的通信是通过电缆或者双绞线串行传输方式通信。适配器和操作系统间是通过主板上的IO总线并行传输的。网卡驱动程序就是实现链路层相关协议的实体。
数据链路层协议有许多种,一般有三个基本问题:封装成帧、透明传输和差错检测。
数据转发接收:数据从应用层,经操作系统和网卡驱动程序对协议栈的实现,在经过网卡转换为广电信号从网口发送出去,接下来就是借助于网络设备进行数据传送。网络设备主要是交换机、路由器。
网络设备的发展:
(1)集线器,主要是对接受到的信号进行再生整形放大,以扩大网络的传输距离,属于纯硬件网络底层设备。缺点是容易出错,被窃听。
(2)网桥,对收到的帧根据其MAC帧的目的地址进行转发和过滤。
(3)二层交换机,也被称为多接口的网桥。交换机根据MAC地址转发是借助于内部的交换表,是通过自学习算法自动的建立起来的。
(4)路由器,工作在网络层,处理的是IP,任务是转发分组。
5.数据的接收
1)从网卡到操作系统:通过网线的光/电信号,到达计算机的网口,转换为数字信息,首先经过帧校验序列(FCS)来校验错误,然后检查MAC头部中的接收方MAC地址,如果是发给自己的,就缓存下来,通知操作系统进行处理。操作系统读取数据,根据类型交给指定的协议栈实现部分。
2)IP模块接收
当网络包转交到协议栈时,IP模块会首先开始工作,检查IP头部中的接收方IP地址,看包是不是发给自己的。确认包是发给自己的,接下来检查包有没有被分片,如果是分片的包,则暂存起来,等所有分片全部到达后将分片组装起来还原成原始包。然后转给TCP模块或UDP模块。
3)TCP模块接收-连接
当TCP头部中的控制位SYN为1时,表示这是一个发起连接的包。然后生产一个代表接收确认的ACK号,返回服务器后,连接完成。
4)TCP模块接收-传输
发送方 IP 地址和接收方 IP,发送方端口和接收方端口唯一确定一条连接。
5)web应用程序接收
应用程序调用socket库的read来获取收到的数据,根据接收到的请求,如果是HTML文档或图片则直接返回,如果是一个程序,则将这个程序输出的数据返回给客户端。
总结:
应用层协议的软件根据目的地的IP地址及端口号,按照HTTP协议组装成HTTP请求数据。
借助于操作系统提供的Socket接口,调用TCP模块对数据进行处理,组装成TCP数据。
IP模块根据目的地IP地址,借助于操作系统的路由表选择下一跳路由,然后根据ARP协议得到下一站的物理地址。此时就有了源IP地址,目的IP地址,源端口,目的端口,源MAC,目的MAC。
然后操作系统与网卡驱动配合将数据封装成以太网帧,借助于网卡将数据转换为光电信号发送出去。
路由器的端口有网卡和MAC,网卡将光电信号转换为数据,进行校验,MAC检验确认是发给自己的,然后根据路由表进行转发,找到下一跳IP,然后ARP协议查找MAC,完成数据在链路层的传递。
最终到达目的主机,主机的网卡接收光电信号,然后通知操作系统,操作系统解析MAC数据报文,然后IP模块接收,然后TCP/UDP,最终到达WEB应用程序。