开发者学堂课程【Scala 核心编程 - 进阶:Akka 网络编程基础】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/610/detail/9117
Akka 网络编程基础
内容介绍:
一、引出问题
二、Akka网络编程基本介绍
一、引出问题
上节讲的两个案例虽然提到了 akka ,但是没有涉及到网络,实际上在开发中一定是网络通信,不可能在同一台机器上跑程序,因为一台计算机的能力是有限的,只能将任务分配到不同的服务器上,才能有效的发挥集群的威力。于是必不可少的涉及到网络问题。
用 Akka 网络编程更加轻松,最早是 socket 编程,其底层是 tcp/ip
1.看两个实际应用(socket/tcp/ip)
(1)QQ,迅雷,百度网盘客户端. 新浪网站,京东商城,淘宝
该图为 Tcp 编程。
基于网站的,一般叫 Http 编程(建设在 Tcp/ip 基础之上,应用级别更高),如下图
二、Akka 网络编程基本介绍
Akka 支持面向大并发后端服务程序,网络通信这块是服务端程序重要的一部分。
1.网络编程有两种:
1) TCP socket 编程,是网络编程的主流。之所以叫 Tcp socket 编程,是因为底层
是基于 Tcp/ip 协议的.比如;QQ 聊天
2) b/s 结构的 http 编程,我们使用浏览器去访问服务器时,使用的就是http 协议,
而 http 底层依旧是用 tcp socket 实现的。比如:京东商城【属于 web 开发范畴】
(域名劫持,通过网络将 DNS 攻破, DNS 一旦域名被劫持,所有请求到目标网站的人都会到一个钓鱼网站的ip)
2.协议(tcp/ip)
TCP/IP ( Transmission Control Protocol/Internet Protocol)的简写,中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是 Internet 最基本的协议、Internet 国际互联网络的基础,简单地说,就是由网络层的 IP 协议和传输层的 TCP 协议组成的。
OSI 与 Tcp/ip 参考模型(推荐tcp/ip协议3卷)
(下表因为操作起来特别麻烦所以没有实现)
应用层(application) |
表示层(presention) |
会话层(session) |
传输层(transport) |
网络层(ip) |
数据链路层(link) |
物理层(phy sical) |
osi模型(理论) |
在真实的网络世界中,网络分为4层(下表)
应用层(application) smtp,ftp,telnet http |
传输层: (transport)解释数据 |
网络层:(ip)定位ip地址和确定连接路径 |
链路层:(link)与硬件驱动对话 |
Tcp/ ip模型(现实) |
3.网络分为4层,每一层都有其功能,举个例子
QQ 要发一条消息 “hello“ 给另外一个人,每一个计算机电脑都会装 TCP/IP 协议,当要从网络传输时,首先要经过应用层,给其加一个 APP,代表要发给这个程序,然后经过传输层,再加一个 TCP ,再经过网络层,将 IP 加上。经过链路层,会加一个帧头和帧尾,这时信息变成一帧数据。
整个信息到网卡,网卡经过一系列的路由器最终到达对方,对方也会安装 TCP/IP 协议。如果没有 TCP/IP 协议则无法上网,也没有任何网络通讯工具,对方会通过链路层将帧头和帧尾去除,经过网络层就把 ip 去除,经过传输层就把 TCP 去掉,经过应用层就将 APP 去掉,这就是为什么一边发的QQ 信息另一边可以接收到的根本原因。
4.补充
在做程序、管理、运维、服务器管理时遇到网络不通时,要排除哪一台路由器出现问题,可以用 tracert 这个指令,tracert 指令可以追踪路由,可以看到经过哪些路由器,如果发现出现问题,就知道哪一台路由器有问题。
5.ip 地址
概述:每个 internet 上的主机和路由器都有一个 ip 地址,它包括网络号和主机号,ip 地址有 ipv4 (32位)或者 ipv6 (128位).可以通过 ipconfig 来查看
为什么有 ipv4 还要有 ipv6 ?
ipv4 的ip 不够用,美国一个互联网中心希望将来所有设备都有一个 ip 地址,不仅仅是电脑。
6.ipv4与ipv6的区别
IPv4的地址位数为32位,也就是最多有2的32次方的电脑可以联到 Internet 上,近十年来由于互联网的蓬勃发展, IP 位址的需求量愈来愈大,使得 IP 位址的发放愈趋严格,各项资料显示全球 IPv4 位址可能在2005至2008年间全部发完。
IPv4中规定IP地址长度为32,即有 2^32-1个地址,而 IPv6 中 IP 地址的长度为128,即有 2^128-1个地址。
7.端口(port)介绍
我们这里所指的端口不是指物理意义上的端口,而是特指 TCP/IP 协议中的端口,是逻辑意义上的端口。
如果把 lP 地址比作一间房子,端口就是出入这间房子的门。真正的房子只有几个门,但是一个 IP 地址的端口可以有
65535(即:256×256-1)个之多!端口是通过端口号来标记的。(端口号0 :Reserved)
8.端口(port)分类
1)0号是保留端口.
2)1-1024是固定端口
又叫有名端口,即被某些程序固定使用,一般程序员不使用.
22:SSH远程登录协议 23: telnet使用 21: ftp使用
25:smtp服务使用 80: lis使用 7: echo服务
3)1025-65535是动态端口
这些端口,程序员可以使用.
建议以后设计端口用一万以上的,如果开发中发现有些端口没有启用,在监听,小心它可能是木马。
9.端口(port)使用注意
1)在计算机(尤其是做服务器)要尽可能的少开端口
2)一个端口只能被一个程序监听(不能同时监听同一个端口)
3)如果使用 netstat -an 可以查看本机有哪些端口在监听
4)可以使用 netstat -anb 来查看监听端口的 pid,在结合任务管理器关闭不安全的端口.
5)如下图
有一台服务器,一个客户端A他们之间相互通讯,假设这个服务器监听的是80端口,又有一个客户端B,个80端口是可以被多个程序连接的,因为这不是监听而是连接,这就叫并发。另外,一旦连接形成,客户端也会有端口与之对应,该端口一般是随机分配的。(TCP 协议或者网络通信都会有端口的对应)
为了授课方法,我们将 tcp socket 编程,简称 socket 编程.下图为 socket 编程中客户端和服务器的网络分布