网络编程的目的就
是直接或间接地通过网络协议与其他计算机进行通信
。在Java中包含网络编程地各种API,通过创建这些类的对象,就可以进行网络应用程序的编写。调用相应的方法
什么是计算机网络
- 计算机网络是指
两台或更多的计算机组成的网络
,由于同一个网络
中并遵循同一种网络协议
,所以任意两台
计算机都可以直接通信
。
什么是互联网
- 互联网是
连接网络的网络(internet)
,即把很多计算机网络连接起来,形成一个全球统一的互联网。
什么网络通信协议
-
为了把计算机网络接入互联网,就必须使用网络通信协议,
如果计算机网络各自的通讯协议不统一,就没法把不同的网络连接起来形成互联网。
。 -
通过
计算机网络
可以使多台计算机实现连接
,位于同一个网络
中的计算机在进行连接和通信时需要遵守一定的规则
,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议
,它对数据的传输格式、传输速率、传输步骤
等做了统一规定,通信双方必须同时遵守才能完成数据交换。
网络分类
- 计算机网络是指将有多台计算机通过
通信设备线路
连接起来,在网络连接
的支持下,实现彼此之间资源共享和数据通信
的整个系统。
按规模分类
按照规模主要将网络分为局域网
、城域网
、广域网
和因特网
。
网络分类 | 描述 |
---|---|
局域网 | (LocalArea Network) 简称 LAN ,是一种在小范围内实现的计算机网络,一般在一个建筑物内或者一个工厂、一个事业单位内部独有,范围较小。=>局域网可以实现文件管理、应用软件共享、打印机共享、扫描仪共享、工作组内的日程安排、电子邮件和传真通信服务等功能。局域网是封闭型的 ,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。 |
城域网 | (Metropolitan Area Network)简称为MAN ,一般是一个城市内部 组建的计算机信息网络,提供全市的信息服务。 |
广域网 | (Wide Area Network)简称为 WAN,它的范围很广,可以分布在市,省、一个国家或者几个国家。广域网包括大大小小不同的子网,子网可以是局域网,也可以是小型的广域网。 |
因特网 | (Internet)则是由无数的LAN(局域网) 和 WAN(广域网) 组成的。 |
按传输介质分类
按照使用的传输介质可分为有线网
和无线网
网络传输介质是网络中发送方
与接收方
之间的物理通路
,它对网络的数据通信具有一定的影响
。常用的传输介质分为有线传输介质
和无线传输介质
两大类,不同的传输介质,其特性也各不相同。
网络分类 | 描述 |
---|---|
有线传输介质 | 指在两个通信设备之间实现的物理连接部分,它能将信号从一方传输到另一方,有线传输介质主要有双绞线 、同轴电缆 和光纤 。双绞线和同轴电缆传输电信号,光纤传输光信号。 |
无线传输介质 | 1.指利用无线电波 在自由空间的传播可以实现多种无线通信。2.根据电磁波频谱可将其分为 无线电波、微波、红外线、激光 等,信息被加载在电磁波上进行传输。 3.无线传输的介质有:无线电波、红外线、微波、卫星和激光。 4.在 局域网 中,通常只使用无线电波 和红外线 作为传输介质。5.无线传输介质通常用于广域互联网的广域链路的连接。 6.无线传输的优点在于安装、移动以及变更都较容易,不会受到环境的限制。但信号在传输过程中容易受到干扰和被窃取,且初期的安装费用较高。 |
按拓扑结构分类
按照使用的拓扑结构可分为星形网络
,总线网络
,环状网络
总线型
- 优点: 费用低、数据端用户入网灵活、站点或某个端用户失效不影响其它站点或端用户通信,布线要求简单,扩充容易,端用户失效、增删不影响全网工作。
- 缺点: 一次仅能一个端用户发送数据,其它端用户必须等待到获得发送权;媒体访问获取机制较复杂;维护难,分支结点故障查找难。
- 优点: 信息流在网中是沿着固定方向流动的,两个节点仅有一条道路,简化了路径选择的控制;环路上各节点都是自举控制,控制软件简单。
- 缺点: 信息源在环路中是串行地穿过各个节点,当环中节点过多时,势必影响信息传输速率,使网络的响应时间延长;环路是封闭的,不便于扩充;可靠性低,一个节点故障,将会造成全网瘫痪;维护难,对分支节点故障定位较难。
- 优点: 信息流在网中是沿着固定方向流动的,两个节点仅有一条道路,简化了路径选择的控制;环路上各节点都是自举控制,控制软件简单。
- 缺点: 需要耗费大量的电缆,安装、维护的工作量也骤增;中央节点负担重,形成“瓶颈”,一旦发生故障,则全网受影响;各站点的分布处理能力较低。
软件架构
在网络通信中主要有两种模式的通信方式:一种是客户机/服务器(Client/Server)模式
,简称C/S模式;另一种是浏览器/服务器(Browser/Server)模式
,简称B/S模式
-
C/S结构
:全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。
使用 C/S 模式的程序,在开发时需要分别针对客户端和服务器端进行专门开发。这种开发模式的优势在于由于客户端是专门开发的,表现力会更强。缺点就是通用性差,也就是说一种程序的客户端只能和对应的服务器端进行通信,不能和其他的服务器端进行通信,在实际维护中,也需要维护专门的客户端和服务器端,维护的压力较大。 -
B/S结构
:全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。
对于很多程序,运行时不需要专门的客户端,而是使用通用的客户端,例如使用浏览器。用户使用浏览器作为客户端的这种模式叫作浏览器/服务器模式。使用这种模式开发程序时只需开发服务器端即可,开发的压力较小,不需要维护客户端。但是对浏览器的限制比较大,表现力不强。
两种架构各有优势,但是无论哪种架构,都离不开网络的支持。网络编程就是在一定的协议下,实现两台计算机的通信的程序。
IP
-
IP地址
指互联网协议地址(Internet Protocol Address)
,俗称IP。用来给一个网络中的计算机设备(通常是网卡)
做唯一的编号。假如我们把“个人电脑”比作“一台电话”的话,那么“IP地址”就相当于“电话号码”。计算机设备可以是计算机,路由器等。(注意:一台联入互联网的计算机肯定有一个IP地址,但也可能有多个IP地址) -
IP地址分类
IPv4
- 是一个
32位的二进制数
,通常被分为4个字节
,表示成a.b.c.d
的形式,例如101.202.99.12。其中a、b、c、d都是0~255之间的十进制整数
,那么最多可以表示$232^2$个(大约42亿)
。IPv4的地址目前已耗尽
IPv4地址实际上是一个32位整数。例如:
106717964 = 0x65ca630c
= 65 ca 63 0c
= 101.202.99.12IPV6
- 由于互联网的蓬勃发展,IP地址的需求量愈来愈大,但是网络地址资源有限,使得IP的分配越发紧张。
为了扩大地址空间,拟通过IPv6重新定义地址空间,采用128位地址长度
,每16个字节一组,分成8组十六进制数
,数之间用冒号(:)分开,表示成ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
,号称可以为全世界的每一粒沙子编上一个网址,这样就解决了网络地址资源数量不够的问题。
- 是一个
-
特殊的IP地址
- 本机IP地址:
127.0.0.1、localhost
- 本机IP地址:
-
公网地址.内网地址
- IP地址又分为
公网IP地址
和内网IP地址
。公网IP地址可以直接被访问,内网IP地址只能在内网访问。内网IP地址类似于: 192.168.0.0——192.168.255.255
属于内网地址,属于非注册地址,专门为组织机构内部使用。
- IP地址又分为
端口
- IP地址用来标志一台计算机,但是一台计算机上可能提供多种应用程序,
使用端口来区分这些应用程序
。 - 端口是虚拟的概念,并不是说在主机上真的有若干个端口。
通过端口可以在一个主机上运行多个网络应用 程序。
- 如果说
IP地址可以唯一标识网络中的设备
,那么端口号就可以唯一标识设备中的进程(应用程序)
了。加粗样式
端口分类
端口类型 | 描述 |
---|---|
公认端口 | 0—1023 比如80端口分配给WWW,21端口分配给FTP ,用于一些知名的网络服务和应用 |
注册端口 | 1024—49151 分配给用户进程或应用程序 |
动态/私有端口 | 49152–65535 |
端口号:用两个字节表示的整数,它的取值范围是0-65535。其中,0-1023
之间的端口号用于一些知名的网络服务和应用,普通的应用程序需要使用1024以上
的端口号。如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败。
理解IP和端口的关系
- IP地址好比每个人的地址(门牌号),端口好比是房间号。必须同时指定IP地址和端口号才能够正确的发送 数据
- IP地址好比为电话号码,而端口号就好比为分机号
- 利用
协议+IP地址+端口
组合,就可以标识网络中的进程
了,那么进程间的通信就可以利用这个标识与其它进程进行交互。
IP/子网掩码/网关关系
-
如果一台计算机只有
一个网卡
,并且接入了网络,那么,它有一个本机地址127.0.0.1
,还有一个IP地址,例如101.202.99.12
,可以通过这个IP地址接入网络。 -
如果一台计算机有
两块网卡
,那么除了本机地址127.0.0.1
外,它还可以有两个IP地址
,可以分别接入两个网络
。通常连接两个网络的设备是路由器
或者交换机
,它至少有两个IP地址,分别接入不同的网络,让网络之间连接起来。 -
如果
两台
计算机位于同一网络
,那么他们之间可以直接通信
,因为他们的IP地址前段
是相同
的,也就是网络号是相同的
。网络号是IP地址
通过子网掩码过滤后
得到的。例如:某台计算机的IP是
101.202.99.2
,子网掩码是255.255.255.0
,那么计算该计算机的网络号是:
IP = 101.202.99.2
Mask = 255.255.255.0
Network = IP & Mask = 101.202.99.0每台计算机都需要正确配置
IP地址
和子网掩码
,根据这两个就可以计算网络号
,如果两台计算机计算出的网络号相同
,说明两台计算机在同一个网络,可以直接通信。
网关
-
如果两台计算机计算出的网络号不同,那么两台计算机不在同一个网络,不能直接通信,它们之间必须通过
路由器
或者交换机
这样的网络设备间接通信,我们把这种设备称为网关
。 -
网关的作用就是连接多个网络,负责把来自一个网络的数据包发到另一个网络,`这个过程叫路由。
所以,一台计算机的一个网卡会有3个关键配置:
IP地址,例如:10.0.2.15
子网掩码,例如:255.255.255.0
网关的IP地址,例如:10.0.2.2
域名
-
直接记忆IP地址非常困难,所以我们通常使用域名访问某个特定的服务。
域名解析服务器DNS负责把域名翻译成对应的IP
,客户端再根据IP地址访问服务器。用
nslookup
工具可以查看域名对应的IP地址
如:查询百度的ip地址发现是IPV4的IP地址
如:查询百度的ip地址发现是IPV6的IP地址
有一个特殊的本机域名localhost
,它对应的IP地址总是本机地址127.0.0.1
DNS概念
DNS(Domain Name System,域名系统)是将域名解析成某个IP地址后,访问所指向的服务器获取资源
- 因特网上作为
域名和IP(Internet Protocol Address)地址相互映射的一个分布式数据库
,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。 - 通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。
- DNS协议运行在UDP协议之上,使用
端口号53
。 - 在整个互联网体系中,约定俗成的用于标识网络上设备的地址是IP,然而我们输入的是DNS,因为域名更方便人们记忆,不然那么多网站,人怎么可能记住所有的IP地址。
DDNS概念
动态域名解析(DDNS)
:是将固定的域名与动态
的IP地址相对应,如花生壳服务
就提供动态域名解析服务
。为个人和中小型企业提供动态域名解析服务,其网页资源存储的电脑,其分配的IP地址是动态的,所以需要花生壳服务,当外网访问时
,会将电脑的IP地址发给花生壳服务器,分配出固定的IP地址给该电脑,达到动态解析的目的,`实现外网访问内网。适用于个人以及中小型企业,没有购买静态域名的人群,需求还是很大的。而面对百度这样的网站,其解析baidu.com,并不是叫做动态域名解析。
主机解析域名顺序
- 找缓存
- 找本机的hosts文件
- 找DNS服务器
主机解析域名详细过程
-
浏览器输入www.qq.com域名,操作系统会先检查
本地hosts文件
是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。在windows系统中,可以通过
C:\Windows\System32\drivers\etc下的host文件
来修改。可以将任何的域名映射到对应的IP地址中。 -
如果
本地hosts文件
没有这个域名的映射,则查找本地DNS解析器缓存
,是否有这个网址映射关系,如果有,直接返回,完成域名解析。 -
如果
本地hosts文件
与本地DNS解析器缓存
都没有相应的网址映射关系,首先会找TCP/IP参数
中设置的首选DNS服务器
,在此我们叫它本地DNS服务器
,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
-
如果要查询的域名,不由
本地DNS服务器区域
解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
-
如果
本地DNS服务器本地区域文件与缓存解析
都失效,则根据本地DNS服务器
的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至“根DNS服务器”
,“根DNS服务器”
收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器
的一个IP。本地DNS服务器
收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器
地址(qq.com)给本地DNS服务器。当本地DNS服务器
收到这个地址后,就会找qq.com域服务器
,重复上面的动作,进行查询,直至找到www.qq.com主机。 -
如果用的是转发模式,
此DNS服务器
就会把请求转发至上一级DNS服务器
,由上一级服务器
进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
hosts:定义的IP地址是,存有网站资源(图片、文字)的服务器;
NS记录:定义的IP地址是,域名解析的服务器地址;
A记录:定义的IP地址是,存有网站资源的服务器。
浏览器如何通过域名去查询URL对应的IP(对应服务器地址)呢
- 浏览器缓存:浏览器会按照一定的频率缓存DNS记录。
- 操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,那就去操作系统中找。
- 路由缓存:路由器也有DNS缓存。
- ISP的DNS服务器:ISP是互联网服务提供商(Internet Service Provider)的简称,ISP有专门的DNS服务器应对DNS查询请求。
- 根服务器:ISP的DNS服务器还找不到的话,它就会向根服务器发出请求,进行递归查询(DNS服务器先问根域名服务器.com域名服务器的IP地址,然后再问.com域名服务器,依次类推)。
在网上查到某个网站的IP地址,在自己的浏览器上输入,却为什么连接不上?
- 大型高并发网站可能不止一个IP地址,根据不同的网络他们会有很多的IP来做集群。有的是通过DNS来实现负载均衡,有的是用Squid
(Squid是一个高性能的代理缓存服务器)
来实现的。
网络模型
计算机网络中实现通信必须有一些约定
即通信协议,即对速率、传输代码、代码结构、传输控制步骤、出错控制
等制定标准 ,好比公路交通规则,学生守则- 问题:
网络协议太复杂
- 计算机网络通信涉及内容很多,比如
指定源地址和目标地址,加密解密,压缩解压缩,差错 控制,流量控制,路由控制,
如何实现如此复杂的网络协议呢? - 解决方案:
分层
由于结点之间联系很复杂,在制定协议时,把复杂份分解成 一些简单的成份,再将它们复合起来。最常用的复合方式是层次方式,即同层间可以通信
、上一层可以调用下一层,而与再下一层不发生关系
。
网络通信协议的分层
OSI(Open System Interconnect)网络模型
是ISO组织
定义的一个计算机互联的标准模型
,注意它只是一个定义,目的是为了简化网络各层的操作,提供标准接口便于实现和维护
。这个模型从上到下依次是:
- 因为如果两台计算机能够相互通信的话,实际实现起来是非常困难操作的…我们分层的目的就是为了将困难的问题简单化,并且
如果我们分层了,我们在使用的时候就可以仅仅关注我们需要关注的层次,而不用理会其他层。
- 如果需要改动设计的时候,我们只需要把变动的层替换即可,并不用涉及到其他的层次。这与我们程序设计中的低耦合是一个概念。
- 而我们的HTTP协议是在
最上层
,也就是应用层
。这是最贴近我们的程序员
的层次。
- 名义上标准:
ISO/OSI
参考模型
物理层 (负责把数据进行分片并且真正通过物理网络传输,例如,无线网、光纤等)
- 物理层处于OSI的
最底层
,是整个开放系统的基础
。物理层设计通信信道上传输的原始比特流(bits)
,它的功能主要是为数据段设备提供传送数据的通路以及传输数据
。
Bytes和bits的区别
数据链路层 (负责把数据进行分片并且真正通过物理网络传输,例如,无线网、光纤等)
- 数据链路层的主要任务是
实现计算机网络中相邻节点之间的可靠传输
,把原始的、有差错的物理传输线路加上数据链路协议之后,构成逻辑上可靠地数据链路。需要完成的功能有链路管理、成帧、差错控制以及流量控制等。其中成帧是对物理层的原始比特流进行界定,数据链路层也能够对帧的丢失进行处理。
网络层 (负责根据目标地址选择路由来传输数据)
- 网络层涉及源主机节点到目的主机主机节点之间可靠地网络传输,它需要完成的功能主要包括
路由选择、网络寻址、流量控制、拥塞控制、网络互连
等。
传输层 (负责提供端到端的可靠传输)
- 传输层起着
承上启下
的作用,涉及源端节点到目的端节点之间可靠的信息传输。传输层需要解决跨越网络连接的建立和释放
,对底层不可靠的网络,建立连接时需要三次握手,释放连接时需要四次挥手。
会话层 (负责建立和维护会话)
- 会话层的主要功能
负责应用程序之间建立、维持和中断会话。
同时也提供对设备和节点之间的会话控制,协调系统和服务之间的交流,并通过提供单工、半双工和全双工
3种不同的通信方式,使系统和服务之间有序地进行通信。
单工,半双工和全双工有何区别和联系?
表示层 (处理数据格式,加解密等等)
- 表示层关心所传输数据信息的格式定义,其主要功能是
把应用层提供的信息变换为能够共同理解的形式,
提供字符代码
、数据格式
、控制信息格式
、加密
等的统一表示。
应用层 (提供应用程序之间的通信)
- 应用层为OSI的
最高层
,是直接为应用进程提供服务的。其作用是在实现多个系统应用进程相互通信的同时,完成一系列业务处理所需的服务。
- 事实上标准:
TCP/IP协议栈
(Internet使用的协议)
TCP/IP协议:传输控制协议(Transmission Control Protocol )/因特网互联协议( /Internet Protocol)
,是Internet最基本、最广泛
的协议。它定义了计算机如何连入因特网
,以及数据如何在它们之间传输的标准
。它的内部包含一系列的用于处理数据通信
的协议,并采用了4层
的分层模型,每一层都呼叫它的下一层所提供的协议来完成自己的需求
TCP/IP协议中的四层分别是应用层、传输层、网络层和链路层
,每层分别负责不同的通信功能。
网络接口层
- 链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。
- TCP/IP协议对网络接口层没有给出具体的表述,网络接口层对应着物理层和数据链路层。一般来说,五层TCP/IP模型
网络接口层是分为物理层和数据链路层
。
- TCP/IP协议对网络接口层没有给出具体的表述,网络接口层对应着物理层和数据链路层。一般来说,五层TCP/IP模型
网络层(IP层)
- 网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。
- 它的功能是把分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。互联网层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。除此之外,互联网层还需要完成拥塞控制的功能。
运输层(TCP层)
- 主要使网络程序进行通信,在进行网络通信时,
可以采用TCP协议,也可以采用UDP协议
。 - TCP层负责在应用进程之间建立端到端的连接和可靠通信,它只存在与端节点中。TCP层涉及两个协议,TCP和UDP。其中
- TCP协议提供面向连接的服务,提供按字节流的有序、可靠传输,可以实现连接管理、差错控制、流量控制、拥塞控制等。
- UDP协议提供无连接的服务,用于不需要或无法实现面向连接的网络应用中。
应用层
- 主要负责应用程序的协议,例如HTTP协议、FTP协议等。
数据的封装与拆封
TCP/IP协议栈
网络层
主要协议IP协议传输层
主要协议TCP和UDP
TCP/IP与UDP协议区别
选项 | TCP(transfer control protocol) | UDP(User DatagramProtocol ) |
---|---|---|
描述 | 一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议 | 一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务 |
特点 | 1. 面向连接 2.点到点的通信 3.高可靠性:三次握手 4.占用系统资源多、效率低 |
1.非面向连接,传输不可靠,可能丢失 2.发送不管对方是否准备好,接收方收到也不确认 3.可以广播发送 4.非常简单的协议,开销小 |
生活案例 | 打电话 | 发送短信,发电报 |
应用案例 | HTTP FTP TELNET SMTP | DNS SNMP |
IP协议概念
- IP协议的作用在于
把各种数据包准备无误的传递给对方
,其中两个重要的条件是IP地址
和MAC地址。
- 由于IP地址是稀有资源,不可能每个人都拥有一个IP地址,所以
我们通常的IP地址是路由器给我们生成的IP地址,路由器里面会记录我们的MAC地址。
- 而
MAC地址是全球唯一的
。举例,IP地址就如同是我们居住小区的地址,而MAC地址就是我们住的那栋楼那个房间那个人。IP地址采用的IPv4格式,目前正在向IPv6过渡。
TCP协议概念
TCP(传输控制协议)
是面向连接的传输层协议。TCP层是位于IP层之上,应用层之下的中间层。
不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。TCP协议采用字节流传输数据。
HTTP协议
上面说了分层可以在使用的时候就可以仅仅关注我们需要关注的层次,而不用理会其他层。HTTP协议是在最上层,也就是应用层。这是最贴近我们的程序员的层次。
网站通信粗略过程
我们知道HTTP是在应用层中的,显然,我们在Web通信的过程中,不仅仅是需要HTTP协议的,还会涉及到其他的协议的
。
-
DNS:负责解析域名
我们访问一个网页的时候,往往是通过域名来访问的www.zhongfucheng.site,而计算机通信只认的是我们的主机地址(192.168.xxx.xxx),因此,当我们输入域名的时候,需要DNS把域名解析成主机来进行访问。 -
HTTP:产生请求报文数据
当我们对Web页面进行操作的时候,就会产生HTTP报文数据,请求对应的服务端进行响应。
-
TCP协议:分割HTTP数据,保证数据运输
TCP协议采用了三次握手的方式来保证数据的准确运输,在运输的数据的时候,发送标识过去给服务器,服务器也返回标识给客户端,而客户端收到消息后再次返回标识给服务器。这样一来就保证了数据运输是可靠的。 -
IP协议:传输数据包,找到通信目的地地址。
IP协议把我们的产生的数据包发送给对方,IP地址指明了节点被分配的地址,但IP地址可能会变换,我们可以使用ARP协议来将IP地址反射为MAC地址。MAC地址是不会更改的,是网卡所属的固定地址。 -
在找到通信目的地之前,我们是需要不断的中转的,这过程我们称作为:
“路由中转”
,我们并不知道路由中转了多少次的。
因此是不能全面了解到互联网中的传输状况的。 -
接下来就离我们比较远了,属于硬件相关的了,也就是
链路层和物理层。
网页上请求数据大概就是上边这么一个流程。
HTTP协议概述
-
HTTP,又叫
超文本传输协议
,英文全称是Hypertext Transfer Protocol
,它是互联网上应用最为广泛的一种网络协议。HTTP是一种应用层协议
,它是基于TCP协议之上
的请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到请求后,给予相应的响应信息。HTTP协议默认的端口号为80.
对于从客户端到服务器的每一个请求,都有4个步骤:
- 默认情况下,客户端在端口80打开与服务器的一个TCP连接,URL中还可以指定其他端口。
- 客户端向服务器发送消息,请求指定路径上的资源。这个资源包括一个首部,可选地(取决于请求的性质)还可以有一个空行,后面是这个请求的数据。
- 服务器向客户端发送响应。响应以响应码开头,后面是包含数据的首部、一个空行以及所请求的文档或错误消息。
- 服务器关闭连接。
-
现在使用的HTTP协议是HTTP/1.1
版本,
1997年之前采用的是HTTP1.0版本。HTTP连接在1.0版本中采用
非持续连接工作方式,1.1版本采用的是持续连接工作方式,持续连接是指服务器在发送响应后仍然在一段时间内保持这条由TCP运输层协议建立起来的连接,使客户机和服务器可以继续在这条连接上传输HTTP报文。 -
是否采用持续连接工作方式,
1.0中默认是关闭的
,需要在HTTP头加入"Connection:Keep-Alive"
,才能启用Keep-Alive。HTTP1.1中默认启用Keep-Alive
,如果加入"Connection:close",才关闭
。目前大部分浏览器都是用HTTP1.1协议,也就是说默认都会发起Keep-Alive的连接请求
了,所以是否能完成一个完整的Keep- Alive连接就看服务器设置情况。
HTTP协议客户端到服务器步骤
HTTP首部
HTTP请求报文
HTTP请求报文:在请求中,HTTP报文由方法
、URI
、HTTP版本
、HTTP首部字段
等部分组成。
- 请求行【描述客户端的
请求类型
、请求的资源名称
,及使用的HTTP协议版本号
】
- 请求首部字段【描述客户端
请求哪台主机,以及客户端的一些环境信息等
】 - 一个空行
首部字段例子:
- Accept: text/html,image/* 【浏览器告诉服务器,它支持的
数据类型
】 - Accept-Charset: ISO-8859-1 【浏览器告诉服务器,它支持哪种
字符集
】 - Accept-Encoding: gzip,compress 【浏览器告诉服务器,它支持的
压缩格式
】 - Accept-Language: en-us,zh-cn 【浏览器告诉服务器,它的
语言环境
】 - Host: www.it315.org:80【浏览器告诉服务器,它的想
访问哪台主机
】 - If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT【浏览器告诉服务器,
缓存数据的时间
】 - Referer: http://www.it315.org/index.jsp【浏览器告诉服务器,客户机是从那个页面来的—
防盗链
】 - .User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)【浏览器告诉服务器,
浏览器的内核是什么
】 - Cookie【浏览器告诉服务器,
带来的Cookie是什么
】 - Connection: close/Keep-Alive 【浏览器告诉服务器,
请求完后是断开链接还是保持链接
】 - Date: Tue, 11 Jul 2000 18:23:51 GMT【浏览器告诉服务器,
请求的时间
】
HTTP响应报文
HTTP响应报文:在响应中,HTTP报文由HTTP版本
、状态码(数字和原因短语)
、HTTP首部字段
3部分组成。
- 一个状态行【用于描述服务器对请求的处理结果。】
- 首部字段【用于描述
服务器的``基本信息
,及数据的描述
,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据】 - 一个空行
- 实体内容【
服务器向客户端回送的数据
】
状态行
格式: HTTP版本号 状态码 原因叙述
状态行:HTTP/1.1 200 OK
- 状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类
首部字段例子:
- Location: http://www.it315.org/index.jsp 【服务器告诉浏览器
要跳转到哪个页面
】 - Server:apache tomcat【服务器告诉浏览器,
服务器的型号是什么
】 - Content-Encoding: gzip 【服务器告诉浏览器
数据压缩的格式
】 - Content-Length: 80 【服务器告诉浏览器
返回数据的长度
】 - Content-Language: zh-cn 【服务器告诉浏览器,
服务器的语言环境
】 - Content-Type: text/html; charset=GB2312 【服务器告诉浏览器,
返回数据的类型
】 - Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT【服务器告诉浏览器
该资源上次更新时间
】 - Refresh: 1;url=http://www.it315.org【服务器告诉浏览器要
定时刷新
】 - Content-Disposition: attachment; filename=aaa.zip【服务器告诉浏览器
以下载方式打开数据
】 - Transfer-Encoding: chunked 【服务器告诉浏览器
数据以分块方式回送
】 - Set-Cookie:SS=Q0=5Lb_nQ; path=/search【
服务器告诉浏览器要保存Cookie
】 - Expires: -1【服务器告诉浏览器
不要设置缓存
】 - Cache-Control: no-cache 【服务器告诉浏览器
不要设置缓存
】 - Pragma: no-cache 【服务器告诉浏览器
不要设置缓存
】 - Connection: close/Keep-Alive 【服务器告诉浏览器
连接方式
】 - Date: Tue, 11 Jul 2000 18:23:51 GMT【服务器告诉浏览器
返回数据的时间
】
HTTPS和HTTP的区别
-
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer)
,是以安全为目标的HTTP通道,简单讲是HTTP的安全版
。即HTTP下加入SSL层
,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。 -
超文本传输协议HTTP协议被
用于在Web浏览器和网站服务器之间传递信息
。HTTP协议以明文方式发送内容,不提供任何方式的数据加密
,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息
,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码`等。 -
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS和HTTP的区别主要为以下四点:
- https协议需要到CA申请证书,一般免费证书很少,需要交费。
(CA认证,即电子认证服务,是指为电子签名相关各方提供真实性、可靠性验证的活动)
- http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,
前者是80,后者是443。
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
取自以下网站
Java—网络编程总结(整理版)
Java网络编程:Java网络编程基础
java网络编程入门
Java网络编程基础(Netty预备知识)