简单谈谈计算机网络

RESTful API 设计介绍 - 曾铭

WHAT

  • API 概念
  • 其它方案 SOAP 等
  • HTTP 无状态
  • RESTful 概念 REpresentational State Transfer 表征性状态传输
  • 复用 HTTP 本身的协议定义
  • 带来的好处:通用,动词,code,缓存,安全

例子

1
2
3
4
5
6
BAD
/getProduct

/addProduct
/deleteProduct

/listProducts
/productShop?productId=1
  • 对单一实体的重复
  • 多个实体对操作的重复
  • 实体之间逻辑接口的重复定义
1
2
3
4
5
6
7
8
9
10
11
GOOD
GET /products : will return the list of all products
GET /products/4 : will retrieve product #4
POST /products : will add a product to the collection
PUT /products/4 : will update product #4
DELETE /products/4 : will delete product #4

GET /products/4/shop
GET /users/3/favorite_schools
POST /users/3/favorite_schools
PUT /users/3/favorite_schools/5
  • 好的 API 定义清晰,可预期。

总结

  • 重复的实现或设计,嗅嗅不好的味道
  • 重复制造轮子,而不是重复发明轮子 (如用户授权,加密,缓存等)
  • RESTful 不仅仅适用于 APP,重点是 C/S
  • 各端实现:参考覃超的知乎回答

IP网段划分 - 王胜

三大类IP段

  • A类地址

    • 第1字节为网络地址,其他3个字节为主机地址。另外,第1个字节的最高位固定为0。
    • 地址范围:1.0.0.0到126.255.255.255。
    • 默认子网掩码:255.0.0.0,一个子网最多可以容纳1677万多台电脑。
    • 保留地址:127.0.0.0到127.255.255.255是保留地址,用做循环测试用。
    • 私有地址:10.0.0.0到10.255.255.255。【0000 1010】
  • B类地址

    • 第1字节和第2字节为网络地址,其他2个字节为主机地址。另外1个字节的前2位固定为10。
    • 地址范围:128.0.0.0到191.255.255.255。
    • 默认子网掩码:255.255.0.0 一个子网最多可以容纳6万台电脑。
    • 保留地址:169.254.0.0到169.254.255.255是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器,这时你将会从169.254.0.1到169.254.255.254中临时获得一个IP地址。
    • 私有地址:在B类地址中,172.16.0.0到172.31.255.255是私有地址。
  • C类地址

    • 第1字节、第2字节和第3个字节为网络地址,第4个字节为主机地址。另外第1个字节的前三位固定为110。
    • 地址范围:192.0.0.0到223.255.255.255。
    • 默认子网掩码 255.255.255.0 一个子网最多可以容纳254台电脑。
    • 私有地址:192.168.0.0到192.168.255.255是私有地址。

两个特殊地址

  • 0.0.0.0 全网地址,三界之外的收容器
  • 255.255.255.255 广播地址

OSI七层模型详解 - 吴明

OSI七层模型详解

  • 物理层:
    • 相关协议:IEEE802.2,Ethernet v.2,Internetwork
  • 数据链路层
    • 相关协议:MPLS,XTP,DCAP
  • 网络层
  • 传输层
    • 相关协议:EGP,NHRP
  • 会话层:
  • 表示层:
  • 应用层:

网络分层协议模型 - 张超耀

网络分层协议模型

  • 根据 TCP/IP协议簇的协议来命名

    • 应用层  数据   泛指应用层使用的
    • 传输层  数据段     传输层
    • 网络层  数据包     网络层
    • 链路层  帧       网络接入层
    • 物理层  比特(位)    通过介质实际传输数据时使用的
  • OSI七成协议模型

    • 应用层:例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP
    • 表示层:例如XDR、ASN.1、SMB、AFP、NCP
    • 会话层:例如ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets
    • 传输层:例如TCP、UDP、RTP、SCTP、SPX、ATP、IL
    • 网络层:例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、X.25
    • 数据链路层:例如以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP
    • 物理层:例如线路、无线电、光纤
  • 分层的好处:

    • 各层之间是独立的
    • 灵活性好
    • 结构上可分割开
    • 易于实现和维护
    • 能促进标准化工作

协议模型:

包装数据包的过程

  • TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCP segment),传给网络接口层的数据单元称作IP数据报(IPdatagram).通过以太网传输的比特流称作帧(Frame)

分用即解包的过程

不同层直接协议关系


TCP/IP三次握手与四次挥手 - 李仙鹏

TCP/IP三次握手与四次挥手

引用自图解 TCP/IP 协议&version=11020012&pass_ticket=Mh3kdFcxrCoIa0yIg1d7eLqJGuQkBQLzt2YIYx5poC%2BLzaWWMRZ5D1Vl6Pobd8ui)


计算机网络安全 - 杨志平

2015网络安全事件

  • 携程网内部员工误删除代码 网站整体宕机12小时
  • 支付宝机房电缆被挖断 部分区域服务中断
  • 网易骨干网遭攻击 百万用户无法打游戏
  • 海康威视被黑客植入代码 导致被远程监控

敏感数据(账号、密码等)

  • 账号密码(post明文显示)
  • 重要资源数据(防爬虫)
  • 多重账号威胁(网络账号通用)
  • 通讯协议破解(iMessage)

网络传输加密

  • 数据加密算法

    • 对称式加密技术 (加密-解密)
      • DES(Data Encryption Standard)

        数据加密标准,速度较快,适用于加密大量数据的场合。

      • 3DES(Triple DES)

        是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。

      • AES(Advanced Encryption Standard)

        高级加密标准,是下一代的加密算法标准,速度快,安全级别高;

- 非对称式加密技术(公钥-私钥)
    - RSA
    >是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;
    - DSADigital Signature Algorithm    >数字签名算法,是一种标准的 DSS(数字签名标准);
    - ECCElliptic Curves Cryptography    >椭圆曲线密码编码学。

- 散列算法 (不可逆)
    - MD5Message Digest Algorithm 5    >是RSA数据安全公司开发的一种单向散列算法,非可逆,相同的明文产生相同的密文。
    - SHASecure Hash Algorithm    >可以对任意长度的数据运算生成一个160位的数值;

3个著名加密算法(MD5、RSA、DES)的解析

简单加密演示

  • 简单位移式加密(经典:凯撒加密)
1
2
3
4
5
6
“恺撒密码”据传是古罗马恺撒大帝用来保护重要军情的加密系统。它是一种替代密码,通过将字母按顺序推后起3位起到加密作用,
如将字母A换作字母D,将字母B换作字母E。据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。
假如有这样一条指令:
RETURN TO ROME
用恺撒密码加密后就成为:
UHWXUA WR URPH
  • 置换加密
1
2
3
4
5
6
7
8
9
10
11
12
令明文m=m1,m2,...mL。令置换矩阵所决定的置换为pi,则加密置换c=Ek(m)=(c1,c2,...cL)=mpi(1),mpi(2),...,mpi(L)
解密置换
d=Dk(c)=(cn^-1(1),cn^-1(2),...cn^-1(L))
例,置换密码。给定明文为the simplest possible transposition ciphers,
将明文分成长为L=5的段,
m1=thesi, m2=mples m3=tposs m4=iblet,
m5=ransp, m6=ositi m7=oncip m8=hersx
最后一段长不足5,加添一个字母x。将隔断的字母序号按下述置换矩阵进行换位:
Ek= 0 1 2 3 4
3 0 4 2 1
得到密文如下
STIEH EMSLP STSOP EITLB SRPNA TOIIS IOPCN SHXRE

Alamofire文档阅读 - 潘君

AFNetworking的继承者

摘录自Alamofire 官方文档

Feature

  • Chainable Request / Response methods
    链式 request / response
    Complete Documentation
1
2
3
4
5
6
7
8
// Response handlers can even be chained:
Alamofire.request(.GET, "http://httpbin.org/get")
.responseString { _, _, string, _ in
println(string)
}
.responseJSON { _, _, JSON, _ in
println(JSON)
}
  • URL / JSON / plist Parameter Encoding
    除了以上几种 还可以自定义
    Alamofire provides built-in response serialization for strings, JSON, and property lists, but others can be added in extensions on Alamofire.Request.

    • Upload File / Data / Stream / MultipartFormData
      多种文件上传方式
  • Download using Request or Resume data

  • Authentication with NSURLCredential

  • HTTP Response Validation

  • Progress Closure & NSProgress

  • cURL Debug Output
  • Comprehensive Unit Test Coverage

某些点

  • url编码
    GET
    1
    2
    3
    GET Request With URL-Encoded Parameters
    Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
    // http://httpbin.org/get?foo=bar

POST

1
2
3
4
5
6
7
8
9
10
11
12
let parameters = [
"foo": "bar",
"baz": ["a", 1],
"qux": [
"x": 1,
"y": 2,
"z": 3
]
]

Alamofire.request(.POST, "http://httpbin.org/post", parameters: parameters)
// HTTP body: foo=bar&baz[]=a&baz[]=1&qux[x]=1&qux[y]=2&qux[z]=3

  • 转object
    Generic Response Object Serialization

  • 校验

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Manual Validation

    Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
    .validate(statusCode: 200..<300)
    .validate(contentType: ["application/json"])
    .response { _, _, _, error in
    println(error)
    }
    Automatic Validation

    Automatically validates status code within 200...299 range, and that the Content-Type header of the response matches the Accept header of the request, if one is provided.

    Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
    .validate()
    .response { _, _, _, error in
    println(error)
    }
  • 方便打印
    Printable

1
2
3
4
5
let request = Alamofire.request(.GET, "http://httpbin.org/ip")

println(request)

// GET http://httpbin.org/ip (200)

DebugPrintable

1
2
3
let request = Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])

debugPrintln(request)
  • 支持暂停/恢复/取消
  1. suspend(): Suspends the underlying task and dispatch queue
  2. resume(): Resumes the underlying task and dispatch queue. If the owning manager does not have startRequestsImmediately set to true, the request must call resume() in order to start.
  3. cancel(): Cancels the underlying task, producing an error that is passed to any registered response handlers.
  • 自定义response serializer